patches/gcc/4.1.1/190-arm-bigendian.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Thu Oct 09 19:17:49 2008 +0000 (2008-10-09)
changeset 914 0b164a321177
parent 1 eeea35fbf182
permissions -rw-r--r--
Remove CT_BROKEN.
Only one component is actually BROKEN (libelf), make it depend on EXPERIMENTAL, but state BROKEN in the prompt.
ltrace (which depends on libelf) is now marked as EXPERIMENTAL, with the reference to the BROKEN libelf in the help entry.

/trunk/docs/overview.txt | 6 0 6 0 ------
/trunk/config/debug/ltrace.in | 7 4 3 0 ++++---
/trunk/config/global/ct-behave.in | 8 0 8 0 --------
/trunk/config/tools/libelf.in | 5 3 2 0 +++--
4 files changed, 7 insertions(+), 19 deletions(-)
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)