whitequark created this revision.
whitequark added a reviewer: compnerd.
Herald added a subscriber: JDevlieghere.
If prolog info lists the RA register as unused, it means that
the current stack frame corresponds to a leaf function which never
needs to save the RA register. The RA register is of course used
to return from this leaf function.
Such a frame may be in the middle of the stack if another frame was
pushed on top of it by a signal or CPU exception. In this case,
unless we extract RA from the RA register, _Unwind_Backtrace would
stop at the frame right above the signal or exception frame.
Repository:
rUNW libunwind
https://reviews.llvm.org/D46971
Files:
src/DwarfInstructions.hpp
Index: src/DwarfInstructions.hpp
===================================================================
--- src/DwarfInstructions.hpp
+++ src/DwarfInstructions.hpp
@@ -192,6 +192,8 @@
else
return UNW_EBADREG;
}
+ else if (i == (int)cieInfo.returnAddressRegister)
+ returnAddress = registers.getRegister(i);
}
// By definition, the CFA is the stack pointer at the call site, so
Index: src/DwarfInstructions.hpp
===================================================================
--- src/DwarfInstructions.hpp
+++ src/DwarfInstructions.hpp
@@ -192,6 +192,8 @@
else
return UNW_EBADREG;
}
+ else if (i == (int)cieInfo.returnAddressRegister)
+ returnAddress = registers.getRegister(i);
}
// By definition, the CFA is the stack pointer at the call site, so
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits