mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-21 03:05:26 -04:00
Revert r358268 "[DebugInfo] DW_OP_deref_size in PrologEpilogInserter."
It causes clang to crash while building Chromium. See https://crbug.com/952230 for reproducer. > The PrologEpilogInserter need to insert a DW_OP_deref_size before > prepending a memory location expression to an already implicit > expression to avoid having the existing expression act on the memory > address instead of the value behind it. > > The reason for using DW_OP_deref_size and not plain DW_OP_deref is that > big-endian targets need to read the right size as simply truncating a > larger read would yield the wrong result (LSB bytes are not at the lower > address). > > Differential Revision: https://reviews.llvm.org/D59687 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358281 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -833,7 +833,6 @@ unsigned DIExpression::ExprOperand::getSize() const {
|
||||
case dwarf::DW_OP_LLVM_fragment:
|
||||
return 3;
|
||||
case dwarf::DW_OP_constu:
|
||||
case dwarf::DW_OP_deref_size:
|
||||
case dwarf::DW_OP_plus_uconst:
|
||||
return 2;
|
||||
default:
|
||||
@@ -890,7 +889,6 @@ bool DIExpression::isValid() const {
|
||||
case dwarf::DW_OP_shr:
|
||||
case dwarf::DW_OP_shra:
|
||||
case dwarf::DW_OP_deref:
|
||||
case dwarf::DW_OP_deref_size:
|
||||
case dwarf::DW_OP_xderef:
|
||||
case dwarf::DW_OP_lit0:
|
||||
case dwarf::DW_OP_not:
|
||||
@@ -901,19 +899,6 @@ bool DIExpression::isValid() const {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DIExpression::isImplicit() const {
|
||||
unsigned N = getNumElements();
|
||||
if (isValid() && N > 0) {
|
||||
switch (getElement(N-1)) {
|
||||
case dwarf::DW_OP_stack_value: return true;
|
||||
case dwarf::DW_OP_LLVM_fragment:
|
||||
return N > 1 && getElement(N-2) == dwarf::DW_OP_stack_value;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Optional<DIExpression::FragmentInfo>
|
||||
DIExpression::getFragmentInfo(expr_op_iterator Start, expr_op_iterator End) {
|
||||
for (auto I = Start; I != End; ++I)
|
||||
|
||||
Reference in New Issue
Block a user