patches/gcc/4.0.0/110-arm-bigendian.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Sep 04 17:27:16 2009 +0200 (2009-09-04)
changeset 1512 439a6b292917
parent 402 197e1b49586e
permissions -rw-r--r--
TODO: update

Add TODO list for m4, autoconf, automake and libtool.
Building our own versions would remove burden from the users
who have older versions on their distributions, and are not
ready/able/allowed to upgrade.
yann@402
     1
By Lennert Buytenhek <buytenh@wantstofly.org>
yann@402
     2
Adds support for arm*b-linux* big-endian ARM targets
yann@402
     3
yann@402
     4
Fixes following build error for big-endian ARM targets:
yann@402
     5
yann@402
     6
armeb-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/bin/../lib/gcc/armeb-unknown-linux-gnu/4.0.0/../../../../armeb-unknown-linux-gnu/bin/ld: unrecognised emulation mode: armelf_linux
yann@402
     7
Supported emulations: armelfb_linux armelfb
yann@402
     8
collect2: ld returned 1 exit status
yann@402
     9
make[2]: *** [crosstool-0.32/build/armeb-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/build-glibc/csu/crt1.o] Error 1
yann@402
    10
make[2]: Leaving directory `crosstool-0.32/build/armeb-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/glibc-2.3.4/csu'
yann@402
    11
make[1]: *** [csu/subdir_lib] Error 2
yann@402
    12
make[1]: Leaving directory `crosstool-0.32/build/armeb-unknown-linux-gnu/gcc-4.0.0-20050410-glibc-2.3.4/glibc-2.3.4'
yann@402
    13
make: *** [lib] Error 2
yann@402
    14
yann@402
    15
yann@402
    16
See http://gcc.gnu.org/PR16350
yann@402
    17
yann@402
    18
--- gcc-4.0-20050305/gcc/config/arm/linux-elf.h.orig	2005-03-23 18:44:54.822707377 +0100
yann@402
    19
+++ gcc-4.0-20050305/gcc/config/arm/linux-elf.h	2005-03-23 18:46:18.228560206 +0100
yann@402
    20
@@ -31,19 +31,33 @@
yann@402
    21
 /* Do not assume anything about header files.  */
yann@402
    22
 #define NO_IMPLICIT_EXTERN_C
yann@402
    23
 
yann@402
    24
+/*
yann@402
    25
+ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for
yann@402
    26
+ * arm*b-*-linux* (big endian) configurations.
yann@402
    27
+ */
yann@402
    28
+#if TARGET_BIG_ENDIAN_DEFAULT
yann@402
    29
+#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
yann@402
    30
+#define TARGET_ENDIAN_OPTION "mbig-endian"
yann@402
    31
+#define TARGET_LINKER_EMULATION "armelfb_linux"
yann@402
    32
+#else
yann@402
    33
+#define TARGET_ENDIAN_DEFAULT 0
yann@402
    34
+#define TARGET_ENDIAN_OPTION "mlittle-endian"
yann@402
    35
+#define TARGET_LINKER_EMULATION "armelf_linux"
yann@402
    36
+#endif
yann@402
    37
+
yann@402
    38
 #undef  TARGET_DEFAULT_FLOAT_ABI
yann@402
    39
 #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
yann@402
    40
 
yann@402
    41
 #undef  TARGET_DEFAULT
yann@402
    42
-#define TARGET_DEFAULT (0)
yann@402
    43
+#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
yann@402
    44
 
yann@402
    45
 #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
yann@402
    46
 
yann@402
    47
-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
yann@402
    48
+#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
yann@402
    49
 
yann@402
    50
 #undef  MULTILIB_DEFAULTS
yann@402
    51
 #define MULTILIB_DEFAULTS \
yann@402
    52
-	{ "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
yann@402
    53
+	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
yann@402
    54
 
yann@402
    55
 /* The GNU C++ standard library requires that these macros be defined.  */
yann@402
    56
 #undef CPLUSPLUS_CPP_SPEC
yann@402
    57
@@ -90,7 +104,7 @@
yann@402
    58
    %{rdynamic:-export-dynamic} \
yann@402
    59
    %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
yann@402
    60
    -X \
yann@402
    61
-   %{mbig-endian:-EB}" \
yann@402
    62
+   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
yann@402
    63
    SUBTARGET_EXTRA_LINK_SPEC
yann@402
    64
 
yann@402
    65
 #define TARGET_OS_CPP_BUILTINS()		\
yann@402
    66
--- gcc-4.0-20050305/gcc/config.gcc.orig	2005-03-23 18:46:23.318105335 +0100
yann@402
    67
+++ gcc-4.0-20050305/gcc/config.gcc	2005-03-23 18:47:41.592546386 +0100
yann@402
    68
@@ -650,6 +650,11 @@
yann@402
    69
 	;;
yann@402
    70
 arm*-*-linux*)			# ARM GNU/Linux with ELF
yann@402
    71
 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h  arm/linux-gas.h arm/linux-elf.h arm/aout.h arm/arm.h"
yann@402
    72
+	case $target in
yann@402
    73
+	arm*b-*-linux*)
yann@402
    74
+		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
yann@402
    75
+		;;
yann@402
    76
+	esac
yann@402
    77
 	tmake_file="${tmake_file} arm/t-arm arm/t-linux"
yann@402
    78
 	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
yann@402
    79
 	gnu_ld=yes