⛏️ index : buildtools.git

author François Revol <revol@free.fr> 2009-08-11 2:07:15.0 +00:00:00
committer François Revol <revol@free.fr> 2009-08-11 2:07:15.0 +00:00:00
commit
09a4a7d36cc94a8fd526b526fd87b3a2fc0ef9d5 [patch]
tree
a2679e671478e32d3bf2bb95695189b0d25bf9c6
parent
03890535ff1f191ddfc1bb43a70e424348c05a06
download
09a4a7d36cc94a8fd526b526fd87b3a2fc0ef9d5.tar.gz

[ARM] [GSoC] François Revol + Johannes Wischert: - add missing bits needed to use EABI by default (which should be == AAPCS == BPABI if I understood it right), - include t-bpabi and bpabi.h, - added an arm/t-haiku and arm/haiku.h to correct back some stuff after them as is done for linux, - add multilib variants for softfloat (for xscale) and softfp (AAPCS), - undo the LIBGCC_SPEC override for arm, it might have been the cause of multilib not working, not sure, - make armv6 default target. This allows building for both overo and verdex boards with some mods, though it emits calls to exception unwinding stuff that requires some more symbols (like abort), and should probably be fixed some other way.

git-svn-id: file:///srv/svn/repos/haiku/buildtools/trunk@32237 a95241bf-73f2-0310-859d-f6bbb57e9c96

Diff

 gcc/gcc/config.gcc         | 10 +++++++++-
 gcc/gcc/config/arm/haiku.h | 24 ++++++++++++++++++++++--
 gcc/gcc/config/arm/t-haiku | 21 +++++++++++++++++++++
 3 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/gcc/gcc/config.gcc b/gcc/gcc/config.gcc
index 6d2607a..2cfce66 100644
--- a/gcc/gcc/config.gcc
+++ b/gcc/gcc/config.gcc
@@ -734,8 +734,14 @@
	use_collect2=yes
	;;
arm*-*-haiku*)
	tmake_file="${tmake_file} t-haiku arm/t-arm arm/t-arm-elf"
	tm_file="dbxelf.h elfos.h haiku.h arm/elf.h arm/aout.h arm/haiku.h arm/arm.h"
	tmake_file="${tmake_file} t-haiku arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-haiku"
	tm_file="dbxelf.h elfos.h haiku.h arm/elf.h arm/bpabi.h arm/haiku.h"
	# The BPABI long long divmod functions return a 128-bit value in
	# registers r0-r3.  Correctly modeling that requires the use of
	# TImode.
	need_64bit_hwint=yes
	default_use_cxa_atexit=yes
	tm_file="${tm_file} arm/aout.h arm/arm.h"
	;;
arm*-*-linux*)			# ARM GNU/Linux with ELF
	tm_file="dbxelf.h elfos.h linux.h arm/elf.h arm/linux-gas.h arm/linux-elf.h"
diff --git a/gcc/gcc/config/arm/haiku.h b/gcc/gcc/config/arm/haiku.h
index 79a2683..df1d39b 100644
--- a/gcc/gcc/config/arm/haiku.h
+++ b/gcc/gcc/config/arm/haiku.h
@@ -29,18 +29,25 @@
#undef  TARGET_DEFAULT_FLOAT_ABI
#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT

#undef  TARGET_DEFAULT
#define TARGET_DEFAULT (0)
/* bpabi.h sets FPUTYPE_DEFAULT to VFP */
/* bpabi.h sets ARM_DEFAULT_ABI */

#undef  MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS \
  { "marm", "mlittle-endian", "msoft-float", "mno-thumb-interwork" }

/* Default is set by bpabi.h */
/*
#undef TARGET_DEFAULT
*/

#undef SUBTARGET_CPU_DEFAULT
#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm920t
#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6

/* Now we define the strings used to build the spec file.  */
/* interestingly, bpabi defines __GXX_TYPEINFO_EQUALITY_INLINE=0 too as we do. */

#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS()		\
  do									\
    {									\
@@ -55,11 +62,18 @@
         type_infos are not merged, so that they get compared by name \
         instead of by pointer. */ \
      builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
      builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0");\
      /*builtin_define ("__GXX_TYPEINFO_EQUALITY_INLINE=0"); done in bpabi: */\
      TARGET_BPABI_CPP_BUILTINS();					\
    }									\
  while (0)

/* Use the default LIBGCC_SPEC, not the empty version in haiku.h, as we
   do not use multilib (needed ??).  */
#undef LIBGCC_SPEC

/* If ELF is the default format, we should not use /lib/elf.  */

#undef	LINK_SPEC
#define LINK_SPEC "%{!o*:-o %b} -m armelf -shared -no-undefined -Bsymbolic %{nostart:-e 0}"
#define LINK_SPEC "%{!o*:-o %b} -m armelf -shared -no-undefined -Bsymbolic %{nostart:-e 0} \
  %{mbig-endian:-EB} %{mlittle-endian:-EL} -X" 

diff --git a/gcc/gcc/config/arm/t-haiku b/gcc/gcc/config/arm/t-haiku
new file mode 100644
index 0000000..3f7f488 100644
--- /dev/null
+++ b/gcc/gcc/config/arm/t-haiku
@@ -1,0 +1,21 @@
# build multilib for soft float and VFP 
# (unsure about how it should be done...)
# mix from t-symbian & t-wince-pe

#LIB1ASMSRC = arm/lib1funcs.asm
#LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX


#MULTILIB_OPTIONS    += mhard-float
#MULTILIB_DIRNAMES   += fpu

MULTILIB_OPTIONS    += msoft-float
MULTILIB_DIRNAMES   += fpu soft
MULTILIB_EXCEPTIONS += *mthumb/*mhard-float*

MULTILIB_OPTIONS    += mfloat-abi=softfp
MULTILIB_DIRNAMES   += softfp

#LIBGCC = stmp-multilib
#INSTALL_LIBGCC = install-multilib
#TARGET_LIBGCC2_CFLAGS =