]>
Commit | Line | Data |
---|---|---|
1b8f31c8 | 1 | |
2 | This takes care of -mid-shared-library requirements for | |
3 | code generated by m68k_output_mi_thunk(). | |
4 | ||
5 | NOTE: the generated assembly code clobbers %a1. I don't | |
6 | know whether this is safe. | |
7 | ||
8 | ||
9 | diff -Npr -U10 gcc-3.3.1.orig/gcc/config/m68k/m68k.c gcc-3.3.1/gcc/config/m68k/m68k.c | |
10 | --- gcc-3.3.1.orig/gcc/config/m68k/m68k.c 2003-07-25 00:35:34.000000000 +0200 | |
11 | +++ gcc-3.3.1/gcc/config/m68k/m68k.c 2003-07-25 00:36:14.000000000 +0200 | |
12 | @@ -4181,40 +4181,44 @@ m68k_output_mi_thunk (file, thunk, delta | |
13 | #endif | |
14 | } | |
15 | ||
16 | xops[0] = DECL_RTL (function); | |
17 | ||
18 | /* Logic taken from call patterns in m68k.md. */ | |
19 | if (flag_pic) | |
20 | { | |
21 | if (TARGET_PCREL) | |
22 | fmt = "bra.l %o0"; | |
23 | - else | |
24 | + else if ((flag_pic == 1) || TARGET_68020) | |
25 | { | |
26 | #ifdef MOTOROLA | |
27 | #ifdef HPUX_ASM | |
28 | fmt = "bra.l %0"; | |
29 | #else | |
30 | #ifdef USE_GAS | |
31 | fmt = "bra.l %0@PLTPC"; | |
32 | #else | |
33 | fmt = "bra %0@PLTPC"; | |
34 | #endif | |
35 | #endif | |
36 | #else | |
37 | #ifdef USE_GAS | |
38 | fmt = "bra.l %0"; | |
39 | #else | |
40 | fmt = "jra %0,a1"; | |
41 | #endif | |
42 | #endif | |
43 | } | |
44 | + else if (optimize_size || TARGET_ID_SHARED_LIBRARY) | |
45 | + fmt = "move.l %0@GOT(%%a5), %%a1\n\tjmp (%%a1)"; | |
46 | + else | |
47 | + fmt = "lea %0-.-8,%%a1\n\tjsr 0(%%pc,%%a1)"; | |
48 | } | |
49 | else | |
50 | { | |
51 | #if defined (MOTOROLA) && !defined (USE_GAS) | |
52 | #ifdef MOTOROLA_BSR | |
53 | fmt = "bra %0"; | |
54 | #else | |
55 | fmt = "jmp %0"; | |
56 | #endif | |
57 | #else |