Skip to content

Commit

Permalink
[POWERPC] Fix 64 bits vDSO DWARF info for CR register
Browse files Browse the repository at this point in the history
The current DWARF info for CR are incorrect, causing the gcc unwinder to
go to lunch if we take a segfault in the vdso.  This fixes it.

Problem identified by Andrew Haley, and fix provided by Jakub Jelinek
(thanks !).

Unfortunately, a bug in gcc cause it to not quite work either, but that
is being fixed separately with something around the lines of:

linux-unwind.h:

     fs->regs.reg[R_CR2].loc.offset = (long) &regs->ccr - new_cfa;
+    /* CR? regs are just 32-bit and PPC is big-endian.  */
+    fs->regs.reg[R_CR2].loc.offset += sizeof (long) - 4;

(According to Jakub)

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Benjamin Herrenschmidt authored and Paul Mackerras committed Oct 17, 2007
1 parent f66bce5 commit 081c11a
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions arch/powerpc/kernel/vdso64/sigtramp.S
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,16 @@ V_FUNCTION_END(__kernel_sigtramp_rt64)
9:

/* This is where the pt_regs pointer can be found on the stack. */
#define PTREGS 128+168+56
#define PTREGS 128+168+56

/* Size of regs. */
#define RSIZE 8
#define RSIZE 8

/* Size of CR reg in DWARF unwind info. */
#define CRSIZE 4

/* This is the offset of the VMX reg pointer. */
#define VREGS 48*RSIZE+33*8
#define VREGS 48*RSIZE+33*8

/* Describe where general purpose regs are saved. */
#define EH_FRAME_GEN \
Expand Down Expand Up @@ -178,7 +181,7 @@ V_FUNCTION_END(__kernel_sigtramp_rt64)
rsave (31, 31*RSIZE); \
rsave (67, 32*RSIZE); /* ap, used as temp for nip */ \
rsave (65, 36*RSIZE); /* lr */ \
rsave (70, 38*RSIZE) /* cr */
rsave (70, 38*RSIZE + (RSIZE - CRSIZE)) /* cr */

/* Describe where the FP regs are saved. */
#define EH_FRAME_FP \
Expand Down

0 comments on commit 081c11a

Please sign in to comment.