aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2008-09-01 23:20:34 +0000
committerPaul Brook <pbrook@gcc.gnu.org>2008-09-01 23:20:34 +0000
commit26272ba2c429064f8b39f38771d879fc913114cc (patch)
tree87869f482a0d41cc4b399dd2739ad40f6ee686c4
parent48c23a6c39fa4f75a9054921ad7ce2f12e99fdb0 (diff)
downloadgcc-26272ba2c429064f8b39f38771d879fc913114cc.zip
gcc-26272ba2c429064f8b39f38771d879fc913114cc.tar.gz
gcc-26272ba2c429064f8b39f38771d879fc913114cc.tar.bz2
arm.c (arm_override_options): Set arm_abi earlier.
2008-09-01 Paul Brook <paul@codesourcery.com> gcc/ * config/arm/arm.c (arm_override_options): Set arm_abi earlier. Allow Interworking on ARMv4 EABI based targets. * config/arm/bpabi.h (TARGET_FIX_V4BX_SPEC): Define. (SUBTARGET_EXTRA_ASM_SPEC, LINK_SPEC): Add TARGET_FIX_V4BX_SPEC. From-SVN: r139874
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/arm/arm.c36
-rw-r--r--gcc/config/arm/bpabi.h6
3 files changed, 30 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e271d88..d92bff6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2008-09-01 Paul Brook <paul@codesourcery.com>
+ * config/arm/arm.c (arm_override_options): Set arm_abi earlier.
+ Allow Interworking on ARMv4 EABI based targets.
+ * config/arm/bpabi.h (TARGET_FIX_V4BX_SPEC): Define.
+ (SUBTARGET_EXTRA_ASM_SPEC, LINK_SPEC): Add TARGET_FIX_V4BX_SPEC.
+
+2008-09-01 Paul Brook <paul@codesourcery.com>
+
* config/arm/thumb2.md (thumb2_negscc): Match the correct operand for
optimized LT0 test. Remove optimization for GT.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 68f2278..c6128ac 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -1186,12 +1186,30 @@ arm_override_options (void)
tune_flags = all_cores[(int)arm_tune].flags;
+ if (target_abi_name)
+ {
+ for (i = 0; i < ARRAY_SIZE (arm_all_abis); i++)
+ {
+ if (streq (arm_all_abis[i].name, target_abi_name))
+ {
+ arm_abi = arm_all_abis[i].abi_type;
+ break;
+ }
+ }
+ if (i == ARRAY_SIZE (arm_all_abis))
+ error ("invalid ABI option: -mabi=%s", target_abi_name);
+ }
+ else
+ arm_abi = ARM_DEFAULT_ABI;
+
/* Make sure that the processor choice does not conflict with any of the
other command line choices. */
if (TARGET_ARM && !(insn_flags & FL_NOTM))
error ("target CPU does not support ARM mode");
- if (TARGET_INTERWORK && !(insn_flags & FL_THUMB))
+ /* BPABI targets use linker tricks to allow interworking on cores
+ without thumb support. */
+ if (TARGET_INTERWORK && !((insn_flags & FL_THUMB) || TARGET_BPABI))
{
warning (0, "target CPU does not support interworking" );
target_flags &= ~MASK_INTERWORK;
@@ -1304,22 +1322,6 @@ arm_override_options (void)
if (arm_arch5)
target_flags &= ~MASK_INTERWORK;
- if (target_abi_name)
- {
- for (i = 0; i < ARRAY_SIZE (arm_all_abis); i++)
- {
- if (streq (arm_all_abis[i].name, target_abi_name))
- {
- arm_abi = arm_all_abis[i].abi_type;
- break;
- }
- }
- if (i == ARRAY_SIZE (arm_all_abis))
- error ("invalid ABI option: -mabi=%s", target_abi_name);
- }
- else
- arm_abi = ARM_DEFAULT_ABI;
-
if (TARGET_IWMMXT && !ARM_DOUBLEWORD_ALIGN)
error ("iwmmxt requires an AAPCS compatible ABI for proper operation");
diff --git a/gcc/config/arm/bpabi.h b/gcc/config/arm/bpabi.h
index e28d9ea..38be1da 100644
--- a/gcc/config/arm/bpabi.h
+++ b/gcc/config/arm/bpabi.h
@@ -51,9 +51,11 @@
/* The BPABI integer comparison routines return { -1, 0, 1 }. */
#define TARGET_LIB_INT_CMP_BIASED !TARGET_BPABI
+#define TARGET_FIX_V4BX_SPEC " %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4:--fix-v4bx}"
+
/* Tell the assembler to build BPABI binaries. */
#undef SUBTARGET_EXTRA_ASM_SPEC
-#define SUBTARGET_EXTRA_ASM_SPEC "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4}"
+#define SUBTARGET_EXTRA_ASM_SPEC "%{mabi=apcs-gnu|mabi=atpcs:-meabi=gnu;:-meabi=4}" TARGET_FIX_V4BX_SPEC
#ifndef SUBTARGET_EXTRA_LINK_SPEC
#define SUBTARGET_EXTRA_LINK_SPEC ""
@@ -63,7 +65,7 @@
#define BPABI_LINK_SPEC \
"%{mbig-endian:-EB} %{mlittle-endian:-EL} " \
"%{static:-Bstatic} %{shared:-shared} %{symbolic:-Bsymbolic} " \
- "-X" SUBTARGET_EXTRA_LINK_SPEC
+ "-X" SUBTARGET_EXTRA_LINK_SPEC TARGET_FIX_V4BX_SPEC
#undef LINK_SPEC
#define LINK_SPEC BPABI_LINK_SPEC