patches/gcc/3.4.6/220-arm-bigendian.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sun Jul 17 22:43:07 2011 +0200 (2011-07-17)
changeset 2893 a8a65758664f
parent 339 bd5e0a849352
permissions -rw-r--r--
cc/gcc: do not use the core pass-2 to build the baremetal compiler

In case we build a baremetal compiler, use the standard passes:
- core_cc is used to build the C library;
- as such, it is meant to run on build, not host;
- the final compiler is meant to run on host;

As the current final compiler step can not build a baremetal compiler,
call the core backend from the final step.

NB: Currently, newlib is built during the start_files pass, so we have
to have a core compiler by then... Once we can build the baremetal
compiler from the final cc step, then we can move the newlib build to
the proper step, and then get rid of the core pass-1 static compiler...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 diff -durN gcc-3.4.6.orig/gcc/config/arm/linux-elf.h gcc-3.4.6/gcc/config/arm/linux-elf.h
     2 --- gcc-3.4.6.orig/gcc/config/arm/linux-elf.h	2007-08-15 22:51:01.000000000 +0200
     3 +++ gcc-3.4.6/gcc/config/arm/linux-elf.h	2007-08-15 23:05:42.000000000 +0200
     4 @@ -30,17 +30,34 @@
     5  /* Do not assume anything about header files.  */
     6  #define NO_IMPLICIT_EXTERN_C
     7  
     8 +/*
     9 + * 'config.gcc' defines TARGET_BIG_ENDIAN_DEFAULT as 1 for arm*b-*
    10 + * (big endian) configurations.
    11 + */
    12 +#if TARGET_BIG_ENDIAN_DEFAULT
    13 +#define TARGET_ENDIAN_DEFAULT ARM_FLAG_BIG_END
    14 +#define TARGET_ENDIAN_OPTION "mbig-endian"
    15 +#define TARGET_LINKER_EMULATION "armelfb_linux"
    16 +#else
    17 +#define TARGET_ENDIAN_DEFAULT 0
    18 +#define TARGET_ENDIAN_OPTION "mlittle-endian"
    19 +#define TARGET_LINKER_EMULATION "armelf_linux"
    20 +#endif
    21 +
    22  /* Default is to use APCS-32 mode.  */
    23  #undef  TARGET_DEFAULT
    24 -#define TARGET_DEFAULT (ARM_FLAG_APCS_32 | ARM_FLAG_MMU_TRAPS)
    25 +#define TARGET_DEFAULT \
    26 +		( ARM_FLAG_APCS_32 | \
    27 +		  ARM_FLAG_MMU_TRAPS | \
    28 +		  TARGET_ENDIAN_DEFAULT )
    29  
    30  #define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
    31  
    32 -#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux -p"
    33 +#define SUBTARGET_EXTRA_LINK_SPEC " -m " TARGET_LINKER_EMULATION " -p"
    34  
    35  #undef  MULTILIB_DEFAULTS
    36  #define MULTILIB_DEFAULTS \
    37 -	{ "marm", "mlittle-endian", "mhard-float", "mapcs-32", "mno-thumb-interwork" }
    38 +	{ "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
    39  
    40  #define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
    41  
    42 @@ -94,7 +111,7 @@
    43     %{rdynamic:-export-dynamic} \
    44     %{!dynamic-linker:-dynamic-linker " ELF_DYNAMIC_LINKER "} \
    45     -X \
    46 -   %{mbig-endian:-EB}" \
    47 +   %{mbig-endian:-EB} %{mlittle-endian:-EL}" \
    48     SUBTARGET_EXTRA_LINK_SPEC
    49  
    50  #define TARGET_OS_CPP_BUILTINS() LINUX_TARGET_OS_CPP_BUILTINS()
    51 diff -durN gcc-3.4.6.orig/gcc/config.gcc gcc-3.4.6/gcc/config.gcc
    52 --- gcc-3.4.6.orig/gcc/config.gcc	2007-08-15 22:51:01.000000000 +0200
    53 +++ gcc-3.4.6/gcc/config.gcc	2007-08-15 23:05:42.000000000 +0200
    54 @@ -678,6 +678,11 @@
    55  	;;
    56  arm*-*-linux*)			# ARM GNU/Linux with ELF
    57  	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"
    58 +	case $target in
    59 +	arm*b-*)
    60 +		tm_defines="TARGET_BIG_ENDIAN_DEFAULT=1 $tm_defines"
    61 +		;;
    62 +	esac
    63  	tmake_file="t-slibgcc-elf-ver t-linux arm/t-linux"
    64  	extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
    65  	gnu_ld=yes