Introduce target-specific LDFLAGS, the same way we have CFLAGS for the target.
It seems to be helping gcc somewhat into telling the correct endianness to ld that sticks with little endian even when the target is big (eg armeb-unknown-linux-uclibcgnueabi).
There's still work to do, especially finish the gcc part that is not in this commit.
/trunk/scripts/functions | 9 7 2 0 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
1 diff -durN gcc-3.4.6.orig/gcc/config/arm/coff.h gcc-3.4.6/gcc/config/arm/coff.h
2 --- gcc-3.4.6.orig/gcc/config/arm/coff.h 2004-02-24 15:25:22.000000000 +0100
3 +++ gcc-3.4.6/gcc/config/arm/coff.h 2007-08-15 23:10:54.000000000 +0200
5 #define TARGET_VERSION fputs (" (ARM/coff)", stderr)
8 -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
9 +#define TARGET_DEFAULT \
10 + ( ARM_FLAG_SOFT_FLOAT \
12 + | ARM_FLAG_APCS_32 \
13 + | ARM_FLAG_APCS_FRAME \
14 + | ARM_FLAG_MMU_TRAPS )
16 #ifndef MULTILIB_DEFAULTS
17 #define MULTILIB_DEFAULTS \
18 - { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
19 + { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
22 /* This is COFF, but prefer stabs. */
23 diff -durN gcc-3.4.6.orig/gcc/config/arm/elf.h gcc-3.4.6/gcc/config/arm/elf.h
24 --- gcc-3.4.6.orig/gcc/config/arm/elf.h 2004-02-24 15:25:22.000000000 +0100
25 +++ gcc-3.4.6/gcc/config/arm/elf.h 2007-08-15 23:10:54.000000000 +0200
28 #ifndef SUBTARGET_ASM_FLOAT_SPEC
29 #define SUBTARGET_ASM_FLOAT_SPEC "\
30 -%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
31 +%{mapcs-float:-mfloat} \
32 +%{mhard-float:-mfpu=fpa} \
33 +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
40 #ifndef TARGET_DEFAULT
41 -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
42 +#define TARGET_DEFAULT \
43 + ( ARM_FLAG_SOFT_FLOAT \
45 + | ARM_FLAG_APCS_32 \
46 + | ARM_FLAG_APCS_FRAME \
47 + | ARM_FLAG_MMU_TRAPS )
50 #ifndef MULTILIB_DEFAULTS
51 #define MULTILIB_DEFAULTS \
52 - { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
53 + { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
56 #define TARGET_ASM_FILE_START_APP_OFF true
57 diff -durN gcc-3.4.6.orig/gcc/config/arm/linux-elf.h gcc-3.4.6/gcc/config/arm/linux-elf.h
58 --- gcc-3.4.6.orig/gcc/config/arm/linux-elf.h 2007-08-15 23:07:00.000000000 +0200
59 +++ gcc-3.4.6/gcc/config/arm/linux-elf.h 2007-08-15 23:10:54.000000000 +0200
61 #define TARGET_LINKER_EMULATION "armelf_linux"
64 -/* Default is to use APCS-32 mode. */
66 + * Default is to use APCS-32 mode with soft-vfp.
67 + * The old Linux default for floats can be achieved with -mhard-float
68 + * or with the configure --with-float=hard option.
69 + * If -msoft-float or --with-float=soft is used then software float
70 + * support will be used just like the default but with the legacy
71 + * big endian word ordering for double float representation instead.
74 -#define TARGET_DEFAULT \
75 - ( ARM_FLAG_APCS_32 | \
76 - ARM_FLAG_MMU_TRAPS | \
77 - TARGET_ENDIAN_DEFAULT )
78 +#define TARGET_DEFAULT \
79 + ( ARM_FLAG_APCS_32 \
80 + | ARM_FLAG_SOFT_FLOAT \
81 + | TARGET_ENDIAN_DEFAULT \
83 + | ARM_FLAG_MMU_TRAPS )
85 +#undef SUBTARGET_EXTRA_ASM_SPEC
86 +#define SUBTARGET_EXTRA_ASM_SPEC "\
87 +%{mhard-float:-mfpu=fpa} \
88 +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
90 #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
94 #undef MULTILIB_DEFAULTS
95 #define MULTILIB_DEFAULTS \
96 - { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
97 + { "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
99 #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
103 %{!shared:%{profile:-lc_p}%{!profile:-lc}}"
105 -#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
106 +#define LIBGCC_SPEC "-lgcc"
108 /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
109 the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
110 diff -durN gcc-3.4.6.orig/gcc/config/arm/t-linux gcc-3.4.6/gcc/config/arm/t-linux
111 --- gcc-3.4.6.orig/gcc/config/arm/t-linux 2003-09-20 23:09:07.000000000 +0200
112 +++ gcc-3.4.6/gcc/config/arm/t-linux 2007-08-15 23:10:54.000000000 +0200
114 LIBGCC2_DEBUG_CFLAGS = -g0
116 LIB1ASMSRC = arm/lib1funcs.asm
117 -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
118 +LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
119 + _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
120 + _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
121 + _fixsfsi _fixunssfsi
123 # MULTILIB_OPTIONS = mhard-float/msoft-float
124 # MULTILIB_DIRNAMES = hard-float soft-float
125 diff -durN gcc-3.4.6.orig/gcc/config/arm/unknown-elf.h gcc-3.4.6/gcc/config/arm/unknown-elf.h
126 --- gcc-3.4.6.orig/gcc/config/arm/unknown-elf.h 2004-02-24 15:25:22.000000000 +0100
127 +++ gcc-3.4.6/gcc/config/arm/unknown-elf.h 2007-08-15 23:10:54.000000000 +0200
130 /* Default to using APCS-32 and software floating point. */
131 #ifndef TARGET_DEFAULT
132 -#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
133 +#define TARGET_DEFAULT \
134 + ( ARM_FLAG_SOFT_FLOAT \
136 + | ARM_FLAG_APCS_32 \
137 + | ARM_FLAG_APCS_FRAME \
138 + | ARM_FLAG_MMU_TRAPS )
141 /* Now we define the strings used to build the spec file. */
142 diff -durN gcc-3.4.6.orig/gcc/config/arm/xscale-elf.h gcc-3.4.6/gcc/config/arm/xscale-elf.h
143 --- gcc-3.4.6.orig/gcc/config/arm/xscale-elf.h 2003-07-02 01:26:43.000000000 +0200
144 +++ gcc-3.4.6/gcc/config/arm/xscale-elf.h 2007-08-15 23:10:54.000000000 +0200
146 endian, regardless of the endian-ness of the memory
149 -#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
150 - %{mhard-float:-mfpu=fpa} \
151 - %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
152 +#define SUBTARGET_EXTRA_ASM_SPEC "\
153 +%{!mcpu=*:-mcpu=xscale} \
154 +%{mhard-float:-mfpu=fpa} \
155 +%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
157 #ifndef MULTILIB_DEFAULTS
158 #define MULTILIB_DEFAULTS \
159 - { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
160 + { "mlittle-endian", "mno-thumb-interwork", "marm" }