From 305bb37e1e4d39fe9e515fc5543fefea7c4e9653 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 2 Jan 2006 20:57:43 +0000 Subject: * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (PTR_MANGLE, PTR_MANGLE2, PTR_DEMANGLE, PTR_DEMANGLE2): Define. * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h (PTR_MANGLE, PTR_MANGLE2, PTR_DEMANGLE, PTR_DEMANGLE2): Define. * sysdeps/unix/sysv/linux/sparc/bits/setjmp.h [__WORDSIZE == 64] (_JMPBUF_UNWINDS): Don't demangle uc_mcontext.mc_fp. * sysdeps/sparc/sparc32/setjmp.S (__sigsetjmp): Mangle %fp, %sp and %o7. * sysdeps/sparc/sparc32/__longjmp.S (__longjmp): Demangle %fp, %sp and %o7. 2006-01-02 Jakub Jelinek * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h (PTR_MANGLE2): Define. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h (PTR_MANGLE2): Likewise. * sysdeps/s390/s390-32/__longjmp.c (__longjmp): Demangle also %r15. * sysdeps/s390/s390-64/__longjmp.c (__longjmp): Likewise. * sysdeps/s390/s390-32/setjmp.S (__sigsetjmp): Mangle also %r15. * sysdeps/s390/s390-32/elf/setjmp.S (__sigsetjmp): Likewise. * sysdeps/s390/s390-64/setjmp.S (__sigsetjmp): Likewise. * sysdeps/s390/s390-64/elf/setjmp.S (__sigsetjmp): Likewise. * sysdeps/s390/bits/setjmp.h (__jmp_buf): Add __s390_jmp_buf struct tag to make C++ happy. 2006-01-02 Ulrich Drepper * posix/Makefile ($(objpfx)annexc.out): Move -I.. to the end of the include list. --- sysdeps/sparc/sparc32/__longjmp.S | 20 +++++++++++++++++++- sysdeps/sparc/sparc32/setjmp.S | 12 +++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'sysdeps/sparc/sparc32') diff --git a/sysdeps/sparc/sparc32/__longjmp.S b/sysdeps/sparc/sparc32/__longjmp.S index 1c81c92692..3b2c80b7c3 100644 --- a/sysdeps/sparc/sparc32/__longjmp.S +++ b/sysdeps/sparc/sparc32/__longjmp.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 93, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -30,6 +31,9 @@ ENTRY(__longjmp) use them while unwinding frames and their register windows. */ ld ENV(o0,JB_FP), %g3 /* Cache target FP in register %g3. */ +#ifdef PTR_DEMANGLE + PTR_DEMANGLE (%g3, %g3, %g4) +#endif mov %o0, %g1 /* ENV in %g1 */ orcc %o1, %g0, %g2 /* VAL in %g2 */ be,a 0f /* Branch if zero; else skip delay slot. */ @@ -62,8 +66,15 @@ LOC(thread): * windows. */ ta ST_FLUSH_WINDOWS +#ifdef PTR_DEMANGLE + ld ENV(g1,JB_PC), %g5 /* Set return PC. */ + ld ENV(g1,JB_SP), %g1 /* Set saved SP on restore below. */ + PTR_DEMANGLE2 (%o7, %g5, %g4) + PTR_DEMANGLE2 (%fp, %g1, %g4) +#else ld ENV(g1,JB_PC), %o7 /* Set return PC. */ ld ENV(g1,JB_SP), %fp /* Set saved SP on restore below. */ +#endif sub %fp, 64, %sp /* Allocate a register frame. */ st %g3, RW_FP /* Set saved FP on restore below. */ retl @@ -71,10 +82,17 @@ LOC(thread): LOC(found): /* We have unwound register windows so %fp matches the target. */ +#ifdef PTR_DEMANGLE + PTR_DEMANGLE2 (%sp, %o0, %g4) +#else mov %o0, %sp /* OK, install new SP. */ +#endif LOC(sp_ok): ld ENV(g1,JB_PC), %o0 /* Extract target return PC. */ +#ifdef PTR_DEMANGLE + PTR_DEMANGLE2 (%o0, %o0, %g4) +#endif jmp %o0 + 8 /* Return there. */ mov %g2, %o0 /* Delay slot: set return value. */ diff --git a/sysdeps/sparc/sparc32/setjmp.S b/sysdeps/sparc/sparc32/setjmp.S index 883ea06297..4ef8724e02 100644 --- a/sysdeps/sparc/sparc32/setjmp.S +++ b/sysdeps/sparc/sparc32/setjmp.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 93, 94, 96, 97, 98, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1994, 1996, 1997, 1998, 2002, 2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,9 +40,18 @@ ENTRY (__sigsetjmp) a tail-call for simplicity; it always returns zero. */ ta ST_FLUSH_WINDOWS +#ifdef PTR_MANGLE + PTR_MANGLE (%g1, %o7, %g4) + PTR_MANGLE2 (%g2, %sp, %g4) + PTR_MANGLE2 (%g3, %fp, %g4) + st %g1, [%o0 + (JB_PC * 4)] + st %g2, [%o0 + (JB_SP * 4)] + st %g3, [%o0 + (JB_FP * 4)] +#else st %o7, [%o0 + (JB_PC * 4)] st %sp, [%o0 + (JB_SP * 4)] st %fp, [%o0 + (JB_FP * 4)] +#endif mov %o7, %g1 call __sigjmp_save -- cgit 1.4.1