| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- --- a/include/libunwind-ppc32.h
- +++ b/include/libunwind-ppc32.h
- @@ -81,6 +81,88 @@ typedef int64_t unw_sword_t;
-
- typedef long double unw_tdep_fpreg_t;
-
- +#ifndef __GLIBC__
- +
- +/* We can't include asm/ptrace.h here, as it conflicts with musl's definitions */
- +
- +#define PT_R0 0
- +#define PT_R1 1
- +#define PT_R2 2
- +#define PT_R3 3
- +#define PT_R4 4
- +#define PT_R5 5
- +#define PT_R6 6
- +#define PT_R7 7
- +#define PT_R8 8
- +#define PT_R9 9
- +#define PT_R10 10
- +#define PT_R11 11
- +#define PT_R12 12
- +#define PT_R13 13
- +#define PT_R14 14
- +#define PT_R15 15
- +#define PT_R16 16
- +#define PT_R17 17
- +#define PT_R18 18
- +#define PT_R19 19
- +#define PT_R20 20
- +#define PT_R21 21
- +#define PT_R22 22
- +#define PT_R23 23
- +#define PT_R24 24
- +#define PT_R25 25
- +#define PT_R26 26
- +#define PT_R27 27
- +#define PT_R28 28
- +#define PT_R29 29
- +#define PT_R30 30
- +#define PT_R31 31
- +
- +#define PT_NIP 32
- +#define PT_MSR 33
- +#define PT_ORIG_R3 34
- +#define PT_CTR 35
- +#define PT_LNK 36
- +#define PT_XER 37
- +#define PT_CCR 38
- +#ifndef __powerpc64__
- +#define PT_MQ 39
- +#else
- +#define PT_SOFTE 39
- +#endif
- +#define PT_TRAP 40
- +#define PT_DAR 41
- +#define PT_DSISR 42
- +#define PT_RESULT 43
- +#define PT_DSCR 44
- +#define PT_REGS_COUNT 44
- +
- +#define PT_FPR0 48 /* each FP reg occupies 2 slots in this space */
- +
- +#ifndef __powerpc64__
- +
- +#define PT_FPR31 (PT_FPR0 + 2*31)
- +#define PT_FPSCR (PT_FPR0 + 2*32 + 1)
- +
- +#else /* __powerpc64__ */
- +
- +#define PT_FPSCR (PT_FPR0 + 32) /* each FP reg occupies 1 slot in 64-bit space */
- +
- +
- +#define PT_VR0 82 /* each Vector reg occupies 2 slots in 64-bit */
- +#define PT_VSCR (PT_VR0 + 32*2 + 1)
- +#define PT_VRSAVE (PT_VR0 + 33*2)
- +
- +
- +/*
- + * Only store first 32 VSRs here. The second 32 VSRs in VR0-31
- + */
- +#define PT_VSR0 150 /* each VSR reg occupies 2 slots in 64-bit */
- +#define PT_VSR31 (PT_VSR0 + 2*31)
- +#endif /* __powerpc64__ */
- +
- +#endif /* !__GLIBC__ */
- +
- typedef enum
- {
- UNW_PPC32_R0,
- --- a/include/libunwind-ppc64.h
- +++ b/include/libunwind-ppc64.h
- @@ -88,6 +88,88 @@ typedef struct {
- uint64_t halves[2];
- } unw_tdep_vreg_t;
-
- +#ifndef __GLIBC__
- +
- +/* We can't include asm/ptrace.h here, as it conflicts with musl's definitions */
- +
- +#define PT_R0 0
- +#define PT_R1 1
- +#define PT_R2 2
- +#define PT_R3 3
- +#define PT_R4 4
- +#define PT_R5 5
- +#define PT_R6 6
- +#define PT_R7 7
- +#define PT_R8 8
- +#define PT_R9 9
- +#define PT_R10 10
- +#define PT_R11 11
- +#define PT_R12 12
- +#define PT_R13 13
- +#define PT_R14 14
- +#define PT_R15 15
- +#define PT_R16 16
- +#define PT_R17 17
- +#define PT_R18 18
- +#define PT_R19 19
- +#define PT_R20 20
- +#define PT_R21 21
- +#define PT_R22 22
- +#define PT_R23 23
- +#define PT_R24 24
- +#define PT_R25 25
- +#define PT_R26 26
- +#define PT_R27 27
- +#define PT_R28 28
- +#define PT_R29 29
- +#define PT_R30 30
- +#define PT_R31 31
- +
- +#define PT_NIP 32
- +#define PT_MSR 33
- +#define PT_ORIG_R3 34
- +#define PT_CTR 35
- +#define PT_LNK 36
- +#define PT_XER 37
- +#define PT_CCR 38
- +#ifndef __powerpc64__
- +#define PT_MQ 39
- +#else
- +#define PT_SOFTE 39
- +#endif
- +#define PT_TRAP 40
- +#define PT_DAR 41
- +#define PT_DSISR 42
- +#define PT_RESULT 43
- +#define PT_DSCR 44
- +#define PT_REGS_COUNT 44
- +
- +#define PT_FPR0 48 /* each FP reg occupies 2 slots in this space */
- +
- +#ifndef __powerpc64__
- +
- +#define PT_FPR31 (PT_FPR0 + 2*31)
- +#define PT_FPSCR (PT_FPR0 + 2*32 + 1)
- +
- +#else /* __powerpc64__ */
- +
- +#define PT_FPSCR (PT_FPR0 + 32) /* each FP reg occupies 1 slot in 64-bit space */
- +
- +
- +#define PT_VR0 82 /* each Vector reg occupies 2 slots in 64-bit */
- +#define PT_VSCR (PT_VR0 + 32*2 + 1)
- +#define PT_VRSAVE (PT_VR0 + 33*2)
- +
- +
- +/*
- + * Only store first 32 VSRs here. The second 32 VSRs in VR0-31
- + */
- +#define PT_VSR0 150 /* each VSR reg occupies 2 slots in 64-bit */
- +#define PT_VSR31 (PT_VSR0 + 2*31)
- +#endif /* __powerpc64__ */
- +
- +#endif /* !__GLIBC__ */
- +
- typedef enum
- {
- UNW_PPC64_R0,
- --- a/src/ppc32/Ginit.c
- +++ b/src/ppc32/Ginit.c
- @@ -46,10 +46,15 @@ static void *
- uc_addr (ucontext_t *uc, int reg)
- {
- void *addr;
- +#ifdef __GLIBC__
- + mcontext_t *mc = uc->uc_mcontext.uc_regs;
- +#else
- + mcontext_t *mc = &uc->uc_mcontext;
- +#endif
-
- if ((unsigned) (reg - UNW_PPC32_R0) < 32)
- #if defined(__linux__)
- - addr = &uc->uc_mcontext.uc_regs->gregs[reg - UNW_PPC32_R0];
- + addr = &mc->gregs[reg - UNW_PPC32_R0];
- #elif defined(__FreeBSD__)
- addr = &uc->uc_mcontext.mc_gpr[reg - UNW_PPC32_R0];
- #endif
- @@ -58,7 +63,7 @@ uc_addr (ucontext_t *uc, int reg)
- if ( ((unsigned) (reg - UNW_PPC32_F0) < 32) &&
- ((unsigned) (reg - UNW_PPC32_F0) >= 0) )
- #if defined(__linux__)
- - addr = &uc->uc_mcontext.uc_regs->fpregs.fpregs[reg - UNW_PPC32_F0];
- + addr = &mc->fpregs.fpregs[reg - UNW_PPC32_F0];
- #elif defined(__FreeBSD__)
- addr = &uc->uc_mcontext.mc_fpreg[reg - UNW_PPC32_F0];
- #endif
- @@ -85,7 +90,7 @@ uc_addr (ucontext_t *uc, int reg)
- return NULL;
- }
- #if defined(__linux__)
- - addr = &uc->uc_mcontext.uc_regs->gregs[gregs_idx];
- + addr = &mc->gregs[gregs_idx];
- #elif defined(__FreeBSD__)
- addr = &uc->uc_mcontext.mc_gpr[gregs_idx];
- #endif
- --- a/src/ppc32/ucontext_i.h
- +++ b/src/ppc32/ucontext_i.h
- @@ -44,8 +44,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DE
- //#define MQ_IDX 36
- #define LINK_IDX 36
-
- +#ifdef __GLIBC__
- #define _UC_MCONTEXT_GPR(x) ( ((void *)&dmy_ctxt.uc_mcontext.uc_regs->gregs[x] - (void *)&dmy_ctxt) )
- #define _UC_MCONTEXT_FPR(x) ( ((void *)&dmy_ctxt.uc_mcontext.uc_regs->fpregs.fpregs[x] - (void *)&dmy_ctxt) )
- +#else
- +#define _UC_MCONTEXT_GPR(x) ( ((void *)&dmy_ctxt.uc_mcontext.gregs[x] - (void *)&dmy_ctxt) )
- +#define _UC_MCONTEXT_FPR(x) ( ((void *)&dmy_ctxt.uc_mcontext.fpregs.fpregs[x] - (void *)&dmy_ctxt) )
- +#endif
-
- /* These are dummy structures used only for obtaining the offsets of the
- various structure members. */
|