This is the mail archive of the libc-hacker@sourceware.org mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
The attached patch updates the support of pointer mangling on SH corresponding to the recent change of jmpbuf-unwind stuff. Regards, kaz -- 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. diff -upr ORIG/libc/sysdeps/sh/sh3/__longjmp.S LOCAL/libc/sysdeps/sh/sh3/__longjmp.S --- ORIG/libc/sysdeps/sh/sh3/__longjmp.S 2005-12-23 22:38:50.000000000 +0900 +++ LOCAL/libc/sysdeps/sh/sh3/__longjmp.S 2006-01-20 19:00:41.000000000 +0900 @@ -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 diff -upr ORIG/libc/sysdeps/sh/sh3/setjmp.S LOCAL/libc/sysdeps/sh/sh3/setjmp.S --- ORIG/libc/sysdeps/sh/sh3/setjmp.S 2006-01-19 08:45:42.000000000 +0900 +++ LOCAL/libc/sysdeps/sh/sh3/setjmp.S 2006-01-20 18:53:38.000000000 +0900 @@ -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 diff -upr ORIG/libc/sysdeps/sh/sh4/__longjmp.S LOCAL/libc/sysdeps/sh/sh4/__longjmp.S --- ORIG/libc/sysdeps/sh/sh4/__longjmp.S 2005-12-23 22:38:50.000000000 +0900 +++ LOCAL/libc/sysdeps/sh/sh4/__longjmp.S 2006-01-20 19:00:37.000000000 +0900 @@ -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 diff -upr ORIG/libc/sysdeps/sh/sh4/setjmp.S LOCAL/libc/sysdeps/sh/sh4/setjmp.S --- ORIG/libc/sysdeps/sh/sh4/setjmp.S 2006-01-19 08:45:42.000000000 +0900 +++ LOCAL/libc/sysdeps/sh/sh4/setjmp.S 2006-01-20 18:52:19.000000000 +0900 @@ -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 diff -upr ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h --- ORIG/libc/sysdeps/unix/sysv/linux/sh/sysdep.h 2005-12-31 07:16:41.000000000 +0900 +++ LOCAL/libc/sysdeps/unix/sysv/linux/sh/sysdep.h 2006-01-20 18:57:15.000000000 +0900 @@ -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 ())
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |