@@ -94,51 +94,38 @@ void DWARFExpression::SetRegisterKind(RegisterKind reg_kind) {
94
94
m_reg_kind = reg_kind;
95
95
}
96
96
97
-
98
- static bool ReadRegisterValueAsScalar (RegisterContext *reg_ctx,
99
- lldb::RegisterKind reg_kind,
100
- uint32_t reg_num, Status *error_ptr,
101
- Value &value) {
102
- if (reg_ctx == nullptr ) {
103
- if (error_ptr)
104
- error_ptr->SetErrorString (" No register context in frame.\n " );
105
- } else {
106
- uint32_t native_reg =
107
- reg_ctx->ConvertRegisterKindToRegisterNumber (reg_kind, reg_num);
108
- if (native_reg == LLDB_INVALID_REGNUM) {
109
- if (error_ptr)
110
- error_ptr->SetErrorStringWithFormat (" Unable to convert register "
111
- " kind=%u reg_num=%u to a native "
112
- " register number.\n " ,
113
- reg_kind, reg_num);
114
- } else {
115
- const RegisterInfo *reg_info =
116
- reg_ctx->GetRegisterInfoAtIndex (native_reg);
117
- RegisterValue reg_value;
118
- if (reg_ctx->ReadRegister (reg_info, reg_value)) {
119
- if (reg_value.GetScalarValue (value.GetScalar ())) {
120
- value.SetValueType (Value::ValueType::Scalar);
121
- value.SetContext (Value::ContextType::RegisterInfo,
122
- const_cast <RegisterInfo *>(reg_info));
123
- if (error_ptr)
124
- error_ptr->Clear ();
125
- return true ;
126
- } else {
127
- // If we get this error, then we need to implement a value buffer in
128
- // the dwarf expression evaluation function...
129
- if (error_ptr)
130
- error_ptr->SetErrorStringWithFormat (
131
- " register %s can't be converted to a scalar value" ,
132
- reg_info->name );
133
- }
134
- } else {
135
- if (error_ptr)
136
- error_ptr->SetErrorStringWithFormat (" register %s is not available" ,
137
- reg_info->name );
138
- }
97
+ static llvm::Error ReadRegisterValueAsScalar (RegisterContext *reg_ctx,
98
+ lldb::RegisterKind reg_kind,
99
+ uint32_t reg_num, Value &value) {
100
+ if (reg_ctx == nullptr )
101
+ return llvm::createStringError (" no register context in frame" );
102
+
103
+ const uint32_t native_reg =
104
+ reg_ctx->ConvertRegisterKindToRegisterNumber (reg_kind, reg_num);
105
+ if (native_reg == LLDB_INVALID_REGNUM)
106
+ return llvm::createStringError (
107
+ " unable to convert register kind=%u reg_num=%u to a native "
108
+ " register number" ,
109
+ reg_kind, reg_num);
110
+
111
+ const RegisterInfo *reg_info = reg_ctx->GetRegisterInfoAtIndex (native_reg);
112
+ RegisterValue reg_value;
113
+ if (reg_ctx->ReadRegister (reg_info, reg_value)) {
114
+ if (reg_value.GetScalarValue (value.GetScalar ())) {
115
+ value.SetValueType (Value::ValueType::Scalar);
116
+ value.SetContext (Value::ContextType::RegisterInfo,
117
+ const_cast <RegisterInfo *>(reg_info));
118
+ return llvm::Error::success ();
139
119
}
120
+
121
+ // If we get this error, then we need to implement a value buffer in
122
+ // the dwarf expression evaluation function...
123
+ return llvm::createStringError (
124
+ " register %s can't be converted to a scalar value" , reg_info->name );
140
125
}
141
- return false ;
126
+
127
+ return llvm::createStringError (" register %s is not available" ,
128
+ reg_info->name );
142
129
}
143
130
144
131
// / Return the length in bytes of the set of operands for \p op. No guarantees
@@ -1832,11 +1819,10 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
1832
1819
dwarf4_location_description_kind = Register;
1833
1820
reg_num = op - DW_OP_reg0;
1834
1821
1835
- Status read_err;
1836
- if (ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, &read_err, tmp))
1837
- stack.push_back (tmp);
1838
- else
1839
- return read_err.ToError ();
1822
+ if (llvm::Error err =
1823
+ ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, tmp))
1824
+ return err;
1825
+ stack.push_back (tmp);
1840
1826
} break ;
1841
1827
// OPCODE: DW_OP_regx
1842
1828
// OPERANDS:
@@ -1846,10 +1832,10 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
1846
1832
dwarf4_location_description_kind = Register;
1847
1833
reg_num = opcodes.GetULEB128 (&offset);
1848
1834
Status read_err;
1849
- if (ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, &read_err, tmp))
1850
- stack. push_back ( tmp);
1851
- else
1852
- return read_err. ToError ( );
1835
+ if (llvm::Error err =
1836
+ ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, tmp))
1837
+ return err;
1838
+ stack. push_back (tmp );
1853
1839
} break ;
1854
1840
1855
1841
// OPCODE: DW_OP_bregN
@@ -1890,17 +1876,15 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
1890
1876
case DW_OP_breg30:
1891
1877
case DW_OP_breg31: {
1892
1878
reg_num = op - DW_OP_breg0;
1893
-
1894
- Status read_err;
1895
- if (ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, &read_err,
1896
- tmp)) {
1897
- int64_t breg_offset = opcodes.GetSLEB128 (&offset);
1898
- tmp.ResolveValue (exe_ctx) += (uint64_t )breg_offset;
1899
- tmp.ClearContext ();
1900
- stack.push_back (tmp);
1901
- stack.back ().SetValueType (Value::ValueType::LoadAddress);
1902
- } else
1903
- return read_err.ToError ();
1879
+ if (llvm::Error err =
1880
+ ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, tmp))
1881
+ return err;
1882
+
1883
+ int64_t breg_offset = opcodes.GetSLEB128 (&offset);
1884
+ tmp.ResolveValue (exe_ctx) += (uint64_t )breg_offset;
1885
+ tmp.ClearContext ();
1886
+ stack.push_back (tmp);
1887
+ stack.back ().SetValueType (Value::ValueType::LoadAddress);
1904
1888
} break ;
1905
1889
// OPCODE: DW_OP_bregx
1906
1890
// OPERANDS: 2
@@ -1910,17 +1894,15 @@ llvm::Expected<Value> DWARFExpression::Evaluate(
1910
1894
// N plus an offset.
1911
1895
case DW_OP_bregx: {
1912
1896
reg_num = opcodes.GetULEB128 (&offset);
1913
-
1914
- Status read_err;
1915
- if (ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, &read_err,
1916
- tmp)) {
1917
- int64_t breg_offset = opcodes.GetSLEB128 (&offset);
1918
- tmp.ResolveValue (exe_ctx) += (uint64_t )breg_offset;
1919
- tmp.ClearContext ();
1920
- stack.push_back (tmp);
1921
- stack.back ().SetValueType (Value::ValueType::LoadAddress);
1922
- } else
1923
- return read_err.ToError ();
1897
+ if (llvm::Error err =
1898
+ ReadRegisterValueAsScalar (reg_ctx, reg_kind, reg_num, tmp))
1899
+ return err;
1900
+
1901
+ int64_t breg_offset = opcodes.GetSLEB128 (&offset);
1902
+ tmp.ResolveValue (exe_ctx) += (uint64_t )breg_offset;
1903
+ tmp.ClearContext ();
1904
+ stack.push_back (tmp);
1905
+ stack.back ().SetValueType (Value::ValueType::LoadAddress);
1924
1906
} break ;
1925
1907
1926
1908
case DW_OP_fbreg:
0 commit comments