https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103510
Bug ID: 103510
Summary: _Unwind_GetGR crashed for uninitialized registers
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libgcc
Assignee: unassigned at gcc dot gnu.org
Reporter: ashimida at linux dot alibaba.com
Target Milestone: ---
When use _Unwind_Backtrace with a callback funciton for backtrace,
if the reg corresponding to i is not initialized when calling
_Unwind_GetGR(context, i) in the callback, it will cause a crash
due to 0 address dereference.
Although the register status can be predicted by calling
_Unwind_GetGRPtr or other methods, these functions are not within
the LSB standard.
Clang works fine for this. Is there any way for me to write a common
backtrace function that uses _Unwind_Backtrace, or is it reasonable
to initialize all context->reg[x] with the values of all hardware
registers at the beginning of unwind?