jwnhy created this revision. jwnhy added reviewers: Michael137, DavidSpickett. Herald added a project: All. jwnhy requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
This patch resolves an issue where a value is incorrectly displayed if it is represented by DW_OP_div. This issue is caused by lldb evaluating operands of DW_OP_div as unsigned and performed unintended unsigned division. This issue is resolved by creating two temporary signed scalar and performing signed division. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D147370 Files: lldb/source/Expression/DWARFExpression.cpp Index: lldb/source/Expression/DWARFExpression.cpp =================================================================== --- lldb/source/Expression/DWARFExpression.cpp +++ lldb/source/Expression/DWARFExpression.cpp @@ -1436,8 +1436,12 @@ return false; } else { stack.pop_back(); - stack.back() = - stack.back().ResolveValue(exe_ctx) / tmp.ResolveValue(exe_ctx); + Scalar divisor, dividend; + divisor = tmp.ResolveValue(exe_ctx); + dividend = stack.back().ResolveValue(exe_ctx); + divisor.MakeSigned(); + dividend.MakeSigned(); + stack.back() = dividend / divisor; if (!stack.back().ResolveValue(exe_ctx).IsValid()) { if (error_ptr) error_ptr->SetErrorString("Divide failed.");
Index: lldb/source/Expression/DWARFExpression.cpp =================================================================== --- lldb/source/Expression/DWARFExpression.cpp +++ lldb/source/Expression/DWARFExpression.cpp @@ -1436,8 +1436,12 @@ return false; } else { stack.pop_back(); - stack.back() = - stack.back().ResolveValue(exe_ctx) / tmp.ResolveValue(exe_ctx); + Scalar divisor, dividend; + divisor = tmp.ResolveValue(exe_ctx); + dividend = stack.back().ResolveValue(exe_ctx); + divisor.MakeSigned(); + dividend.MakeSigned(); + stack.back() = dividend / divisor; if (!stack.back().ResolveValue(exe_ctx).IsValid()) { if (error_ptr) error_ptr->SetErrorString("Divide failed.");
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits