Hi, For SH, init/fini function prologue is defined in libc/sysdeps/linux/sh/crti.S as follows.
| (frame entry) |#ifndef __HAVE_SHARED__ | (GOT pointer initialization) |#endif I think this should be "ifdef", but "ifndef". Or, are there any reason that GOT should be used (only)in NON-shared case ? I did some cleanups as well as invert that conditions. Actually, "push r12" is not needed in non-shared case. But, I've left it untouched, because I don't want to modify the function epilogue(crtn.S). If fixed, we will have 4 bytes smaller code. Anyone want it ? Regards, /yoshii --- libc/sysdeps/linux/sh/crti.S: Fix(invert) __HAVE_SHARED__ condition. Reorder/eliminate instructions. Signed-off-by: Takashi YOSHII <[EMAIL PROTECTED]> --- diff --git a/libc/sysdeps/linux/sh/crti.S b/libc/sysdeps/linux/sh/crti.S index a74f96e..a092b78 100644 --- a/libc/sysdeps/linux/sh/crti.S +++ b/libc/sysdeps/linux/sh/crti.S @@ -12,20 +12,17 @@ _init: mov.l r12,@-r15 mov.l r14,@-r15 sts.l pr,@-r15 -#ifndef __HAVE_SHARED__ + mov r15,r14 +#ifdef __HAVE_SHARED__ mova .L6,r0 mov.l .L6,r12 - add r0,r12 -#endif - mov r15,r14 bra 1f - nop + add r0,r12 .align 2 -#ifndef __HAVE_SHARED__ .L6: .long _GLOBAL_OFFSET_TABLE_ -#endif 1: +#endif .section .fini .hidden _fini @@ -37,19 +34,15 @@ _fini: mov.l r14,@-r15 sts.l pr,@-r15 mov r15,r14 -#ifndef __HAVE_SHARED__ +#ifdef __HAVE_SHARED__ mov.l .L11,r12 mova .L11,r0 - add r0,r12 -#endif - bra 1f - nop + add r0,r12 .align 2 -#ifndef __HAVE_SHARED__ .L11: .long _GLOBAL_OFFSET_TABLE_ -#endif 1: +#endif .ident "GCC: (GNU) 3.3.2" _______________________________________________ uClibc mailing list uClibc@uclibc.org http://busybox.net/cgi-bin/mailman/listinfo/uclibc