📄 sh-lib1funcs_sizeandtype.patch
字号:
Fixes the problem [ libdemo.so and main.o both use assignment on structures ] $ sh4-unknown-linux-gnu-gcc libdemo.so main.o sh4-unknown-linux-gnu/bin/ld: warning: type and size of dynamic symbol `__movstr_i4_even' are not defined [ resulting app links, but crashes at runtime ]See testcase at http://tsukuba.m17n.org/linux-sh/ml/linux-sh/2003-11/msg00016.htmlPatch was posted as http://gcc.gnu.org/ml/gcc-patches/2002-11/msg01641.htmland is in cvs as http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sh/lib1funcs.asm.diff?r1=1.29.4.1&r2=1.29.4.2but see also sh-libgcc-hidden.patch===================================================================--- gcc/gcc/config/sh/lib1funcs.asm 2002/09/20 01:29:21 1.29.4.1+++ gcc/gcc/config/sh/lib1funcs.asm 2003/11/18 12:27:31@@ -38,9 +38,14 @@ amylaar@cygnus.com */ #ifdef __ELF__-#define LOCAL(X) .L_##X-#else-#define LOCAL(X) L_##X+#define LOCAL(X) .L_##X+#define FUNC(X) .type X,@function+#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X+#define ENDFUNC(X) ENDFUNC0(X)+#else+#define LOCAL(X) L_##X+#define FUNC(X)+#define ENDFUNC(X) #endif #define CONCAT(A,B) A##B@@ -87,6 +92,40 @@ .global GLOBAL(ashiftrt_r4_31) .global GLOBAL(ashiftrt_r4_32) + FUNC(GLOBAL(ashiftrt_r4_0))+ FUNC(GLOBAL(ashiftrt_r4_1))+ FUNC(GLOBAL(ashiftrt_r4_2))+ FUNC(GLOBAL(ashiftrt_r4_3))+ FUNC(GLOBAL(ashiftrt_r4_4))+ FUNC(GLOBAL(ashiftrt_r4_5))+ FUNC(GLOBAL(ashiftrt_r4_6))+ FUNC(GLOBAL(ashiftrt_r4_7))+ FUNC(GLOBAL(ashiftrt_r4_8))+ FUNC(GLOBAL(ashiftrt_r4_9))+ FUNC(GLOBAL(ashiftrt_r4_10))+ FUNC(GLOBAL(ashiftrt_r4_11))+ FUNC(GLOBAL(ashiftrt_r4_12))+ FUNC(GLOBAL(ashiftrt_r4_13))+ FUNC(GLOBAL(ashiftrt_r4_14))+ FUNC(GLOBAL(ashiftrt_r4_15))+ FUNC(GLOBAL(ashiftrt_r4_16))+ FUNC(GLOBAL(ashiftrt_r4_17))+ FUNC(GLOBAL(ashiftrt_r4_18))+ FUNC(GLOBAL(ashiftrt_r4_19))+ FUNC(GLOBAL(ashiftrt_r4_20))+ FUNC(GLOBAL(ashiftrt_r4_21))+ FUNC(GLOBAL(ashiftrt_r4_22))+ FUNC(GLOBAL(ashiftrt_r4_23))+ FUNC(GLOBAL(ashiftrt_r4_24))+ FUNC(GLOBAL(ashiftrt_r4_25))+ FUNC(GLOBAL(ashiftrt_r4_26))+ FUNC(GLOBAL(ashiftrt_r4_27))+ FUNC(GLOBAL(ashiftrt_r4_28))+ FUNC(GLOBAL(ashiftrt_r4_29))+ FUNC(GLOBAL(ashiftrt_r4_30))+ FUNC(GLOBAL(ashiftrt_r4_31))+ FUNC(GLOBAL(ashiftrt_r4_32))+ .align 1 GLOBAL(ashiftrt_r4_32): GLOBAL(ashiftrt_r4_31):@@ -166,6 +205,40 @@ GLOBAL(ashiftrt_r4_0): rts nop++ ENDFUNC(GLOBAL(ashiftrt_r4_0))+ ENDFUNC(GLOBAL(ashiftrt_r4_1))+ ENDFUNC(GLOBAL(ashiftrt_r4_2))+ ENDFUNC(GLOBAL(ashiftrt_r4_3))+ ENDFUNC(GLOBAL(ashiftrt_r4_4))+ ENDFUNC(GLOBAL(ashiftrt_r4_5))+ ENDFUNC(GLOBAL(ashiftrt_r4_6))+ ENDFUNC(GLOBAL(ashiftrt_r4_7))+ ENDFUNC(GLOBAL(ashiftrt_r4_8))+ ENDFUNC(GLOBAL(ashiftrt_r4_9))+ ENDFUNC(GLOBAL(ashiftrt_r4_10))+ ENDFUNC(GLOBAL(ashiftrt_r4_11))+ ENDFUNC(GLOBAL(ashiftrt_r4_12))+ ENDFUNC(GLOBAL(ashiftrt_r4_13))+ ENDFUNC(GLOBAL(ashiftrt_r4_14))+ ENDFUNC(GLOBAL(ashiftrt_r4_15))+ ENDFUNC(GLOBAL(ashiftrt_r4_16))+ ENDFUNC(GLOBAL(ashiftrt_r4_17))+ ENDFUNC(GLOBAL(ashiftrt_r4_18))+ ENDFUNC(GLOBAL(ashiftrt_r4_19))+ ENDFUNC(GLOBAL(ashiftrt_r4_20))+ ENDFUNC(GLOBAL(ashiftrt_r4_21))+ ENDFUNC(GLOBAL(ashiftrt_r4_22))+ ENDFUNC(GLOBAL(ashiftrt_r4_23))+ ENDFUNC(GLOBAL(ashiftrt_r4_24))+ ENDFUNC(GLOBAL(ashiftrt_r4_25))+ ENDFUNC(GLOBAL(ashiftrt_r4_26))+ ENDFUNC(GLOBAL(ashiftrt_r4_27))+ ENDFUNC(GLOBAL(ashiftrt_r4_28))+ ENDFUNC(GLOBAL(ashiftrt_r4_29))+ ENDFUNC(GLOBAL(ashiftrt_r4_30))+ ENDFUNC(GLOBAL(ashiftrt_r4_31))+ ENDFUNC(GLOBAL(ashiftrt_r4_32)) #endif #ifdef L_ashiftrt_n@@ -188,6 +261,7 @@ ! .global GLOBAL(ashrsi3)+ FUNC(GLOBAL(ashrsi3)) .align 2 GLOBAL(ashrsi3): mov #31,r0@@ -315,6 +389,7 @@ rts nop + ENDFUNC(GLOBAL(ashrsi3)) #endif #ifdef L_ashiftlt@@ -336,6 +411,7 @@ ! (none) ! .global GLOBAL(ashlsi3)+ FUNC(GLOBAL(ashlsi3)) .align 2 GLOBAL(ashlsi3): mov #31,r0@@ -472,6 +548,7 @@ rts nop + ENDFUNC(GLOBAL(ashlsi3)) #endif #ifdef L_lshiftrt@@ -493,6 +570,7 @@ ! (none) ! .global GLOBAL(lshrsi3)+ FUNC(GLOBAL(lshrsi3)) .align 2 GLOBAL(lshrsi3): mov #31,r0@@ -629,6 +707,7 @@ rts nop + ENDFUNC(GLOBAL(lshrsi3)) #endif #ifdef L_movstr@@ -645,76 +724,113 @@ add #64,r4 .align 4 .global GLOBAL(movstrSI64)+ FUNC(GLOBAL(movstrSI64)) GLOBAL(movstrSI64): mov.l @(60,r5),r0 mov.l r0,@(60,r4) .global GLOBAL(movstrSI60)+ FUNC(GLOBAL(movstrSI60)) GLOBAL(movstrSI60): mov.l @(56,r5),r0 mov.l r0,@(56,r4) .global GLOBAL(movstrSI56)+ FUNC(GLOBAL(movstrSI56)) GLOBAL(movstrSI56): mov.l @(52,r5),r0 mov.l r0,@(52,r4) .global GLOBAL(movstrSI52)+ FUNC(GLOBAL(movstrSI52)) GLOBAL(movstrSI52): mov.l @(48,r5),r0 mov.l r0,@(48,r4) .global GLOBAL(movstrSI48)+ FUNC(GLOBAL(movstrSI48)) GLOBAL(movstrSI48): mov.l @(44,r5),r0 mov.l r0,@(44,r4) .global GLOBAL(movstrSI44)+ FUNC(GLOBAL(movstrSI44)) GLOBAL(movstrSI44): mov.l @(40,r5),r0 mov.l r0,@(40,r4) .global GLOBAL(movstrSI40)+ FUNC(GLOBAL(movstrSI40)) GLOBAL(movstrSI40): mov.l @(36,r5),r0 mov.l r0,@(36,r4) .global GLOBAL(movstrSI36)+ FUNC(GLOBAL(movstrSI36)) GLOBAL(movstrSI36): mov.l @(32,r5),r0 mov.l r0,@(32,r4) .global GLOBAL(movstrSI32)+ FUNC(GLOBAL(movstrSI32)) GLOBAL(movstrSI32): mov.l @(28,r5),r0 mov.l r0,@(28,r4) .global GLOBAL(movstrSI28)+ FUNC(GLOBAL(movstrSI28)) GLOBAL(movstrSI28): mov.l @(24,r5),r0 mov.l r0,@(24,r4) .global GLOBAL(movstrSI24)+ FUNC(GLOBAL(movstrSI24)) GLOBAL(movstrSI24): mov.l @(20,r5),r0 mov.l r0,@(20,r4) .global GLOBAL(movstrSI20)+ FUNC(GLOBAL(movstrSI20)) GLOBAL(movstrSI20): mov.l @(16,r5),r0 mov.l r0,@(16,r4) .global GLOBAL(movstrSI16)+ FUNC(GLOBAL(movstrSI16)) GLOBAL(movstrSI16): mov.l @(12,r5),r0 mov.l r0,@(12,r4) .global GLOBAL(movstrSI12)+ FUNC(GLOBAL(movstrSI12)) GLOBAL(movstrSI12): mov.l @(8,r5),r0 mov.l r0,@(8,r4) .global GLOBAL(movstrSI8)+ FUNC(GLOBAL(movstrSI8)) GLOBAL(movstrSI8): mov.l @(4,r5),r0 mov.l r0,@(4,r4) .global GLOBAL(movstrSI4)+ FUNC(GLOBAL(movstrSI4)) GLOBAL(movstrSI4): mov.l @(0,r5),r0 mov.l r0,@(0,r4)+ .global GLOBAL(movstrSI0)+ FUNC(GLOBAL(movstrSI0)) GLOBAL(movstrSI0): rts nop + ENDFUNC(GLOBAL(movstrSI64))+ ENDFUNC(GLOBAL(movstrSI60))+ ENDFUNC(GLOBAL(movstrSI56))+ ENDFUNC(GLOBAL(movstrSI52))+ ENDFUNC(GLOBAL(movstrSI48))+ ENDFUNC(GLOBAL(movstrSI44))+ ENDFUNC(GLOBAL(movstrSI40))+ ENDFUNC(GLOBAL(movstrSI36))+ ENDFUNC(GLOBAL(movstrSI32))+ ENDFUNC(GLOBAL(movstrSI28))+ ENDFUNC(GLOBAL(movstrSI24))+ ENDFUNC(GLOBAL(movstrSI20))+ ENDFUNC(GLOBAL(movstrSI16))+ ENDFUNC(GLOBAL(movstrSI12))+ ENDFUNC(GLOBAL(movstrSI8))+ ENDFUNC(GLOBAL(movstrSI4))+ ENDFUNC(GLOBAL(movstrSI0))+ .align 4 .global GLOBAL(movstr)+ FUNC(GLOBAL(movstr)) GLOBAL(movstr): mov.l @(60,r5),r0 mov.l r0,@(60,r4)@@ -771,6 +887,8 @@ add #64,r5 bra GLOBAL(movstr) add #64,r4++ FUNC(GLOBAL(movstr)) #endif #ifdef L_movstr_i4@@ -779,6 +897,10 @@ .global GLOBAL(movstr_i4_odd) .global GLOBAL(movstrSI12_i4) + FUNC(GLOBAL(movstr_i4_even))+ FUNC(GLOBAL(movstr_i4_odd))+ FUNC(GLOBAL(movstrSI12_i4))+ .p2align 5 L_movstr_2mod4_end: mov.l r0,@(16,r4)@@ -787,6 +909,11 @@ .p2align 2 +GLOBAL(movstr_i4_even):+ mov.l @r5+,r0+ bra L_movstr_start_even+ mov.l @r5+,r1+ GLOBAL(movstr_i4_odd): mov.l @r5+,r1 add #-4,r4@@ -813,10 +940,8 @@ rts mov.l r3,@(12,r4) -GLOBAL(movstr_i4_even):- mov.l @r5+,r0- bra L_movstr_start_even- mov.l @r5+,r1+ ENDFUNC(GLOBAL(movstr_i4_even))+ ENDFUNC(GLOBAL(movstr_i4_odd)) .p2align 4 GLOBAL(movstrSI12_i4):@@ -827,12 +952,15 @@ mov.l r1,@(4,r4) rts mov.l r2,@(8,r4)++ ENDFUNC(GLOBAL(movstrSI12_i4)) #endif #ifdef L_mulsi3 .global GLOBAL(mulsi3)+ FUNC(GLOBAL(mulsi3)) ! r4 = aabb ! r5 = ccdd@@ -865,7 +993,7 @@ rts add r2,r0 -+ FUNC(GLOBAL(mulsi3)) #endif #endif /* ! __SH5__ */ #ifdef L_sdivsi3_i4@@ -875,6 +1003,7 @@ !! args in r4 and r5, result in fpul, clobber dr0, dr2 .global GLOBAL(sdivsi3_i4)+ FUNC(GLOBAL(sdivsi3_i4)) GLOBAL(sdivsi3_i4): lds r4,fpul float fpul,dr0@@ -884,6 +1013,7 @@ rts ftrc dr0,fpul + ENDFUNC(GLOBAL(sdivsi3_i4)) #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) || (defined (__SH5__) && ! defined __SH4_NOFPU__) !! args in r4 and r5, result in fpul, clobber r2, dr0, dr2 @@ -892,6 +1022,7 @@ .mode SHcompact #endif .global GLOBAL(sdivsi3_i4)+ FUNC(GLOBAL(sdivsi3_i4)) GLOBAL(sdivsi3_i4): sts.l fpscr,@-r15 mov #8,r2@@ -906,6 +1037,7 @@ rts lds.l @r15+,fpscr + ENDFUNC(GLOBAL(sdivsi3_i4)) #endif /* ! __SH5__ || __SH5__ == 32 */ #endif /* ! __SH4__ */ #endif@@ -920,9 +1052,10 @@ !! !! -!! args in r4 and r5, result in r0 clobber r1,r2,r3+!! args in r4 and r5, result in r0 clobber r1, r2, r3, and t bit .global GLOBAL(sdivsi3)+ FUNC(GLOBAL(sdivsi3)) #if __SHMEDIA__ #if __SH5__ == 32 .section .text..SHmedia32,"ax"@@ -1166,6 +1299,7 @@ div0: rts mov #0,r0 + ENDFUNC(GLOBAL(sdivsi3)) #endif /* ! __SHMEDIA__ */ #endif /* ! __SH4__ */ #endif@@ -1174,9 +1308,11 @@ .title "SH DIVIDE" !! 4 byte integer Divide code for the Hitachi SH #ifdef __SH4__-!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4+!! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4,+!! and t bit .global GLOBAL(udivsi3_i4)+ FUNC(GLOBAL(udivsi3_i4)) GLOBAL(udivsi3_i4): mov #1,r1 cmp/hi r1,r5@@ -1217,11 +1353,13 @@ L1: .double 2147483648 + ENDFUNC(GLOBAL(udivsi3_i4)) #elif defined (__SH5__) && ! defined (__SH4_NOFPU__) #if ! __SH5__ || __SH5__ == 32 !! args in r4 and r5, result in fpul, clobber r20, r21, dr0, fr33 .mode SHmedia .global GLOBAL(udivsi3_i4)+ FUNC(GLOBAL(udivsi3_i4)) GLOBAL(udivsi3_i4): addz.l r4,r63,r20 addz.l r5,r63,r21@@ -1234,6 +1372,8 @@ ftrc.dq dr0,dr32 fmov.s fr33,fr32 blink tr0,r63++ ENDFUNC(GLOBAL(udivsi3_i4)) #endif /* ! __SH5__ || __SH5__ == 32 */ #elif defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__) !! args in r4 and r5, result in fpul, clobber r0, r1, r4, r5, dr0, dr2, dr4@@ -1287,6 +1427,7 @@ #endif .double 2147483648 + ENDFUNC(GLOBAL(udivsi3_i4)) #endif /* ! __SH4__ */ #endif @@ -1297,6 +1438,7 @@ !! args in r4 and r5, result in r0, clobbers r4, pr, and t bit .global GLOBAL(udivsi3)+ FUNC(GLOBAL(udivsi3)) #if __SHMEDIA__ #if __SH5__ == 32@@ -1485,6 +1627,7 @@ rts rotcl r0 + ENDFUNC(GLOBAL(udivsi3)) #endif /* ! __SHMEDIA__ */ #endif /* __SH4__ */ #endif /* L_udivsi3 */@@ -1790,6 +1933,7 @@ .mode SHcompact #endif .global GLOBAL(set_fpscr)+ FUNC(GLOBAL(set_fpscr)) GLOBAL(set_fpscr): lds r4,fpscr mov.l LOCAL(set_fpscr_L1),r1@@ -1822,6 +1966,8 @@ .align 2 LOCAL(set_fpscr_L1): .long GLOBAL(fpscr_values)++ ENDFUNC(GLOBAL(set_fpscr)) #ifdef __ELF__ .comm GLOBAL(fpscr_values),8,4 #else@@ -1860,6 +2006,7 @@ blink tr0, r63 #elif defined(__SH4_SINGLE__) || defined(__SH4__) || defined(__SH4_SINGLE_ONLY__) .global GLOBAL(ic_invalidate)+ FUNC(GLOBAL(ic_invalidate)) GLOBAL(ic_invalidate): ocbwb @r4 mova 0f,r0@@ -1882,6 +2029,8 @@ nop .endr .endr++ ENDFUNC(GLOBAL(ic_invalidate)) #endif /* SH4 */ #endif /* L_ic_invalidate */ @@ -1940,6 +2089,7 @@ will be expanded into r2/r3 upon return. */ .global GLOBAL(GCC_shcompact_call_trampoline)+ FUNC(GLOBAL(GCC_shcompact_call_trampoline)) GLOBAL(GCC_shcompact_call_trampoline): ptabs/l r0, tr0 /* Prepare to call the actual function. */ movi ((datalabel LOCAL(ct_main_table) - 31 * 2) >> 16) & 65535, r0@@ -2290,6 +2440,8 @@ shari r2, 32, r2 #endif blink tr0, r63++ ENDFUNC(GLOBAL(GCC_shcompact_call_trampoline)) #endif /* L_shcompact_call_trampoline */ #ifdef L_shcompact_return_trampoline@@ -2302,6 +2454,7 @@ .section .text..SHmedia32, "ax" .align 2 .global GLOBAL(GCC_shcompact_return_trampoline)+ FUNC(GLOBAL(GCC_shcompact_return_trampoline)) GLOBAL(GCC_shcompact_return_trampoline): ptabs/l r18, tr0 #if __LITTLE_ENDIAN__@@ -2313,6 +2466,8 @@ #endif or r3, r2, r2 blink tr0, r63++ ENDFUNC(GLOBAL(GCC_shcompact_return_trampoline)) #endif /* L_shcompact_return_trampoline */ #ifdef L_shcompact_incoming_args@@ -2367,6 +2522,7 @@ actual bit pattern. */ .global GLOBAL(GCC_shcompact_incoming_args)+ FUNC(GLOBAL(GCC_shcompact_incoming_args)) GLOBAL(GCC_shcompact_incoming_args): ptabs/l r18, tr0 /* Prepare to return. */ shlri r17, 32, r0 /* Load the cookie. */@@ -2519,6 +2675,7 @@ LOCAL(ia_return): /* Return. */ blink tr0, r63 LOCAL(ia_end_of_push_seq): /* Label used to compute the first push instruction. */+ ENDFUNC(GLOBAL(GCC_shcompact_incoming_args)) #endif /* L_shcompact_incoming_args */ #endif #if __SH5__@@ -2530,6 +2687,7 @@ #endif .align 3 /* It is copied in units of 8 bytes in SHmedia mode. */ .global GLOBAL(GCC_nested_trampoline)+ FUNC(GLOBAL(GCC_nested_trampoline)) GLOBAL(GCC_nested_trampoline): .mode SHmedia ptrel/u r63, tr0@@ -2546,6 +2704,8 @@ ld.l r0, 28, r1 #endif blink tr1, r63++ ENDFUNC(GLOBAL(GCC_nested_trampoline)) #endif /* L_nested_trampoline */ #endif /* __SH5__ */ #if __SH5__ == 32@@ -2555,6 +2715,7 @@ .align 2 #ifndef __SH4_NOFPU__ .global GLOBAL(GCC_push_shmedia_regs)+ FUNC(GLOBAL(GCC_push_shmedia_regs)) GLOBAL(GCC_push_shmedia_regs): addi.l r15, -14*8, r15 fst.d r15, 13*8, dr62@@ -2573,6 +2734,7 @@ fst.d r15, 0*8, dr36 #endif .global GLOBAL(GCC_push_shmedia_regs_nofpu)+ FUNC(GLOBAL(GCC_push_shmedia_regs_nofpu)) GLOBAL(GCC_push_shmedia_regs_nofpu): ptabs/l r18, tr0 addi.l r15, -27*8, r15@@ -2608,8 +2770,13 @@ st.q r15, 0*8, r28 blink tr0, r63 +#ifndef __SH4_NOFPU__ + ENDFUNC(GLOBAL(GCC_push_shmedia_regs))+#endif+ ENDFUNC(GLOBAL(GCC_push_shmedia_regs_nofpu)) #ifndef __SH4_NOFPU__ .global GLOBAL(GCC_pop_shmedia_regs)+ FUNC(GLOBAL(GCC_pop_shmedia_regs)) GLOBAL(GCC_pop_shmedia_regs): pt .L0, tr1 movi 41*8, r0@@ -2630,6 +2797,7 @@ blink tr1, r63 #endif .global GLOBAL(GCC_pop_shmedia_regs_nofpu)+ FUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu)) GLOBAL(GCC_pop_shmedia_regs_nofpu): movi 27*8, r0 .L0:@@ -2666,5 +2834,10 @@ ld.q r15, 0*8, r28 add.l r15, r0, r15 blink tr0, r63++#ifndef __SH4_NOFPU__+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs))+#endif+ ENDFUNC(GLOBAL(GCC_pop_shmedia_regs_nofpu)) #endif /* __SH5__ == 32 */ #endif /* L_push_pop_shmedia_regs */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -