mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-03 00:10:10 +00:00
* sysdeps/unix/sysv/linux/sh/sysdep.h: Include tls.h.
(PTR_MANGLE, PTR_DEMANGLE): Define. (SYSCALL_ERROR_HANDLER): Fix typo. * sysdeps/sh/sh4/__longjmp.S: Use PTR_DEMANGLE if defined. * sysdeps/sh/sh3/__longjmp.S: Likewise. * sysdeps/sh/sh4/setjmp.S: Use PTR_MANGLE if defined. * sysdeps/sh/sh3/setjmp.S: Likewise.
This commit is contained in:
parent
3525901584
commit
d9038ff837
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2005-12-19 Kaz Kojima <kkojima@rr.iij4u.or.jp>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/sh/sysdep.h: Include tls.h.
|
||||||
|
(PTR_MANGLE, PTR_DEMANGLE): Define.
|
||||||
|
(SYSCALL_ERROR_HANDLER): Fix typo.
|
||||||
|
* sysdeps/sh/sh4/__longjmp.S: Use PTR_DEMANGLE if defined.
|
||||||
|
* sysdeps/sh/sh3/__longjmp.S: Likewise.
|
||||||
|
* sysdeps/sh/sh4/setjmp.S: Use PTR_MANGLE if defined.
|
||||||
|
* sysdeps/sh/sh3/setjmp.S: Likewise.
|
||||||
|
|
||||||
2005-12-20 Jakub Jelinek <jakub@redhat.com>
|
2005-12-20 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* sysdeps/ia64/fpu/libm-test-ulps: Update for GCC 4.1 prerelease.
|
* sysdeps/ia64/fpu/libm-test-ulps: Update for GCC 4.1 prerelease.
|
||||||
|
@ -9,3 +9,4 @@ CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf)
|
|||||||
MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads)
|
MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads)
|
||||||
TLS_PRE_TCB_SIZE sizeof (struct pthread)
|
TLS_PRE_TCB_SIZE sizeof (struct pthread)
|
||||||
MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock)
|
MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock)
|
||||||
|
POINTER_GUARD offsetof (tcbhead_t, pointer_guard)
|
||||||
|
@ -41,7 +41,7 @@ typedef union dtv
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
dtv_t *dtv;
|
dtv_t *dtv;
|
||||||
void *private;
|
uintptr_t pointer_guard;
|
||||||
} tcbhead_t;
|
} tcbhead_t;
|
||||||
|
|
||||||
# define TLS_MULTIPLE_THREADS_IN_TCB 1
|
# define TLS_MULTIPLE_THREADS_IN_TCB 1
|
||||||
@ -140,6 +140,19 @@ typedef struct
|
|||||||
# define THREAD_SETMEM_NC(descr, member, idx, value) \
|
# define THREAD_SETMEM_NC(descr, member, idx, value) \
|
||||||
descr->member[idx] = (value)
|
descr->member[idx] = (value)
|
||||||
|
|
||||||
|
#define THREAD_GET_POINTER_GUARD() \
|
||||||
|
({ tcbhead_t *__tcbp; \
|
||||||
|
__asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \
|
||||||
|
__tcbp->pointer_guard;})
|
||||||
|
#define THREAD_SET_POINTER_GUARD(value) \
|
||||||
|
({ tcbhead_t *__tcbp; \
|
||||||
|
__asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \
|
||||||
|
__tcbp->pointer_guard = (value);})
|
||||||
|
#define THREAD_COPY_POINTER_GUARD(descr) \
|
||||||
|
({ tcbhead_t *__tcbp; \
|
||||||
|
__asm __volatile ("stc gbr,%0" : "=r" (__tcbp)); \
|
||||||
|
((tcbhead_t *) (descr + 1))->pointer_guard = __tcbp->pointer_guard;})
|
||||||
|
|
||||||
#endif /* __ASSEMBLER__ */
|
#endif /* __ASSEMBLER__ */
|
||||||
|
|
||||||
#endif /* tls.h */
|
#endif /* tls.h */
|
||||||
|
@ -253,8 +253,8 @@ double: 1
|
|||||||
float: 4
|
float: 4
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 4
|
ifloat: 4
|
||||||
ildouble: 1
|
ildouble: 6
|
||||||
ldouble: 1
|
ldouble: 6
|
||||||
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
|
Test "Imaginary part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
@ -451,21 +451,26 @@ ifloat: 1
|
|||||||
# j0
|
# j0
|
||||||
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
|
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
|
Test "j0 (10.0) == -0.245935764451348335197760862485328754":
|
||||||
double: 2
|
double: 3
|
||||||
float: 1
|
float: 1
|
||||||
idouble: 2
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 1
|
||||||
|
ildouble: 1
|
||||||
|
ldouble: 1
|
||||||
|
Test "j0 (2.0) == 0.223890779141235668051827454649948626":
|
||||||
|
float: 2
|
||||||
|
ifloat: 2
|
||||||
Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
|
Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
|
Test "j0 (8.0) == 0.171650807137553906090869407851972001":
|
||||||
@ -488,21 +493,26 @@ idouble: 1
|
|||||||
# jn
|
# jn
|
||||||
Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
|
Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
|
Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
|
||||||
double: 2
|
double: 3
|
||||||
float: 1
|
float: 1
|
||||||
idouble: 2
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 1
|
||||||
|
ildouble: 1
|
||||||
|
ldouble: 1
|
||||||
|
Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
|
||||||
|
float: 2
|
||||||
|
ifloat: 2
|
||||||
Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
|
Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
|
Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
|
||||||
@ -543,8 +553,8 @@ ifloat: 1
|
|||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
|
Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
|
||||||
float: 3
|
float: 4
|
||||||
ifloat: 3
|
ifloat: 4
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
|
Test "jn (3, -1.0) == -0.0195633539826684059189053216217515083":
|
||||||
@ -563,16 +573,16 @@ ildouble: 1
|
|||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
|
Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
|
||||||
double: 3
|
double: 3
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
|
Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
|
|
||||||
@ -685,6 +695,8 @@ ldouble: 1
|
|||||||
|
|
||||||
# y1
|
# y1
|
||||||
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
|
Test "y1 (0.125) == -5.19993611253477499595928744876579921":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "y1 (10.0) == 0.249015424206953883923283474663222803":
|
Test "y1 (10.0) == 0.249015424206953883923283474663222803":
|
||||||
@ -692,6 +704,11 @@ double: 3
|
|||||||
float: 1
|
float: 1
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 1
|
||||||
|
Test "y1 (1.5) == -0.412308626973911295952829820633445323";
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
ildouble: 1
|
||||||
|
ldouble: 1
|
||||||
Test "y1 (2.0) == -0.107032431540937546888370772277476637":
|
Test "y1 (2.0) == -0.107032431540937546888370772277476637":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 1
|
||||||
@ -737,6 +754,8 @@ ifloat: 1
|
|||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
|
Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
|
Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
|
||||||
@ -744,6 +763,11 @@ double: 3
|
|||||||
float: 1
|
float: 1
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 1
|
||||||
|
Test "yn (1, 1.5) == -0.412308626973911295952829820633445323";
|
||||||
|
float: 1
|
||||||
|
ifloat: 1
|
||||||
|
ldouble: 1
|
||||||
|
ildouble: 1
|
||||||
Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
|
Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
|
||||||
double: 1
|
double: 1
|
||||||
float: 1
|
float: 1
|
||||||
@ -757,6 +781,8 @@ float: 2
|
|||||||
idouble: 1
|
idouble: 1
|
||||||
ifloat: 2
|
ifloat: 2
|
||||||
Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
|
Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
|
Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
|
||||||
@ -769,13 +795,17 @@ float: 2
|
|||||||
ifloat: 2
|
ifloat: 2
|
||||||
Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
|
Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
|
||||||
double: 2
|
double: 2
|
||||||
|
float: 2
|
||||||
idouble: 2
|
idouble: 2
|
||||||
|
ifloat: 2
|
||||||
Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
|
Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
|
||||||
double: 3
|
double: 3
|
||||||
float: 1
|
float: 1
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 1
|
||||||
Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
|
Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
|
||||||
|
double: 1
|
||||||
|
idouble: 1
|
||||||
ildouble: 1
|
ildouble: 1
|
||||||
ldouble: 1
|
ldouble: 1
|
||||||
Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
|
Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
|
||||||
@ -926,8 +956,8 @@ double: 2
|
|||||||
float: 5
|
float: 5
|
||||||
idouble: 2
|
idouble: 2
|
||||||
ifloat: 5
|
ifloat: 5
|
||||||
ildouble: 3
|
ildouble: 6
|
||||||
ldouble: 3
|
ldouble: 6
|
||||||
|
|
||||||
Function: Imaginary part of "cpow":
|
Function: Imaginary part of "cpow":
|
||||||
double: 2
|
double: 2
|
||||||
@ -1028,10 +1058,10 @@ float: 1
|
|||||||
ifloat: 1
|
ifloat: 1
|
||||||
|
|
||||||
Function: "j0":
|
Function: "j0":
|
||||||
double: 2
|
double: 3
|
||||||
float: 1
|
float: 2
|
||||||
idouble: 2
|
idouble: 3
|
||||||
ifloat: 1
|
ifloat: 2
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
|
|
||||||
@ -1045,9 +1075,9 @@ ldouble: 1
|
|||||||
|
|
||||||
Function: "jn":
|
Function: "jn":
|
||||||
double: 3
|
double: 3
|
||||||
float: 3
|
float: 4
|
||||||
idouble: 3
|
idouble: 3
|
||||||
ifloat: 3
|
ifloat: 4
|
||||||
ildouble: 2
|
ildouble: 2
|
||||||
ldouble: 2
|
ldouble: 2
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* longjmp for SH.
|
/* longjmp for SH.
|
||||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -32,13 +32,19 @@ ENTRY (__longjmp)
|
|||||||
mov.l @r4+, r12
|
mov.l @r4+, r12
|
||||||
mov.l @r4+, r13
|
mov.l @r4+, r13
|
||||||
mov.l @r4+, r14
|
mov.l @r4+, r14
|
||||||
mov.l @r4+, r15
|
|
||||||
mov r5, r0 /* get the return value in place */
|
mov r5, r0 /* get the return value in place */
|
||||||
tst r0, r0
|
tst r0, r0
|
||||||
bf.s 1f
|
bf.s 1f
|
||||||
lds.l @r4+, pr
|
mov.l @r4+, r15
|
||||||
mov #1,r0 /* can't let setjmp() return zero! */
|
mov #1,r0 /* can't let setjmp() return zero! */
|
||||||
1:
|
1:
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
mov.l @r4+, r2
|
||||||
|
PTR_DEMANGLE (r2)
|
||||||
|
lds r2, pr
|
||||||
|
#else
|
||||||
|
lds.l @r4+, pr
|
||||||
|
#endif
|
||||||
rts
|
rts
|
||||||
ldc.l @r4+, gbr
|
ldc.l @r4+, gbr
|
||||||
END (__longjmp)
|
END (__longjmp)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* setjmp for SH3.
|
/* setjmp for SH3.
|
||||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -26,7 +26,13 @@ ENTRY (__sigsetjmp)
|
|||||||
/* Save registers */
|
/* Save registers */
|
||||||
add #(JB_SIZE - 4 * 5), r4
|
add #(JB_SIZE - 4 * 5), r4
|
||||||
stc.l gbr, @-r4
|
stc.l gbr, @-r4
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
sts pr, r2
|
||||||
|
PTR_MANGLE (r2)
|
||||||
|
mov.l r2, @-r4
|
||||||
|
#else
|
||||||
sts.l pr, @-r4
|
sts.l pr, @-r4
|
||||||
|
#endif
|
||||||
mov.l r15, @-r4
|
mov.l r15, @-r4
|
||||||
mov.l r14, @-r4
|
mov.l r14, @-r4
|
||||||
mov.l r13, @-r4
|
mov.l r13, @-r4
|
||||||
@ -36,8 +42,13 @@ ENTRY (__sigsetjmp)
|
|||||||
mov.l r9, @-r4
|
mov.l r9, @-r4
|
||||||
mov.l r8, @-r4
|
mov.l r8, @-r4
|
||||||
|
|
||||||
|
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||||
|
/* In ld.so we never save the signal mask. */
|
||||||
|
rts
|
||||||
|
mov #0, r0
|
||||||
|
#else
|
||||||
/* Make a tail call to __sigjmp_save; it takes the same args. */
|
/* Make a tail call to __sigjmp_save; it takes the same args. */
|
||||||
#ifdef SHARED
|
# ifdef SHARED
|
||||||
mov.l 1f, r1
|
mov.l 1f, r1
|
||||||
mova 1f, r0
|
mova 1f, r0
|
||||||
bra 2f
|
bra 2f
|
||||||
@ -53,12 +64,13 @@ ENTRY (__sigsetjmp)
|
|||||||
.align 2
|
.align 2
|
||||||
.L1:
|
.L1:
|
||||||
.long C_SYMBOL_NAME(__sigjmp_save@GOT)
|
.long C_SYMBOL_NAME(__sigjmp_save@GOT)
|
||||||
#else
|
# else
|
||||||
mov.l .L1, r1
|
mov.l .L1, r1
|
||||||
jmp @r1
|
jmp @r1
|
||||||
nop
|
nop
|
||||||
.align 2
|
.align 2
|
||||||
.L1:
|
.L1:
|
||||||
.long C_SYMBOL_NAME(__sigjmp_save)
|
.long C_SYMBOL_NAME(__sigjmp_save)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
END (__sigsetjmp)
|
END (__sigsetjmp)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* longjmp for SH.
|
/* longjmp for SH.
|
||||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -32,13 +32,19 @@ ENTRY (__longjmp)
|
|||||||
mov.l @r4+, r12
|
mov.l @r4+, r12
|
||||||
mov.l @r4+, r13
|
mov.l @r4+, r13
|
||||||
mov.l @r4+, r14
|
mov.l @r4+, r14
|
||||||
mov.l @r4+, r15
|
|
||||||
mov r5, r0 /* get the return value in place */
|
mov r5, r0 /* get the return value in place */
|
||||||
tst r0, r0
|
tst r0, r0
|
||||||
bf.s 1f
|
bf.s 1f
|
||||||
lds.l @r4+, pr
|
mov.l @r4+, r15
|
||||||
mov #1,r0 /* can't let setjmp() return zero! */
|
mov #1,r0 /* can't let setjmp() return zero! */
|
||||||
1:
|
1:
|
||||||
|
#ifdef PTR_DEMANGLE
|
||||||
|
mov.l @r4+, r2
|
||||||
|
PTR_DEMANGLE (r2)
|
||||||
|
lds r2, pr
|
||||||
|
#else
|
||||||
|
lds.l @r4+, pr
|
||||||
|
#endif
|
||||||
ldc.l @r4+, gbr
|
ldc.l @r4+, gbr
|
||||||
lds.l @r4+, fpscr
|
lds.l @r4+, fpscr
|
||||||
fmov.s @r4+, fr12
|
fmov.s @r4+, fr12
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* setjmp for SH4.
|
/* setjmp for SH4.
|
||||||
Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -31,7 +31,13 @@ ENTRY (__sigsetjmp)
|
|||||||
fmov.s fr12, @-r4
|
fmov.s fr12, @-r4
|
||||||
sts.l fpscr, @-r4
|
sts.l fpscr, @-r4
|
||||||
stc.l gbr, @-r4
|
stc.l gbr, @-r4
|
||||||
|
#ifdef PTR_MANGLE
|
||||||
|
sts pr, r2
|
||||||
|
PTR_MANGLE (r2)
|
||||||
|
mov.l r2, @-r4
|
||||||
|
#else
|
||||||
sts.l pr, @-r4
|
sts.l pr, @-r4
|
||||||
|
#endif
|
||||||
mov.l r15, @-r4
|
mov.l r15, @-r4
|
||||||
mov.l r14, @-r4
|
mov.l r14, @-r4
|
||||||
mov.l r13, @-r4
|
mov.l r13, @-r4
|
||||||
@ -41,8 +47,13 @@ ENTRY (__sigsetjmp)
|
|||||||
mov.l r9, @-r4
|
mov.l r9, @-r4
|
||||||
mov.l r8, @-r4
|
mov.l r8, @-r4
|
||||||
|
|
||||||
|
#if defined NOT_IN_libc && defined IS_IN_rtld
|
||||||
|
/* In ld.so we never save the signal mask. */
|
||||||
|
rts
|
||||||
|
mov #0, r0
|
||||||
|
#else
|
||||||
/* Make a tail call to __sigjmp_save; it takes the same args. */
|
/* Make a tail call to __sigjmp_save; it takes the same args. */
|
||||||
#ifdef SHARED
|
# ifdef SHARED
|
||||||
mov.l 1f, r1
|
mov.l 1f, r1
|
||||||
mova 1f, r0
|
mova 1f, r0
|
||||||
bra 2f
|
bra 2f
|
||||||
@ -58,12 +69,13 @@ ENTRY (__sigsetjmp)
|
|||||||
.align 2
|
.align 2
|
||||||
.L1:
|
.L1:
|
||||||
.long C_SYMBOL_NAME(__sigjmp_save@GOT)
|
.long C_SYMBOL_NAME(__sigjmp_save@GOT)
|
||||||
#else
|
# else
|
||||||
mov.l .L1, r1
|
mov.l .L1, r1
|
||||||
jmp @r1
|
jmp @r1
|
||||||
nop
|
nop
|
||||||
.align 2
|
.align 2
|
||||||
.L1:
|
.L1:
|
||||||
.long C_SYMBOL_NAME(__sigjmp_save)
|
.long C_SYMBOL_NAME(__sigjmp_save)
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
END (__sigsetjmp)
|
END (__sigsetjmp)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004
|
/* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004,
|
||||||
Free Software Foundation, Inc.
|
2005 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
|
Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
|
||||||
@ -24,6 +24,7 @@
|
|||||||
|
|
||||||
/* There is some commonality. */
|
/* There is some commonality. */
|
||||||
#include <sysdeps/unix/sh/sysdep.h>
|
#include <sysdeps/unix/sh/sysdep.h>
|
||||||
|
#include <tls.h>
|
||||||
|
|
||||||
/* For Linux we can use the system call table in the header file
|
/* For Linux we can use the system call table in the header file
|
||||||
/usr/include/asm/unistd.h
|
/usr/include/asm/unistd.h
|
||||||
@ -104,7 +105,7 @@
|
|||||||
mova 0f,r0; \
|
mova 0f,r0; \
|
||||||
add r0,r12; \
|
add r0,r12; \
|
||||||
mov.l 1f,r0; \
|
mov.l 1f,r0; \
|
||||||
mov.l r1,@(r0,r12)
|
mov.l r1,@(r0,r12); \
|
||||||
bra .Lpseudo_end; \
|
bra .Lpseudo_end; \
|
||||||
mov _IMM1,r0; \
|
mov _IMM1,r0; \
|
||||||
.align 2; \
|
.align 2; \
|
||||||
@ -359,4 +360,21 @@
|
|||||||
|
|
||||||
#endif /* __ASSEMBLER__ */
|
#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. Using a global variable
|
||||||
|
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)
|
||||||
|
# else
|
||||||
|
# define PTR_MANGLE(var) \
|
||||||
|
(var) = (void *) ((uintptr_t) (var) ^ THREAD_GET_POINTER_GUARD ())
|
||||||
|
# define PTR_DEMANGLE(var) PTR_MANGLE (var)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* linux/sh/sysdep.h */
|
#endif /* linux/sh/sysdep.h */
|
||||||
|
Loading…
Reference in New Issue
Block a user