llvm-project/libunwind/src
whitequark 4f9c59f863 [OR1K] Add the EPCR special-purpose register to register state.
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
2018-05-16 19:09:48 +00:00
..
AddressSpace.hpp [libunwind][MIPS]: Add support for unwinding in N32 processes. 2018-02-27 21:24:02 +00:00
CMakeLists.txt [cmake] Remove duplicate command line options from build 2018-04-05 20:27:50 +00:00
CompactUnwinder.hpp Fix up the places where AddressSpace.hpp is included. 2017-03-09 08:04:07 +00:00
DwarfInstructions.hpp [libunwind][MIPS]: Add support for unwinding in N32 processes. 2018-02-27 21:24:02 +00:00
DwarfParser.hpp [libunwind] Remove dubious template function. NFC. 2017-12-25 21:08:41 +00:00
EHHeaderParser.hpp GNU: do not read the FDE count if omitted 2017-10-20 18:47:35 +00:00
RWMutex.hpp Abstract rwlocks into a class, provide a SRW lock implementation for windows 2017-10-23 19:29:36 +00:00
Registers.hpp [OR1K] Add the EPCR special-purpose register to register state. 2018-05-16 19:09:48 +00:00
Unwind-EHABI.cpp Change unw_word_t to always have the same size as the pointer size 2017-10-30 19:06:34 +00:00
Unwind-EHABI.h [libunwind] Clean up macro usage. 2017-03-31 15:28:06 +00:00
Unwind-sjlj.c SjLj: Fix building after SVN r314632 2017-10-01 20:22:40 +00:00
UnwindCursor.hpp [libunwind][MIPS]: Rename Registers_mips_n64 to Registers_mips_newabi. 2018-01-09 17:07:18 +00:00
UnwindLevel1-gcc-ext.c Change unw_word_t to always have the same size as the pointer size 2017-10-30 19:06:34 +00:00
UnwindLevel1.c Change unw_word_t to always have the same size as the pointer size 2017-10-30 19:06:34 +00:00
UnwindRegistersRestore.S [OR1K] Add a dedicated PC register to register state. 2018-05-16 19:09:41 +00:00
UnwindRegistersSave.S [OR1K] Add the EPCR special-purpose register to register state. 2018-05-16 19:09:48 +00:00
Unwind_AppleExtras.cpp SjLj: make the SjLj implementation more portable 2017-10-01 20:06:48 +00:00
assembly.h [PPC64] Added vector registers. 2018-01-16 20:54:10 +00:00
config.h Don't enable _LIBUNWIND_BUILD_ZERO_COST_APIS if building the SJLJ APIs 2018-01-26 06:50:07 +00:00
dwarf2.h
libunwind.cpp [libunwind][MIPS] Support MIPS floating-point registers for hard-float ABIs. 2018-05-15 22:44:56 +00:00
libunwind_ext.h [libunwind] Clean up macro usage. 2017-03-31 15:28:06 +00:00