* sysdeps/sh/sh4/__longjmp.S: Demangle also r14 and r15.

* sysdeps/sh/sh3/__longjmp.S: Likewise.
	* sysdeps/sh/sh4/setjmp.S: Mangle also r14 and r15.
	* sysdeps/sh/sh3/setjmp.S: Likewise.
	* sysdeps/unix/sysv/linux/sh/sysdep.h [__ASSEMBLER__]
	(PTR_MANGLE): Add temporary register as the second parameter.
	(PTR_DEMANGLE): Likewize.
	(PTR_MANGLE2, PTR_DEMANGLE2): Define.
This commit is contained in:
Ulrich Drepper 2006-01-20 16:49:36 +00:00
parent 7c65e9001b
commit a6df738797
8 changed files with 88 additions and 23 deletions

View File

@ -1,3 +1,14 @@
2006-01-20 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/sh/sh4/__longjmp.S: Demangle also r14 and r15.
* sysdeps/sh/sh3/__longjmp.S: Likewise.
* sysdeps/sh/sh4/setjmp.S: Mangle also r14 and r15.
* sysdeps/sh/sh3/setjmp.S: Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep.h [__ASSEMBLER__]
(PTR_MANGLE): Add temporary register as the second parameter.
(PTR_DEMANGLE): Likewize.
(PTR_MANGLE2, PTR_DEMANGLE2): Define.
2006-01-19 Ulrich Drepper <drepper@redhat.com>
* include/fcntl.h: Declare __have_atfcts.

View File

@ -1,3 +1,9 @@
2006-01-20 Kaz Kojima <kkojima@rr.iij4u.or.jp>
* sysdeps/unix/sysv/linux/sh/lowlevellock.h (lll_futex_wait):
Return status.
(lll_futex_timed_wait): Define.
2006-01-19 Ulrich Drepper <drepper@redhat.com>
* tst-cancel4.c: Test ppoll.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
/* Copyright (C) 2003, 2004, 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
@ -181,19 +181,37 @@ typedef int lll_lock_t;
# endif
#define lll_futex_wait(futex, val) \
do { \
int __ignore; \
({ \
int __status; \
register unsigned long __r3 asm ("r3") = SYS_futex; \
register unsigned long __r4 asm ("r4") = (unsigned long) (futex); \
register unsigned long __r5 asm ("r5") = FUTEX_WAIT; \
register unsigned long __r6 asm ("r6") = (unsigned long) (val); \
register unsigned long __r7 asm ("r7") = 0; \
__asm __volatile (SYSCALL_WITH_INST_PAD \
: "=z" (__ignore) \
: "=z" (__status) \
: "r" (__r3), "r" (__r4), "r" (__r5), \
"r" (__r6), "r" (__r7) \
: "memory", "t"); \
} while (0)
__status; \
})
#define lll_futex_timed_wait(futex, val, timeout) \
({ \
int __status; \
register unsigned long __r3 asm ("r3") = SYS_futex; \
register unsigned long __r4 asm ("r4") = (unsigned long) (futex); \
register unsigned long __r5 asm ("r5") = FUTEX_WAIT; \
register unsigned long __r6 asm ("r6") = (unsigned long) (val); \
register unsigned long __r7 asm ("r7") = (timeout); \
__asm __volatile (SYSCALL_WITH_INST_PAD \
: "=z" (__status) \
: "r" (__r3), "r" (__r4), "r" (__r5), \
"r" (__r6), "r" (__r7) \
: "memory", "t"); \
__status; \
})
#define lll_futex_wake(futex, nr) \

View File

@ -1,5 +1,5 @@
/* longjmp for SH.
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
Copyright (C) 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
@ -30,19 +30,26 @@ ENTRY (__longjmp)
mov.l @r4+, r10
mov.l @r4+, r11
mov.l @r4+, r12
mov.l @r4+, r13
mov.l @r4+, r14
mov r5, r0 /* get the return value in place */
tst r0, r0
bf.s 1f
mov.l @r4+, r15
mov.l @r4+, r13
mov #1,r0 /* can't let setjmp() return zero! */
1:
#ifdef PTR_DEMANGLE
mov.l @r4+, r2
PTR_DEMANGLE (r2)
PTR_DEMANGLE (r2, r1)
mov r2, r14
mov.l @r4+, r2
PTR_DEMANGLE2 (r2, r1)
mov r2, r15
mov.l @r4+, r2
PTR_DEMANGLE2 (r2, r1)
lds r2, pr
mov #0, r1
#else
mov.l @r4+, r14
mov.l @r4+, r15
lds.l @r4+, pr
#endif
rts

