Skip to content

Commit

Permalink
* sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h (PTR_MANGLE,
Browse files Browse the repository at this point in the history
	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.
  • Loading branch information
Ulrich Drepper committed Jan 2, 2006
1 parent cc79212 commit 305bb37
Show file tree
Hide file tree
Showing 23 changed files with 197 additions and 58 deletions.
34 changes: 34 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
5 changes: 5 additions & 0 deletions localedata/ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion localedata/locales/fi_FI
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions localedata/locales/mn_MN
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
15 changes: 2 additions & 13 deletions nptl/sysdeps/sparc/sparc64/jmpbuf-unwind.h
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -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)
1 change: 1 addition & 0 deletions nptl/sysdeps/sparc/tcb-offsets.sym
Original file line number Diff line number Diff line change
Expand Up @@ -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)
11 changes: 10 additions & 1 deletion nptl/sysdeps/sparc/tls.h
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -48,6 +48,7 @@ typedef struct
int multiple_threads;
uintptr_t sysinfo;
uintptr_t stack_guard;
uintptr_t pointer_guard;
} tcbhead_t;

#else /* __ASSEMBLER__ */
Expand Down Expand Up @@ -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 */
4 changes: 2 additions & 2 deletions posix/Makefile
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion sysdeps/s390/bits/setjmp.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

#ifndef _ASM

typedef struct {
typedef struct __s390_jmp_buf {
/* We save registers 6-15. */
long int __gregs[10];

Expand Down
28 changes: 18 additions & 10 deletions sysdeps/s390/s390-32/__longjmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 (;;);
Expand Down
7 changes: 4 additions & 3 deletions sysdeps/s390/s390-32/elf/setjmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions sysdeps/s390/s390-32/setjmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 18 additions & 10 deletions sysdeps/s390/s390-64/__longjmp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 (;;);
Expand Down
7 changes: 4 additions & 3 deletions sysdeps/s390/s390-64/elf/setjmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 4 additions & 3 deletions sysdeps/s390/s390-64/setjmp.S
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 19 additions & 1 deletion sysdeps/sparc/sparc32/__longjmp.S
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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. */
Expand Down Expand Up @@ -62,19 +66,33 @@ 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
restore %g2, 0, %o0 /* Restore values from above register frame. */

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. */

Expand Down
Loading

0 comments on commit 305bb37

Please sign in to comment.