* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (PTR_MANGLE, cvs/fedora-glibc-20060102T2114
authorUlrich Drepper <drepper@redhat.com>
Mon, 2 Jan 2006 20:57:43 +0000 (20:57 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 2 Jan 2006 20:57:43 +0000 (20:57 +0000)
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.

23 files changed:
ChangeLog
localedata/ChangeLog
localedata/locales/fi_FI
localedata/locales/mn_MN
nptl/ChangeLog
nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h
nptl/sysdeps/sparc/tcb-offsets.sym
nptl/sysdeps/sparc/tls.h
posix/Makefile
sysdeps/s390/bits/setjmp.h
sysdeps/s390/s390-32/__longjmp.c
sysdeps/s390/s390-32/elf/setjmp.S
sysdeps/s390/s390-32/setjmp.S
sysdeps/s390/s390-64/__longjmp.c
sysdeps/s390/s390-64/elf/setjmp.S
sysdeps/s390/s390-64/setjmp.S
sysdeps/sparc/sparc32/__longjmp.S
sysdeps/sparc/sparc32/setjmp.S
sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
sysdeps/unix/sysv/linux/sparc/bits/setjmp.h
sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h

index e5e1276..ed01b76 100644 (file)
--- 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.
index ad32e0b..67a60bd 100644 (file)
@@ -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.
index 5cc7aff..f657480 100644 (file)
@@ -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
index 2921487..82c1d2a 100644 (file)
@@ -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
index 116c816..b59fc5b 100644 (file)
@@ -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.
index 7752fe9..92c296b 100644 (file)
@@ -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.
 
 #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)
index 237f975..923af8a 100644 (file)
@@ -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)
index ddc4848..127bbf6 100644 (file)
@@ -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 */
index 8e53fda..32326c5 100644 (file)
@@ -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
index 01533ca..37f600d 100644 (file)
@@ -40,7 +40,7 @@
 
 #ifndef        _ASM
 
-typedef struct {
+typedef struct __s390_jmp_buf {
     /* We save registers 6-15.  */
     long int __gregs[10];
 
index 07814e0..c47ebbc 100644 (file)
 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 (;;);
index f3ca8af..ed28008 100644 (file)
@@ -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
index a438595..b943085 100644 (file)
@@ -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
index 6650bf7..030fb5b 100644 (file)
 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 (;;);
index 44f7cf0..28b6a5a 100644 (file)
@@ -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
index 25d97b6..a962db4 100644 (file)
@@ -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
index 1c81c92..3b2c80b 100644 (file)
@@ -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.  */
 
index 883ea06..4ef8724 100644 (file)
@@ -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
index 355108a..50c3f42 100644 (file)
 #  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) \
index 562fc7d..aadbf74 100644 (file)
   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) \
index 45aa265..7dc8229 100644 (file)
@@ -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
 
index 29c5158..45f5c44 100644 (file)
@@ -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 */
index 071aa3a..b30cffc 100644 (file)
@@ -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 */