summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-09-08 22:36:13 +0000
committerPaul Brook <paul@codesourcery.com>2006-09-08 22:36:13 +0000
commit27a32a5452d229d0f2bfdb20a73440fdbccec3dd (patch)
tree47ef65b4f8cb113bc1fe2b1594994586d447da06
parent67724b5b7bf1a23140869b2dd857d5bd73ead1d4 (diff)
downloadbinutils-gdb-27a32a5452d229d0f2bfdb20a73440fdbccec3dd.tar.gz
2006-09-08 Paul Brook <paul@codesourcery.com>
gas/ * config/tc-arm.c (object_arch): New variable. (s_arm_object_arch): New function. (md_pseudo_table): Add object_arch. (aeabi_set_public_attributes): Obey object_arch. * doc/c-arm.texi: Document .object_arch.
-rw-r--r--ChangeLog.csl9
-rw-r--r--gas/config/tc-arm.c42
-rw-r--r--gas/doc/c-arm.texi6
3 files changed, 56 insertions, 1 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 134cd984344..c3c13d905a5 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,12 @@
+2006-09-08 Paul Brook <paul@codesourcery.com>
+
+ gas/
+ * config/tc-arm.c (object_arch): New variable.
+ (s_arm_object_arch): New function.
+ (md_pseudo_table): Add object_arch.
+ (aeabi_set_public_attributes): Obey object_arch.
+ * doc/c-arm.texi: Document .object_arch.
+
2006-09-08 Kazu Hirata <kazu@codesourcery.com>
gas/testsuite/
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 842e72c4878..82492f9d36b 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -161,6 +161,7 @@ static const arm_feature_set *mcpu_fpu_opt = NULL;
static const arm_feature_set *march_cpu_opt = NULL;
static const arm_feature_set *march_fpu_opt = NULL;
static const arm_feature_set *mfpu_opt = NULL;
+static const arm_feature_set *object_arch = NULL;
/* Constants for known architecture features. */
static const arm_feature_set fpu_default = FPU_DEFAULT;
@@ -3880,6 +3881,7 @@ bad:
}
static void s_arm_arch (int);
+static void s_arm_object_arch (int);
static void s_arm_cpu (int);
static void s_arm_fpu (int);
#endif /* OBJ_ELF */
@@ -3928,6 +3930,7 @@ const pseudo_typeS md_pseudo_table[] =
{ "unwind_raw", s_arm_unwind_raw, 0 },
{ "cpu", s_arm_cpu, 0 },
{ "arch", s_arm_arch, 0 },
+ { "object_arch", s_arm_object_arch, 0 },
{ "fpu", s_arm_fpu, 0 },
{ "eabi_attribute", s_arm_eabi_attribute, 0 },
#else
@@ -19938,7 +19941,13 @@ aeabi_set_public_attributes (void)
ARM_MERGE_FEATURE_SETS (flags, arm_arch_used, thumb_arch_used);
ARM_MERGE_FEATURE_SETS (flags, flags, *mfpu_opt);
ARM_MERGE_FEATURE_SETS (flags, flags, selected_cpu);
-
+ /*Allow the user to override the reported architecture. */
+ if (object_arch)
+ {
+ ARM_CLEAR_FEATURE (flags, flags, arm_arch_any);
+ ARM_MERGE_FEATURE_SETS (flags, flags, *object_arch);
+ }
+
tmp = flags;
arch = 0;
for (p = cpu_arch_ver; p->val; p++)
@@ -20101,6 +20110,37 @@ s_arm_arch (int ignored ATTRIBUTE_UNUSED)
}
+/* Parse a .object_arch directive. */
+
+static void
+s_arm_object_arch (int ignored ATTRIBUTE_UNUSED)
+{
+ const struct arm_arch_option_table *opt;
+ char saved_char;
+ char *name;
+
+ name = input_line_pointer;
+ while (*input_line_pointer && !ISSPACE(*input_line_pointer))
+ input_line_pointer++;
+ saved_char = *input_line_pointer;
+ *input_line_pointer = 0;
+
+ /* Skip the first "all" entry. */
+ for (opt = arm_archs + 1; opt->name != NULL; opt++)
+ if (streq (opt->name, name))
+ {
+ object_arch = &opt->value;
+ *input_line_pointer = saved_char;
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ as_bad (_("unknown architecture `%s'\n"), name);
+ *input_line_pointer = saved_char;
+ ignore_rest_of_line ();
+}
+
+
/* Parse a .fpu directive. */
static void
diff --git a/gas/doc/c-arm.texi b/gas/doc/c-arm.texi
index e2f1ce4b228..bb0103ad1fa 100644
--- a/gas/doc/c-arm.texi
+++ b/gas/doc/c-arm.texi
@@ -612,6 +612,12 @@ for the @option{-mcpu} commandline option.
Select the target architecture. Valid values for @var{name} are the same as
for the @option{-march} commandline option.
+@cindex @code{.object_arch} directive, ARM
+@item .object_arch @var{name}
+Override the architecture recorded in the EABI object attribute section.
+Valid values for @var{name} are the same as for the @code{.arch} directive.
+Typically this is useful when code uses runtime detection of CPU features.
+
@cindex @code{.fpu} directive, ARM
@item .fpu @var{name}
Select the floating point unit to assemble for. Valid values for @var{name}