summaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-08 18:17:20 +0000
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2005-10-08 18:17:20 +0000
commit6783d878387d2474d8a694d0b0eb8f7257e15963 (patch)
tree9d6a64cda920ff265ef6281c9618ed7a6c15afe7 /gcc/config
parent0fc339a882e3c2095840b3eb7796c7f4aabe7783 (diff)
downloadgcc-6783d878387d2474d8a694d0b0eb8f7257e15963.tar.gz
/
* configure.in (arm-*-linux-gnueabi): Add to noconfigdirs target-libffi, target-qthreads, target-libjava, and targetlibobjc. * configure: Regenerate. gcc/ Merge from csl-arm-branch: 2005-09-07 Paul Brook <paul@codesourcery.com> * config/arm/linux-eabi.h (SUBTARGET_EXTRA_LINK_SPEC): Prepend a space to string. 2005-04-30 Paul Brook <paul@codesourcery.com> * config/arm/bpabi.h (TARGET_DEFAULT): Define. * config/arm/linux-eabi.h (SUBTARGET_CPU_DEFAULT): Define. 2005-03-07 Daniel Jacobowitz <dan@codesourcery.com> * config/arm/arm.c (arm_all_abis): Add aapcs-linux. (arm_override_options): Use TARGET_AAPCS_BASED. * config/arm/arm.h (enum arm_abi_type): Add ARM_ABI_AAPCS_LINUX. (PTRDIFF_TYPE): Use int for AAPCS. (DEFAULT_SHORT_ENUMS): Use false for aapcs-linux. * config/arm/linux-eabi.h (ARM_DEFAULT_ABI, WCHAR_TYPE): Define. (DEFAULT_SHORT_ENUMS): Delete. * doc/invoke.texi (ARM Options): Document -mabi=aapcs-linux. 2004-12-15 Daniel Jacobowitz <dan@codesourcery.com> * config/arm/arm.h (DEFAULT_SHORT_ENUMS): Wrap in #ifndef. * config/arm/linux-eabi.h (DEFAULT_SHORT_ENUMS): Define to 0. * config/arm/t-linux-eabi (TARGET_LIBGCC2_CFLAGS): Set to -fPIC. 2004-12-03 Mark Mitchell <mark@codesourcery.com> * config/arm/linux-eabi.h (LIBGCC_SPEC): Do not define. 2004-11-22 Mark Mitchell <mark@codesourcery.com> * config.gcc (arm*-*-linux-gnueabi): Use __cxa_atexit. 2004-11-19 Mark Mitchell <mark@codesourcery.com> * config.gcc (arm*-*-linux-gnueabi): Add it. * config/arm/bpabi.h (FPUTYPE_DEFAULT): Undefine it before redefining it. (TARGET_OS_CPP_BUILTINS): Likeiwse. * config/arm/linux-eabi.h: New file. * config/arm/linux-elf.h (LINUX_TARGET_INTERPRETER): New macro. (LINUX_TARET_LINK_SPEC): Likewise. (LINK_SPEC): Use it. * config/arm/t-linux-eabi: New file. libcpp/ * configure.ac: Require 64-bit int for arm*-*-*eabi*. * configure: Regenerate. libstdc++/ Merge from csl-arm-branch: 2004-12-15 Daniel Jacobowitz <dan@codesourcery.com> * libstdc++-v3/config/linker-map.gnu: Add ARM EABI symbols. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105121 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/arm/arm.c7
-rw-r--r--gcc/config/arm/arm.h7
-rw-r--r--gcc/config/arm/bpabi.h6
-rw-r--r--gcc/config/arm/linux-eabi.h70
-rw-r--r--gcc/config/arm/linux-elf.h10
-rw-r--r--gcc/config/arm/t-linux-eabi7
6 files changed, 100 insertions, 7 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 60acf36d1f1..dd976b0865c 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -673,7 +673,8 @@ static const struct abi_name arm_all_abis[] =
{"apcs-gnu", ARM_ABI_APCS},
{"atpcs", ARM_ABI_ATPCS},
{"aapcs", ARM_ABI_AAPCS},
- {"iwmmxt", ARM_ABI_IWMMXT}
+ {"iwmmxt", ARM_ABI_IWMMXT},
+ {"aapcs-linux", ARM_ABI_AAPCS_LINUX}
};
/* Return the number of bits set in VALUE. */
@@ -1194,7 +1195,7 @@ arm_override_options (void)
flag_schedule_insns = flag_schedule_insns_after_reload = 0;
/* Override the default structure alignment for AAPCS ABI. */
- if (arm_abi == ARM_ABI_AAPCS)
+ if (TARGET_AAPCS_BASED)
arm_structure_size_boundary = 8;
if (structure_size_string != NULL)
@@ -14527,7 +14528,7 @@ arm_promote_prototypes (tree t ATTRIBUTE_UNUSED)
static bool
arm_default_short_enums (void)
{
- return TARGET_AAPCS_BASED;
+ return TARGET_AAPCS_BASED && arm_abi != ARM_ABI_AAPCS_LINUX;
}
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 64b5e373d3c..ae13a9d92b1 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -279,7 +279,8 @@ enum arm_abi_type
ARM_ABI_APCS,
ARM_ABI_ATPCS,
ARM_ABI_AAPCS,
- ARM_ABI_IWMMXT
+ ARM_ABI_IWMMXT,
+ ARM_ABI_AAPCS_LINUX
};
extern enum arm_abi_type arm_abi;
@@ -501,6 +502,10 @@ extern int arm_structure_size_boundary;
#define SIZE_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long unsigned int")
#endif
+#ifndef PTRDIFF_TYPE
+#define PTRDIFF_TYPE (TARGET_AAPCS_BASED ? "int" : "long int")
+#endif
+
/* AAPCS requires that structure alignment is affected by bitfields. */
#ifndef PCC_BITFIELD_TYPE_MATTERS
#define PCC_BITFIELD_TYPE_MATTERS TARGET_AAPCS_BASED
diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h
index 7fb7d6a265b..ac5a0905cc5 100644
--- a/gcc/config/arm/bpabi.h
+++ b/gcc/config/arm/bpabi.h
@@ -30,8 +30,13 @@
#define TARGET_UNWIND_INFO 1
/* Section 4.1 of the AAPCS requires the use of VFP format. */
+#undef FPUTYPE_DEFAULT
#define FPUTYPE_DEFAULT FPUTYPE_VFP
+/* EABI targets should enable interworking by default. */
+#undef TARGET_DEFAULT
+#define TARGET_DEFAULT MASK_INTERWORK
+
/* The ARM BPABI functions return a boolean; they use no special
calling convention. */
#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) TARGET_BPABI
@@ -101,6 +106,7 @@
} \
while (false)
+#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS() \
TARGET_BPABI_CPP_BUILTINS()
diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
new file mode 100644
index 00000000000..62aa6dd10a1
--- /dev/null
+++ b/gcc/config/arm/linux-eabi.h
@@ -0,0 +1,70 @@
+/* Configuration file for ARM GNU/Linux EABI targets.
+ Copyright (C) 2004
+ Free Software Foundation, Inc.
+ Contributed by CodeSourcery, LLC
+
+ 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 2, 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 COPYING. If not, write to
+ the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+/* On EABI GNU/Linux, we want both the BPABI builtins and the
+ GNU/Linux builtins. */
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS() \
+ do \
+ { \
+ TARGET_BPABI_CPP_BUILTINS(); \
+ LINUX_TARGET_OS_CPP_BUILTINS(); \
+ } \
+ while (false)
+
+/* We default to a soft-float ABI so that binaries can run on all
+ target hardware. */
+#undef TARGET_DEFAULT_FLOAT_ABI
+#define TARGET_DEFAULT_FLOAT_ABI ARM_FLOAT_ABI_SOFT
+
+/* We default to the "aapcs-linux" ABI so that enums are int-sized by
+ default. */
+#undef ARM_DEFAULT_ABI
+#define ARM_DEFAULT_ABI ARM_ABI_AAPCS_LINUX
+
+/* Default to armv5t so that thumb shared libraries work.
+ The ARM10TDMI core is the default for armv5t, so set
+ SUBTARGET_CPU_DEFAULT to achieve this. */
+#undef SUBTARGET_CPU_DEFAULT
+#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
+
+#undef SUBTARGET_EXTRA_LINK_SPEC
+#define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
+
+/* Use ld-linux.so.3 so that it will be possible to run "classic"
+ GNU/Linux binaries on an EABI system. */
+#undef LINUX_TARGET_INTERPRETER
+#define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.3"
+
+/* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
+#undef LINK_SPEC
+#define LINK_SPEC LINUX_TARGET_LINK_SPEC
+
+/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
+ do not use -lfloat. */
+#undef LIBGCC_SPEC
+
+/* Use the AAPCS type for wchar_t, or the previous Linux default for
+ non-AAPCS. */
+#undef WCHAR_TYPE
+#define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long int")
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index 100632944d2..5429a13a97b 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -81,18 +81,22 @@
#define ENDFILE_SPEC \
"%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
-#undef LINK_SPEC
-#define LINK_SPEC "%{h*} %{version:-v} \
+#define LINUX_TARGET_INTERPRETER "/lib/ld-linux.so.2"
+
+#define LINUX_TARGET_LINK_SPEC "%{h*} %{version:-v} \
%{b} \
%{static:-Bstatic} \
%{shared:-shared} \
%{symbolic:-Bsymbolic} \
%{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2} \
+ %{!dynamic-linker:-dynamic-linker " LINUX_TARGET_INTERPRETER "} \
-X \
%{mbig-endian:-EB}" \
SUBTARGET_EXTRA_LINK_SPEC
+#undef LINK_SPEC
+#define LINK_SPEC LINUX_TARGET_LINK_SPEC
+
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
diff --git a/gcc/config/arm/t-linux-eabi b/gcc/config/arm/t-linux-eabi
new file mode 100644
index 00000000000..7cfee90f809
--- /dev/null
+++ b/gcc/config/arm/t-linux-eabi
@@ -0,0 +1,7 @@
+# These functions are included in shared libraries.
+TARGET_LIBGCC2_CFLAGS = -fPIC
+
+# We do not build a Thumb multilib for Linux because the definition of
+# CLEAR_INSN_CACHE in linux-gas.h does not work in Thumb mode.
+MULTILIB_OPTIONS =
+MULTILIB_DIRNAMES =