View File

@ -26,13 +26,20 @@ ENTRY (__sigsetjmp)
stc.l gbr, @-r4
#ifdef PTR_MANGLE
sts pr, r2
PTR_MANGLE (r2)
PTR_MANGLE (r2, r1)
mov.l r2, @-r4
mov r15, r2
PTR_MANGLE2 (r2, r1)
mov.l r2, @-r4
mov r14, r2
PTR_MANGLE2 (r2, r1)
mov.l r2, @-r4
mov #0, r1
#else
sts.l pr, @-r4
#endif
mov.l r15, @-r4
mov.l r14, @-r4
#endif
mov.l r13, @-r4
mov.l r12, @-r4
mov.l r11, @-r4

View File

@ -1,5 +1,5 @@
/* longjmp for SH.
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
Copyright (C) 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
@ -30,19 +30,26 @@ ENTRY (__longjmp)
mov.l @r4+, r10
mov.l @r4+, r11
mov.l @r4+, r12
mov.l @r4+, r13
mov.l @r4+, r14
mov r5, r0 /* get the return value in place */
tst r0, r0
bf.s 1f
mov.l @r4+, r15
mov.l @r4+, r13
mov #1,r0 /* can't let setjmp() return zero! */
1:
#ifdef PTR_DEMANGLE
mov.l @r4+, r2
PTR_DEMANGLE (r2)
PTR_DEMANGLE (r2, r1)
mov r2, r14
mov.l @r4+, r2
PTR_DEMANGLE2 (r2, r1)
mov r2, r15
mov.l @r4+, r2
PTR_DEMANGLE2 (r2, r1)
lds r2, pr
mov #0, r1
#else
mov.l @r4+, r14
mov.l @r4+, r15
lds.l @r4+, pr
#endif
ldc.l @r4+, gbr

View File

@ -31,13 +31,20 @@ ENTRY (__sigsetjmp)
stc.l gbr, @-r4
#ifdef PTR_MANGLE
sts pr, r2
PTR_MANGLE (r2)
PTR_MANGLE (r2, r1)
mov.l r2, @-r4
mov r15, r2
PTR_MANGLE2 (r2, r1)
mov.l r2, @-r4
mov r14, r2
PTR_MANGLE2 (r2, r1)
mov.l r2, @-r4
mov #0, r1
#else
sts.l pr, @-r4
#endif
mov.l r15, @-r4
mov.l r14, @-r4
#endif
mov.l r13, @-r4
mov.l r12, @-r4
mov.l r11, @-r4

View File

@ -1,5 +1,5 @@
/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004,
2005 Free Software Foundation, Inc.
2005,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
@ -376,9 +376,11 @@
is too complicated here since we have no PC-relative addressing mode. */
#else
# ifdef __ASSEMBLER__
# define PTR_MANGLE(reg) \
stc gbr,r1; mov.l @(POINTER_GUARD,r1),r1; xor r1,reg
# define PTR_DEMANGLE(reg) PTR_MANGLE (reg)
# define PTR_MANGLE(reg, tmp) \
stc gbr,tmp; mov.l @(POINTER_GUARD,tmp),tmp; xor tmp,reg
# define PTR_MANGLE2(reg, tmp) xor tmp,reg
# define PTR_DEMANGLE(reg, tmp) PTR_MANGLE (reg, tmp)
# define PTR_DEMANGLE2(reg, tmp) PTR_MANGLE2 (reg, tmp)
# else
# define PTR_MANGLE(var) \
(var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())