mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
* 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:
parent
7c65e9001b
commit
a6df738797
11
ChangeLog
11
ChangeLog
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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) \
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ())
|
||||
|
Loading…
Reference in New Issue
Block a user