[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: __trampoline_setup



>    1664:       38 63 00 04     addi    r3,r3,4
>    1668:       42 00 ff f4     bdnz+   165c <__trampoline_setup+0x44>
>    166c:       7c 00 04 ac     sync
>    1670:       4c 00 01 2c     isync
>    1674:       4e 80 00 20     blr
>    1678:       48 00 00 01     bl      1678 <__trampoline_setup+0x60>

これは tramp.asm の最後の部分ですね。

	/* Finally synchronize things & return */
	sync
	isync
	blr

.Labort:
	bl	JUMP_TARGET(abort)
FUNC_END(__trampoline_setup)

で JUMP_TARGET() は ppc-asm.h にあって、

#define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
#if defined __PIC__ || defined __pic__
#define JUMP_TARGET(name) FUNC_NAME(name@plt)
#else
#define JUMP_TARGET(name) FUNC_NAME(name)
#endif

てなわけで、__PIC__ もしくは __pic__ が定義されていないという
可能性が濃厚に…いや、gcc-3.3.x のバグか。

3/3ごろ:-)に対応済みみたいなのでとりあえずこれで。
Index: netbsd.h
===================================================================
RCS file: /cvs/cvsroot/src/gnu/dist/gcc/gcc/config/netbsd.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -c -r1.6 -r1.7
*** netbsd.h	15 Feb 2004 19:52:27 -0000	1.6
--- netbsd.h	3 Mar 2004 20:09:51 -0000	1.7
***************
*** 26,31 ****
--- 26,36 ----
        builtin_define ("__NetBSD__");		\
        builtin_assert ("system=unix");		\
        builtin_assert ("system=NetBSD");		\
+       if (flag_pic)				\
+         {					\
+           builtin_define ("__PIC__");		\
+           builtin_define ("__pic__");		\
+         }					\
      }						\
    while (0)
  
sysv4.h をみると -D__PIC__=2 にしてる場合があるので多少の疑問は
残るんですけど。