diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-01-02 20:57:43 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-01-02 20:57:43 +0000 |
commit | 305bb37e1e4d39fe9e515fc5543fefea7c4e9653 (patch) | |
tree | b6ffe62a76de136c56c8c6ca43394bb48546a019 | |
parent | cc792128be8ee299212c43b1c34f4433e257a7e6 (diff) | |
download | glibc-305bb37e1e4d39fe9e515fc5543fefea7c4e9653.tar.gz glibc-305bb37e1e4d39fe9e515fc5543fefea7c4e9653.tar.xz glibc-305bb37e1e4d39fe9e515fc5543fefea7c4e9653.zip |
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (PTR_MANGLE, cvs/fedora-glibc-20060102T2114
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 <jakub@redhat.com> * 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 <drepper@redhat.com> * posix/Makefile ($(objpfx)annexc.out): Move -I.. to the end of the include list.
-rw-r--r-- | ChangeLog | 34 | ||||
-rw-r--r-- | localedata/ChangeLog | 5 | ||||
-rw-r--r-- | localedata/locales/fi_FI | 2 | ||||
-rw-r--r-- | localedata/locales/mn_MN | 6 | ||||
-rw-r--r-- | nptl/ChangeLog | 8 | ||||
-rw-r--r-- | nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h | 15 | ||||
-rw-r--r-- | nptl/sysdeps/sparc/tcb-offsets.sym | 1 | ||||
-rw-r--r-- | nptl/sysdeps/sparc/tls.h | 11 | ||||
-rw-r--r-- | posix/Makefile | 4 | ||||
-rw-r--r-- | sysdeps/s390/bits/setjmp.h | 2 | ||||
-rw-r--r-- | sysdeps/s390/s390-32/__longjmp.c | 28 | ||||
-rw-r--r-- | sysdeps/s390/s390-32/elf/setjmp.S | 7 | ||||
-rw-r--r-- | sysdeps/s390/s390-32/setjmp.S | 7 | ||||
-rw-r--r-- | sysdeps/s390/s390-64/__longjmp.c | 28 | ||||
-rw-r--r-- | sysdeps/s390/s390-64/elf/setjmp.S | 7 | ||||
-rw-r--r-- | sysdeps/s390/s390-64/setjmp.S | 7 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/__longjmp.S | 20 | ||||
-rw-r--r-- | sysdeps/sparc/sparc32/setjmp.S | 12 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/bits/setjmp.h | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h | 22 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h | 20 |
23 files changed, 197 insertions, 58 deletions
diff --git a/ChangeLog b/ChangeLog index e5e1276abf..ed01b76522 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,37 @@ +2006-01-02 Jakub Jelinek <jakub@redhat.com> + + * 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 <jakub@redhat.com> + + * 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 <drepper@redhat.com> + + * posix/Makefile ($(objpfx)annexc.out): Move -I.. to the end of + the include list. + 2006-01-01 Ulrich Drepper <drepper@redhat.com> * posix/getconf.c: Update copyright year. diff --git a/localedata/ChangeLog b/localedata/ChangeLog index ad32e0bb52..67a60bd8be 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,8 @@ +2006-01-02 Andreas Jaeger <aj@suse.de> + + * locales/fi_FI: Fix date_fmt. + * locales/mn_MN: Likewise. + 2005-11-21 Ulrich Drepper <drepper@redhat.com> * locales/se_NO: Remove RCS ID line. diff --git a/localedata/locales/fi_FI b/localedata/locales/fi_FI index 5cc7aff454..f657480d59 100644 --- a/localedata/locales/fi_FI +++ b/localedata/locales/fi_FI @@ -2188,7 +2188,7 @@ d_fmt "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059>" t_fmt "<U0025><U0054>" am_pm "";"" t_fmt_ampm "" -date_fmt "<U0025><U0061><U0020><U0025><U002D><U0064><U002E><U0025>\ +date_fmt "<U0025><U0061><U0020><U0025><U002D><U0064><U002E><U0025>/ <U002D><U006D><U002E><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U007A>" first_weekday 2 % Monday first_workday 2 % Monday diff --git a/localedata/locales/mn_MN b/localedata/locales/mn_MN index 2921487314..82c1d2a12c 100644 --- a/localedata/locales/mn_MN +++ b/localedata/locales/mn_MN @@ -102,7 +102,7 @@ include "translit_combining";"" <U042A> "<U0022>" % " <U042B> "<U0059>" <U042C> "<U0027>" % ' -<U042D> "<U0045>" +<U042D> "<U0045>" <U042E> "<U0059><U0075>" % Yu <U042F> "<U0059><U0061>" % Ya % CYRILLIC SMALL LETTERS IN ALPHABETICAL ORDER. @@ -218,8 +218,8 @@ am_pm "";"" t_fmt_ampm "" % Full date and time representation % "%Z %Y ony %B %e, %a %H:%M:%S" -date_fmt "<U0025><U005A><U0020><U0025><U0059><U0020><U043E><U043D><U044B><U0020><U0025><U0042><U0020>";/ - "<U0025><U0065><U002C><U0020><U0025><U0061><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>" +date_fmt "<U0025><U005A><U0020><U0025><U0059><U0020><U043E><U043D><U044B><U0020><U0025><U0042><U0020>/ +<U0025><U0065><U002C><U0020><U0025><U0061><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>" END LC_TIME LC_MESSAGES diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 116c816a96..b59fc5b2fb 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,11 @@ +2006-01-02 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/tls.h (tcbhead_t): Add pointer_guard field. + (THREAD_GET_POINTER_GUARD, THREAD_SET_POINTER_GUARD, + THREAD_COPY_POINTER_GUARD): Define. + * sysdeps/sparc/tcb-offsets.sym (POINTER_GUARD): Define. + * sysdeps/sparc/sparc64/jmpbuf-unwind.h: Revert 2005-12-27 changes. + 2006-01-01 Ulrich Drepper <drepper@redhat.com> * version.c: Update copyright year. diff --git a/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h b/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h index 7752fe971e..92c296b0cf 100644 --- a/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h +++ b/nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David S. Miller <davem@davemloft.net>, 2005. @@ -20,23 +20,12 @@ #include <setjmp.h> #include <stdint.h> #include <unwind.h> -#include <sysdep.h> #define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) -static inline uintptr_t __attribute__ ((unused)) -_jmpbuf_sp (__jmp_buf regs) -{ - uintptr_t sp = regs[0].uc_mcontext.mc_fp; -#ifdef PTR_DEMANGLE - PTR_DEMANGLE (sp); -#endif - return sp; -} - #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj)) + ((uintptr_t) (_address) - (_adj) < (uintptr_t) (_jmpbuf)[0].uc_mcontext.mc_fp - (_adj)) /* We use the normal lobngjmp for unwinding. */ #define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/nptl/sysdeps/sparc/tcb-offsets.sym b/nptl/sysdeps/sparc/tcb-offsets.sym index 237f975b25..923af8a5b7 100644 --- a/nptl/sysdeps/sparc/tcb-offsets.sym +++ b/nptl/sysdeps/sparc/tcb-offsets.sym @@ -2,5 +2,6 @@ #include <tls.h> MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) +POINTER_GUARD offsetof (tcbhead_t, pointer_guard) PID offsetof (struct pthread, pid) TID offsetof (struct pthread, tid) diff --git a/nptl/sysdeps/sparc/tls.h b/nptl/sysdeps/sparc/tls.h index ddc4848554..127bbf695f 100644 --- a/nptl/sysdeps/sparc/tls.h +++ b/nptl/sysdeps/sparc/tls.h @@ -1,5 +1,5 @@ /* Definitions for thread-local data handling. NPTL/sparc version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 2005, 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 @@ -48,6 +48,7 @@ typedef struct int multiple_threads; uintptr_t sysinfo; uintptr_t stack_guard; + uintptr_t pointer_guard; } tcbhead_t; #else /* __ASSEMBLER__ */ @@ -135,6 +136,14 @@ register struct pthread *__thread_self __asm__("%g7"); ((descr)->header.stack_guard \ = THREAD_GETMEM (THREAD_SELF, header.stack_guard)) +/* Get/set the stack guard field in TCB head. */ +#define THREAD_GET_POINTER_GUARD() \ + THREAD_GETMEM (THREAD_SELF, header.pointer_guard) +#define THREAD_SET_POINTER_GUARD(value) \ + THREAD_SETMEM (THREAD_SELF, header.pointer_guard, value) +# define THREAD_COPY_POINTER_GUARD(descr) \ + ((descr)->header.pointer_guard = THREAD_GET_POINTER_GUARD ()) + #endif /* !ASSEMBLER */ #endif /* tls.h */ diff --git a/posix/Makefile b/posix/Makefile index 8e53fdac44..32326c5b7b 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999, 2000-2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1991-1999, 2000-2005, 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 @@ -220,7 +220,7 @@ endif $(objpfx)annexc.out: $(objpfx)annexc -$(dir $<)$(notdir $<) '$(CC)' \ - '$(patsubst %,-I../%,$(sorted-subdirs)) -I../include -I.. $(+sysdep-includes) $(sysincludes)' > $@ + '$(patsubst %,-I../%,$(sorted-subdirs)) -I../include $(+sysdep-includes) $(sysincludes) -I..' > $@ annexc-CFLAGS = -O $(objpfx)annexc: annexc.c diff --git a/sysdeps/s390/bits/setjmp.h b/sysdeps/s390/bits/setjmp.h index 01533ca367..37f600d0ad 100644 --- a/sysdeps/s390/bits/setjmp.h +++ b/sysdeps/s390/bits/setjmp.h @@ -40,7 +40,7 @@ #ifndef _ASM -typedef struct { +typedef struct __s390_jmp_buf { /* We save registers 6-15. */ long int __gregs[10]; diff --git a/sysdeps/s390/s390-32/__longjmp.c b/sysdeps/s390/s390-32/__longjmp.c index 07814e080a..c47ebbc52a 100644 --- a/sysdeps/s390/s390-32/__longjmp.c +++ b/sysdeps/s390/s390-32/__longjmp.c @@ -29,24 +29,32 @@ void __longjmp (__jmp_buf env, int val) { + register int r2 __asm ("%r2") = val == 0 ? 1 : val; #ifdef PTR_DEMANGLE - register uintptr_t r5 __asm ("%r5") = THREAD_GET_POINTER_GUARD (); + register uintptr_t r3 __asm ("%r3") = THREAD_GET_POINTER_GUARD (); + register void *r1 __asm ("%r1") = (void *) env; #endif /* Restore registers and jump back. */ - asm volatile ("lr %%r2,%0\n\t" /* PUT val in grp 2. */ - "ld %%f6,48(%1)\n\t" + asm volatile ("ld %%f6,48(%1)\n\t" "ld %%f4,40(%1)\n\t" - "lm %%r6,%%r15,0(%1)\n\t" #ifdef PTR_DEMANGLE - "xr %%r14,%2\n\t" -#endif + "lm %%r6,%%r13,0(%1)\n\t" + "lm %%r4,%%r5,32(%1)\n\t" + "xr %%r4,%2\n\t" + "xr %%r5,%2\n\t" + "lr %%r15,%%r5\n\t" + "br %%r4" +#else + "lm %%r6,%%r15,0(%1)\n\t" "br %%r14" - : : "r" (val == 0 ? 1 : val), - "a" (env) +#endif + : : "r" (r2), #ifdef PTR_DEMANGLE - , "r" (r5) + "r" (r1), "r" (r3) +#else + "a" (env) #endif - : "2" ); + ); /* Avoid `volatile function does return' warnings. */ for (;;); diff --git a/sysdeps/s390/s390-32/elf/setjmp.S b/sysdeps/s390/s390-32/elf/setjmp.S index f3ca8af6c2..ed28008a56 100644 --- a/sysdeps/s390/s390-32/elf/setjmp.S +++ b/sysdeps/s390/s390-32/elf/setjmp.S @@ -49,9 +49,10 @@ ENTRY(__sigsetjmp) #ifdef PTR_MANGLE stm %r6,%r13,0(%r2) /* store registers in jmp_buf */ lr %r4,%r14 - PTR_MANGLE (%r4, %r5) - st %r4,32(%r2) - st %r15,36(%r2) + lr %r5,%r15 + PTR_MANGLE (%r4, %r1) + PTR_MANGLE2 (%r5, %r1) + stm %r4,%r5,32(%r2) #else stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ #endif diff --git a/sysdeps/s390/s390-32/setjmp.S b/sysdeps/s390/s390-32/setjmp.S index a438595945..b943085e93 100644 --- a/sysdeps/s390/s390-32/setjmp.S +++ b/sysdeps/s390/s390-32/setjmp.S @@ -32,9 +32,10 @@ ENTRY(__sigsetjmp) #ifdef PTR_MANGLE stm %r6,%r13,0(%r2) /* store registers in jmp_buf */ lr %r4,%r14 - PTR_MANGLE (%r4, %r5) - st %r4,32(%r2) - st %r15,36(%r2) + lr %r5,%r15 + PTR_MANGLE (%r4, %r1) + PTR_MANGLE2 (%r5, %r1) + stm %r4,%r5,32(%r2) #else stm %r6,%r15,0(%r2) /* store registers in jmp_buf */ #endif diff --git a/sysdeps/s390/s390-64/__longjmp.c b/sysdeps/s390/s390-64/__longjmp.c index 6650bf702f..030fb5b515 100644 --- a/sysdeps/s390/s390-64/__longjmp.c +++ b/sysdeps/s390/s390-64/__longjmp.c @@ -29,26 +29,34 @@ void __longjmp (__jmp_buf env, int val) { + register long int r2 __asm ("%r2") = val == 0 ? 1 : val; #ifdef PTR_DEMANGLE - register uintptr_t r5 __asm ("%r5") = THREAD_GET_POINTER_GUARD (); + register uintptr_t r3 __asm ("%r3") = THREAD_GET_POINTER_GUARD (); + register void *r1 __asm ("%r1") = (void *) env; #endif /* Restore registers and jump back. */ - asm volatile ("lgr %%r2,%0\n\t" /* Put val in grp 2. */ - "ld %%f7,104(%1)\n\t" + asm volatile ("ld %%f7,104(%1)\n\t" "ld %%f5,96(%1)\n\t" "ld %%f3,88(%1)\n\t" "ld %%f1,80(%1)\n\t" - "lmg %%r6,%%r15,0(%1)\n\t" #ifdef PTR_DEMANGLE - "xgr %%r14,%2\n\t" -#endif + "lmg %%r6,%%r13,0(%1)\n\t" + "lmg %%r4,%%r5,64(%1)\n\t" + "xgr %%r4,%2\n\t" + "xgr %%r5,%2\n\t" + "lgr %%r15,%%r5\n\t" + "br %%r4" +#else + "lmg %%r6,%%r15,0(%1)\n\t" "br %%r14" - : : "r" (val == 0 ? 1 : val), - "a" (env) +#endif + : : "r" (r2), #ifdef PTR_DEMANGLE - , "r" (r5) + "r" (r1), "r" (r3) +#else + "a" (env) #endif - : "2" ); + ); /* Avoid `volatile function does return' warnings. */ for (;;); diff --git a/sysdeps/s390/s390-64/elf/setjmp.S b/sysdeps/s390/s390-64/elf/setjmp.S index 44f7cf08cc..28b6a5a35b 100644 --- a/sysdeps/s390/s390-64/elf/setjmp.S +++ b/sysdeps/s390/s390-64/elf/setjmp.S @@ -49,9 +49,10 @@ ENTRY(__sigsetjmp) #ifdef PTR_MANGLE stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */ lgr %r4,%r14 - PTR_MANGLE (%r4, %r5) - stg %r4,64(%r2) - stg %r15,72(%r2) + lgr %r5,%r15 + PTR_MANGLE (%r4, %r1) + PTR_MANGLE2 (%r5, %r1) + stmg %r4,%r5,64(%r2) #else stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ #endif diff --git a/sysdeps/s390/s390-64/setjmp.S b/sysdeps/s390/s390-64/setjmp.S index 25d97b6a6a..a962db46ce 100644 --- a/sysdeps/s390/s390-64/setjmp.S +++ b/sysdeps/s390/s390-64/setjmp.S @@ -31,9 +31,10 @@ ENTRY(__sigsetjmp) #ifdef PTR_MANGLE stmg %r6,%r13,0(%r2) /* Store registers in jmp_buf. */ lgr %r4,%r14 - PTR_MANGLE (%r4, %r5) - stg %r4,64(%r2) - stg %r15,72(%r2) + lgr %r5,%r15 + PTR_MANGLE (%r4, %r1) + PTR_MANGLE2 (%r5, %r1) + stmg %r4,%r5,64(%r2) #else stmg %r6,%r15,0(%r2) /* Store registers in jmp_buf. */ #endif 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 diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h index 355108a493..50c3f42469 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h @@ -275,6 +275,8 @@ # define PTR_MANGLE(reg, tmpreg) \ ear tmpreg,%a0; \ x reg,STACK_GUARD(tmpreg) +# define PTR_MANGLE2(reg, tmpreg) \ + x reg,STACK_GUARD(tmpreg) # define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) # else # define PTR_MANGLE(var) \ diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h index 562fc7df76..aadbf74c2b 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h @@ -277,6 +277,8 @@ sllg tmpreg,tmpreg,32; \ ear tmpreg,%a1; \ xg reg,STACK_GUARD(tmpreg) +# define PTR_MANGLE2(reg, tmpreg) \ + xg reg,STACK_GUARD(tmpreg) # define PTR_DEMANGLE(reg, tmpreg) PTR_MANGLE (reg, tmpreg) # else # define PTR_MANGLE(var) \ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h index 45aa2655ee..7dc822929f 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/setjmp.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1997,1999,2000,2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1999, 2000, 2003, 2005, 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 @@ -60,7 +61,7 @@ typedef struct __sparc64_jmp_buf /* Test if longjmp to JMPBUF would unwind the frame containing a local variable at ADDRESS. */ #define _JMPBUF_UNWINDS(jmpbuf, address, demangle) \ - ((unsigned long int) (address) < demangle ((jmpbuf)->uc_mcontext.mc_fp)) + ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp) #else diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h index 29c5158b9f..45f5c44d5d 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2002, 2003, 2004, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Miguel de Icaza <miguel@gnu.ai.mit.edu>, January 1997. @@ -214,4 +214,24 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \ #endif /* __ASSEMBLER__ */ +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(dreg, reg, tmpreg) \ + ld [%g7 + POINTER_GUARD], tmpreg; \ + xor reg, tmpreg, dreg +# define PTR_DEMANGLE(dreg, reg, tmpreg) PTR_MANGLE (dreg, reg, tmpreg) +# define PTR_MANGLE2(dreg, reg, tmpreg) \ + xor reg, tmpreg, dreg +# define PTR_DEMANGLE2(dreg, reg, tmpreg) PTR_MANGLE2 (dreg, reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* linux/sparc/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index 071aa3a310..b30cffc5e9 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -240,4 +240,24 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler) \ register windows. So if you poke stack memory directly you add this. */ #define STACK_BIAS 2047 +/* Pointer mangling support. */ +#if defined NOT_IN_libc && defined IS_IN_rtld +/* We cannot use the thread descriptor because in ld.so we use setjmp + earlier than the descriptor is initialized. */ +#else +# ifdef __ASSEMBLER__ +# define PTR_MANGLE(dreg, reg, tmpreg) \ + ldx [%g7 + POINTER_GUARD], tmpreg; \ + xor reg, tmpreg, dreg +# define PTR_DEMANGLE(dreg, reg, tmpreg) PTR_MANGLE (dreg, reg, tmpreg) +# define PTR_MANGLE2(dreg, reg, tmpreg) \ + xor reg, tmpreg, dreg +# define PTR_DEMANGLE2(dreg, reg, tmpreg) PTR_MANGLE2 (dreg, reg, tmpreg) +# else +# define PTR_MANGLE(var) \ + (var) = (__typeof (var)) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ()) +# define PTR_DEMANGLE(var) PTR_MANGLE (var) +# endif +#endif + #endif /* linux/sparc64/sysdep.h */ |