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