From 8abc1906c0af753560cc0233b0c1d112826396fc Mon Sep 17 00:00:00 2001 From: Doug Kwan Date: Mon, 14 Jul 2008 21:01:42 +0000 Subject: [PATCH] config.gcc (arm*-*-eabi*): Include arm/eabi.h and use additional option file arm/eabi.opt. 2008-07-14 Doug Kwan * config.gcc (arm*-*-eabi*): Include arm/eabi.h and use additional option file arm/eabi.opt. * config/arm/eabi.h (File): New configuration file for EABI targets. * config/arm/elf.h (SUBTARGET_EXTRA_SPECS): Add SUBSUBTARGET_EXTRA_SPECS. (SUBSUBTARGET_EXTRA_SPECS): Provide empty default. * config/arm/unknown-elf.h (UNKNOWN_ELF_STARTFILE_SPEC): Renamed from STARTFILE_SPEC so that it can be referenced in an override. (STARTFILE_SPEC): Use UNKNOWN_ELF_STARTFILE_SPEC. (UNKNOWN_ELF_ENDFILE_SPEC): Renamed from ENDFILE_SPEC so that it can be referenced in an override. (ENDFILE_SPEC): Use UNKNOWN_ELF_ENDFILE_SPEC. * config/arm/bpabi.h (BPABI_LINK_SPEC): Renamed from LINK_SPEC so that it can be referenced in an override. (LINK_SPEC): Use BPABI_LINK_SPEC. * config/arm/eabi.opt (File): New. From-SVN: r137798 --- gcc/ChangeLog | 19 ++++++ gcc/config.gcc | 2 + gcc/config/arm/bpabi.h | 7 +- gcc/config/arm/eabi.h | 125 +++++++++++++++++++++++++++++++++++ gcc/config/arm/eabi.opt | 23 +++++++ gcc/config/arm/elf.h | 6 +- gcc/config/arm/unknown-elf.h | 8 ++- 7 files changed, 185 insertions(+), 5 deletions(-) create mode 100644 gcc/config/arm/eabi.h create mode 100644 gcc/config/arm/eabi.opt diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f66677f849b..1918d36563b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,22 @@ +2008-07-14 Doug Kwan + + * config.gcc (arm*-*-eabi*): Include arm/eabi.h and use + additional option file arm/eabi.opt. + * config/arm/eabi.h (File): New configuration file for EABI targets. + * config/arm/elf.h (SUBTARGET_EXTRA_SPECS): Add + SUBSUBTARGET_EXTRA_SPECS. + (SUBSUBTARGET_EXTRA_SPECS): Provide empty default. + * config/arm/unknown-elf.h (UNKNOWN_ELF_STARTFILE_SPEC): Renamed + from STARTFILE_SPEC so that it can be referenced in an override. + (STARTFILE_SPEC): Use UNKNOWN_ELF_STARTFILE_SPEC. + (UNKNOWN_ELF_ENDFILE_SPEC): Renamed from ENDFILE_SPEC so that it + can be referenced in an override. + (ENDFILE_SPEC): Use UNKNOWN_ELF_ENDFILE_SPEC. + * config/arm/bpabi.h (BPABI_LINK_SPEC): Renamed from LINK_SPEC + so that it can be referenced in an override. + (LINK_SPEC): Use BPABI_LINK_SPEC. + * config/arm/eabi.opt (File): New. + 2008-07-14 Ralf Wildenhues * Makefile.in (TARGET_DEF_H): Add targhooks.h. diff --git a/gcc/config.gcc b/gcc/config.gcc index 1f7f65361f5..5cd17073380 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -763,7 +763,9 @@ arm*-*-eabi* | arm*-*-symbianelf* ) tmake_file="arm/t-arm arm/t-arm-elf" case ${target} in arm*-*-eabi*) + tm_file="$tm_file arm/eabi.h" tmake_file="${tmake_file} arm/t-bpabi" + extra_options="${extra_options} arm/eabi.opt" ;; arm*-*-symbianelf*) tm_file="${tm_file} arm/symbian.h" diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h index 876e23404ab..e28d9ead45e 100644 --- a/gcc/config/arm/bpabi.h +++ b/gcc/config/arm/bpabi.h @@ -60,11 +60,14 @@ #endif /* The generic link spec in elf.h does not support shared libraries. */ -#undef LINK_SPEC -#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \ +#define BPABI_LINK_SPEC \ + "%{mbig-endian:-EB} %{mlittle-endian:-EL} " \ "%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \ "-X" SUBTARGET_EXTRA_LINK_SPEC +#undef LINK_SPEC +#define LINK_SPEC BPABI_LINK_SPEC + #if defined (__thumb__) #define RENAME_LIBRARY_SET ".thumb_set" #else diff --git a/gcc/config/arm/eabi.h b/gcc/config/arm/eabi.h new file mode 100644 index 00000000000..c7d1d3ed20c --- /dev/null +++ b/gcc/config/arm/eabi.h @@ -0,0 +1,125 @@ +/* Configuration file for ARM EABI targets. + Copyright (C) 2008 + Free Software Foundation, Inc. + Contributed by Doug Kwan (dougkwan@google.com) + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING3. If not see + . */ + +/* This file contains macro overrides for EABI targets. */ + +#undef TARGET_OS_CPP_BUILTINS +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + TARGET_BPABI_CPP_BUILTINS (); \ + if (TARGET_ANDROID) \ + builtin_define ("__ANDROID__"); \ + } \ + while (false) + +#undef SUBSUBTARGET_EXTRA_SPECS +#define SUBSUBTARGET_EXTRA_SPECS \ + { "link_android", ANDROID_LINK_SPEC }, \ + { "link_default", BPABI_LINK_SPEC }, \ + { "cc1_android", ANDROID_CC1_SPEC }, \ + { "cc1_default", CC1_DEFAULT_SPEC }, \ + { "cc1plus_android", ANDROID_CC1PLUS_SPEC }, \ + { "cc1plus_default", CC1PLUS_DEFAULT_SPEC }, \ + { "lib_android", ANDROID_LIB_SPEC }, \ + { "lib_default", LIB_DEFAULT_SPEC }, \ + { "startfile_android", ANDROID_STARTFILE_SPEC }, \ + { "startfile_default", UNKNOWN_ELF_STARTFILE_SPEC }, \ + { "endfile_android", ANDROID_ENDFILE_SPEC }, \ + { "endfile_default", UNKNOWN_ELF_ENDFILE_SPEC }, \ + +#undef ANDROID_LINK_SPEC +#define ANDROID_LINK_SPEC \ +"%{mbig-endian:-EB} %{mlittle-endian:-EL} " \ +"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \ +"%{!static:" \ + "%{shared: -Bsymbolic} " \ + "%{!shared:" \ + "%{rdynamic:-export-dynamic} " \ + "%{!dynamic-linker:-dynamic-linker /system/bin/linker}}} " \ +"-X" SUBTARGET_EXTRA_LINK_SPEC + +/* Override LINK_SPEC in bpabi.h. */ +#undef LINK_SPEC +#define LINK_SPEC \ +"%{mandroid: %(link_android) ;" \ +" : %(link_default)}" + +/* Android uses -fno-exceptions by default. */ +#undef ANDROID_CC1_SPEC +#define ANDROID_CC1_SPEC "%{!fexceptions:-fno-exceptions}" + +/* Default CC1_SPEC as in arm.h. */ +#undef CC1_DEFAULT_SPEC +#define CC1_DEFAULT_SPEC "" + +#undef CC1_SPEC +#define CC1_SPEC \ +"%{mandroid: %(cc1_android) ;" \ +" : %(cc1_default)}" + +/* Android uses -fno-rtti by default. */ +#undef ANDROID_CC1PLUS_SPEC +#define ANDROID_CC1PLUS_SPEC "%{!frtti:-fno-rtti}" + +/* Default CC1PLUS_SPEC as in gcc.c. */ +#undef CC1PLUS_DEFAULT_SPEC +#define CC1PLUS_DEFAULT_SPEC "" + +#undef CC1PLUS_SPEC +#define CC1PLUS_SPEC \ +"%{mandroid: %(cc1plus_android) ;" \ +" : %(cc1plus_default)}" + +#undef ANDROID_LIB_SPEC +#define ANDROID_LIB_SPEC "-lc %{!static:-ldl}" + +/* Default LIB_SPEC as in gcc.c. */ +#undef LIB_DEFAULT_SPEC +#define LIB_DEFAULT_SPEC \ +"%{!shared:%{g*:-lg} %{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}" + +#undef LIB_SPEC +#define LIB_SPEC \ +"%{mandroid: %(lib_android) ;" \ +" : %(lib_default)}" + +#undef ANDROID_STARTFILE_SPEC +#define ANDROID_STARTFILE_SPEC \ +"%{!shared:" \ + "%{static: crtbegin_static%O%s ;" \ + " : crtbegin_dynamic%O%s}}" + +/* Override STARTFILE_SPEC in unknown-elf.h. */ +#undef STARTFILE_SPEC +#define STARTFILE_SPEC \ +"%{mandroid: %(startfile_android) ;" \ +" : %(startfile_default)}" + +#undef ANDROID_ENDFILE_SPEC +#define ANDROID_ENDFILE_SPEC "%{!shared:crtend_android%O%s}" + +/* Override ENDFILE_SPEC in unknown-elf.h. */ +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ +"%{mandroid: %(endfile_android) ;" \ +" : %(endfile_default)}" + diff --git a/gcc/config/arm/eabi.opt b/gcc/config/arm/eabi.opt new file mode 100644 index 00000000000..2cda98d56d1 --- /dev/null +++ b/gcc/config/arm/eabi.opt @@ -0,0 +1,23 @@ +; EABI specific options for ARM port of the compiler. + +; Copyright (C) 2008 Free Software Foundation, Inc. +; +; This file is part of GCC. +; +; GCC is free software; you can redistribute it and/or modify it under +; the terms of the GNU General Public License as published by the Free +; Software Foundation; either version 3, or (at your option) any later +; version. +; +; GCC is distributed in the hope that it will be useful, but WITHOUT ANY +; WARRANTY; without even the implied warranty of MERCHANTABILITY or +; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +; for more details. +; +; You should have received a copy of the GNU General Public License +; along with GCC; see the file COPYING3. If not see +; . + +mandroid +Target Report RejectNegative Mask(ANDROID) +Generate code for the Android operating system. diff --git a/gcc/config/arm/elf.h b/gcc/config/arm/elf.h index 37c366d5ac8..7c3eddbe058 100644 --- a/gcc/config/arm/elf.h +++ b/gcc/config/arm/elf.h @@ -36,7 +36,8 @@ #ifndef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ { "subtarget_extra_asm_spec", SUBTARGET_EXTRA_ASM_SPEC }, \ - { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC }, + { "subtarget_asm_float_spec", SUBTARGET_ASM_FLOAT_SPEC }, \ + SUBSUBTARGET_EXTRA_SPECS #endif #ifndef SUBTARGET_EXTRA_ASM_SPEC @@ -48,6 +49,9 @@ %{mapcs-float:-mfloat}" #endif +#undef SUBSUBTARGET_EXTRA_SPECS +#define SUBSUBTARGET_EXTRA_SPECS + #ifndef ASM_SPEC #define ASM_SPEC "\ %{mbig-endian:-EB} \ diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h index 38b791d12b1..331e40a1ece 100644 --- a/gcc/config/arm/unknown-elf.h +++ b/gcc/config/arm/unknown-elf.h @@ -33,11 +33,15 @@ #endif /* Now we define the strings used to build the spec file. */ +#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s" + #undef STARTFILE_SPEC -#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s" +#define STARTFILE_SPEC UNKNOWN_ELF_STARTFILE_SPEC + +#define UNKNOWN_ELF_ENDFILE_SPEC "crtend%O%s crtn%O%s" #undef ENDFILE_SPEC -#define ENDFILE_SPEC "crtend%O%s crtn%O%s" +#define ENDFILE_SPEC UNKNOWN_ELF_ENDFILE_SPEC /* The __USES_INITFINI__ define is tested in newlib/libc/sys/arm/crt0.S to see if it needs to invoked _init() and _fini(). */ -- 2.30.2