forked from OSchip/llvm-project
4f9c59f863
This makes it possible to unwind hardware exception stack frames, which necessarily save every register and so need an extra column for storing the return address. CFI for the exception handler could then look as follows: .globl exception_vector exception_vector: .cfi_startproc .cfi_signal_frame .cfi_return_column 32 l.addi r1, r1, -0x100 .cfi_def_cfa_offset 0x100 l.sw 0x00(r1), r2 .cfi_offset 2, 0x00-0x100 l.sw 0x04(r1), r3 .cfi_offset 3, 0x04-0x100 l.sw 0x08(r1), r4 .cfi_offset 4, 0x08-0x100 l.mfspr r3, r0, SPR_EPCR_BASE l.sw 0x78(r1), r3 .cfi_offset 32, 0x78-0x100 l.jal exception_handler l.nop l.lwz r2, 0x00(r1) l.lwz r3, 0x04(r1) l.lwz r4, 0x08(r1) l.jr r9 l.nop .cfi_endproc This register could, of course, also be accessed by the trace callback or personality function, if so desired. llvm-svn: 332513 |
||
---|---|---|
.. | ||
AddressSpace.hpp | ||
CMakeLists.txt | ||
CompactUnwinder.hpp | ||
DwarfInstructions.hpp | ||
DwarfParser.hpp | ||
EHHeaderParser.hpp | ||
RWMutex.hpp | ||
Registers.hpp | ||
Unwind-EHABI.cpp | ||
Unwind-EHABI.h | ||
Unwind-sjlj.c | ||
UnwindCursor.hpp | ||
UnwindLevel1-gcc-ext.c | ||
UnwindLevel1.c | ||
UnwindRegistersRestore.S | ||
UnwindRegistersSave.S | ||
Unwind_AppleExtras.cpp | ||
assembly.h | ||
config.h | ||
dwarf2.h | ||
libunwind.cpp | ||
libunwind_ext.h |