patches/gcc/4.1.1/800-arm-bigendian.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Feb 17 22:08:06 2008 +0000 (2008-02-17)
changeset 431 8bde4c6ea47a
permissions -rw-r--r--
Robert P. J. DAY says:

apparently, the patchset for gcc 4.2.1 applies properly to the
source for gcc 4.2.2 and gcc 4.2.3. so, if you want, you can simply
add support for those last two just by augmenting menuconfig and
adding a couple symlinks for those two directories. seems like a
cheap way to add a couple new versions.
yann@1
     1
By Lennert Buytenhek <buytenh@wantstofly.org>
yann@1
     2
Adds support for arm*b-linux* big-endian ARM targets
yann@1
     3
yann@1
     4
See http://gcc.gnu.org/PR16350
yann@1
     5
yann@1
     6
--- gcc-4.1.0/gcc/config/arm/linux-elf.h
yann@1
     7
+++ gcc-4.1.0/gcc/config/arm/linux-elf.h
yann@1
     8
@@ -28,19 +28,33 @@
yann@1
     9
 #undef  TARGET_VERSION
yann@1
    10
 #define TARGET_VERSION  fputs (" (ARM GNU/Linux with ELF)", stderr);
yann@1
    11
 
yann@1
    12
+/*
yann@1
    13
+ * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
yann@1
    14
+ * (big endian) configurations.
yann@1
    15
+ */
yann@1
    16
+#if TARGET_BIG_ENDIAN_DEFAULT
yann@1
    17
+#define TARGET_ENDIAN_DEFAULT MASK_BIG_END
yann@1
    18
+#define TARGET_ENDIAN_OPTION "mbig-endian"
yann@1
    19
+#define TARGET_LINKER_EMULATION "armelfb_linux"
yann@1
    20
+#else
yann@1
    21
+#define TARGET_ENDIAN_DEFAULT 0
yann@1
    22
+#define TARGET_ENDIAN_OPTION "mlittle-endian"
yann@1
    23
+#define TARGET_LINKER_EMULATION "armelf_linux"
yann@1
    24
+#endif
yann@1
    25
+
yann@1
    26
 #undef  TARGET_DEFAULT_FLOAT_ABI
yann@1
    27
 #define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_HARD
yann@1
    28
 
yann@1
    29
 #undef  TARGET_DEFAULT
yann@1
    30
-#define TARGET_DEFAULT (0)
yann@1
    31
+#define TARGET_DEFAULT (TARGET_ENDIAN_DEFAULT)
yann@1
    32
 
yann@1
    33
 #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
yann@1
    34
 
yann@1
    35
-#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
yann@1
    36
+#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
yann@1
    37
 
yann@1
    38
 #undef  MULTILIB_DEFAULTS
yann@1
    39
 #define MULTILIB_DEFAULTS \
yann@1
    40
-	{ "marm", "mlittle-endian", "mhard-float", "mno-thumb-interwork" }
yann@1
    41
+	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mno-thumb-interwork" }
yann@1
    42
 
yann@1
    43
 /* Now we define the strings used to build the spec file.  */
yann@1
    44
 #undef  LIB_SPEC
yann@1
    45
@@ -61,7 +75,7 @@
yann@1
    46
    %{rdynamic:-export-dynamic} \
yann@1
    47
    %{!dynamic-linker:-dynamic-linker " LINUX_TARGET_INTERPRETER "} \
yann@1
    48
    -X \
yann@1
    49
-   %{mbig-endian:-EB}" \
yann@1
    50
+   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
yann@1
    51
    SUBTARGET_EXTRA_LINK_SPEC
yann@1
    52
 
yann@1
    53
 #undef  LINK_SPEC
yann@1
    54
--- gcc-4.1.0/gcc/config.gcc
yann@1
    55
+++ gcc-4.1.0/gcc/config.gcc
yann@1
    56
@@ -672,6 +672,11 @@
yann@1
    57
 	;;
yann@1
    58
 arm*-*-linux*)			# ARM GNU/Linux with ELF
yann@1
    59
 	tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h" 
yann@1
    60
+	case $target in
yann@1
    61
+	arm*b-*)
yann@1
    62
+		tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1"
yann@1
    63
+		;;
yann@1
    64
+	esac
yann@1
    65
 	tmake_file="${tmake_file} t-linux arm/t-arm"
yann@1
    66
 	case ${target} in
yann@1
    67
 	arm*-*-linux-gnueabi)