PR gas/12198
authorMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Mon, 15 Nov 2010 10:03:05 +0000 (10:03 +0000)
committerMatthew Gretton-Dann <matthew.gretton-dann@arm.com>
Mon, 15 Nov 2010 10:03:05 +0000 (10:03 +0000)
* gas/config/tc-arm.c (arm_arch_v6m_only): New variable.
(aeabi_set_public_attributes): Ensure we only set the Operating System
Extension when we are on an M-profile core.
* gas/testsuite/gas/arm/pr12198-1.d: New test.
* gas/testsuite/gas/arm/pr12918-1.s: Likewise.
* gas/testsuite/gas/arm/pr12198-2.d: Likewise.
* gas/testsuite/gas/arm/pr12918-2.s: Likewise.
* include/opcode/arm.h (ARM_AEXT_V6M_ONLY): New define.
(ARM_AEXT_V6M): Rewrite in terms of ARM_AEXT_V6M_ONLY.
(ARM_ARCH_V6M_ONLY): New define.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/pr12198-1.d [new file with mode: 0644]
gas/testsuite/gas/arm/pr12198-1.s [new file with mode: 0644]
gas/testsuite/gas/arm/pr12198-2.d [new file with mode: 0644]
gas/testsuite/gas/arm/pr12198-2.s [new file with mode: 0644]
include/opcode/ChangeLog
include/opcode/arm.h

index 784d84d..455a591 100644 (file)
@@ -1,3 +1,10 @@
+2010-11-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       PR gas/12198
+       * config/tc-arm.c (arm_arch_v6m_only): New variable.
+       (aeabi_set_public_attributes): Ensure we only set the Operating System
+       Extension when we are on an M-profile core.
+
 2010-11-13  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * config/tc-mips.c (macro_build): Remove gas_assert from 'o' case.
index 9a87342..f4ebdc4 100644 (file)
@@ -207,6 +207,7 @@ static const arm_feature_set arm_arch_any = ARM_ANY;
 static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1);
 static const arm_feature_set arm_arch_t2 = ARM_ARCH_THUMB2;
 static const arm_feature_set arm_arch_none = ARM_ARCH_NONE;
+static const arm_feature_set arm_arch_v6m_only = ARM_ARCH_V6M_ONLY;
 
 static const arm_feature_set arm_cext_iwmmxt2 =
   ARM_FEATURE (0, ARM_CEXT_IWMMXT2);
@@ -23232,6 +23233,12 @@ aeabi_set_public_attributes (void)
       ARM_MERGE_FEATURE_SETS (flags, flags, *object_arch);
     }
 
+  /* We need to make sure that the attributes do not identify us as v6S-M
+     when the only v6S-M feature in use is the Operating System Extensions.  */
+  if (ARM_CPU_HAS_FEATURE (flags, arm_ext_os))
+      if (!ARM_CPU_HAS_FEATURE (flags, arm_arch_v6m_only))
+        ARM_CLEAR_FEATURE (flags, flags, arm_ext_os);
+
   tmp = flags;
   arch = 0;
   for (p = cpu_arch_ver; p->val; p++)
index b2f09dc..594a5c9 100644 (file)
@@ -1,3 +1,11 @@
+2010-11-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       PR gas/12198
+       * gas/arm/pr12198-1.d: New test.
+       * gas/arm/pr12918-1.s: Likewise.
+       * gas/arm/pr12198-2.d: Likewise.
+       * gas/arm/pr12918-2.s: Likewise.
+
 2010-11-13  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * gas/mips/elf-rel28.s, gas/mips/elf-rel28-n32.d,
diff --git a/gas/testsuite/gas/arm/pr12198-1.d b/gas/testsuite/gas/arm/pr12198-1.d
new file mode 100644 (file)
index 0000000..c5f7718
--- /dev/null
@@ -0,0 +1,12 @@
+# name: PR12198 - Only select v6S-M when v6-M is selected (1)
+# source: pr12198-1.s
+# as:
+# readelf: -A
+# This test is only valid on EABI based ports.
+# target: *-*-*eabi
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_arch: v4T
+  Tag_THUMB_ISA_use: Thumb-1
+  Tag_DIV_use: Not allowed
diff --git a/gas/testsuite/gas/arm/pr12198-1.s b/gas/testsuite/gas/arm/pr12198-1.s
new file mode 100644 (file)
index 0000000..15c8805
--- /dev/null
@@ -0,0 +1,7 @@
+        .thumb
+        .global f
+        .type f, %function
+f:
+        svc 0xab
+        bx lr 
+
diff --git a/gas/testsuite/gas/arm/pr12198-2.d b/gas/testsuite/gas/arm/pr12198-2.d
new file mode 100644 (file)
index 0000000..39465c8
--- /dev/null
@@ -0,0 +1,13 @@
+# name: PR12198 - Only select v6S-M when v6-M is selected (2)
+# source: pr12198-2.s
+# as:
+# readelf: -A
+# This test is only valid on EABI based ports.
+# target: *-*-*eabi
+
+Attribute Section: aeabi
+File Attributes
+  Tag_CPU_arch: v6S-M
+  Tag_CPU_arch_profile: Microcontroller
+  Tag_THUMB_ISA_use: Thumb-1
+  Tag_DIV_use: Not allowed
diff --git a/gas/testsuite/gas/arm/pr12198-2.s b/gas/testsuite/gas/arm/pr12198-2.s
new file mode 100644 (file)
index 0000000..711cc7e
--- /dev/null
@@ -0,0 +1,8 @@
+        .thumb
+        .global f
+        .type f, %function
+f:
+        svc 0xab
+        dsb
+        bx lr 
+
index fa689e5..197220d 100644 (file)
@@ -1,3 +1,10 @@
+2010-11-15  Matthew Gretton-Dann  <matthew.gretton-dann@arm.com>
+
+       PR gas/12198
+       * arm.h (ARM_AEXT_V6M_ONLY): New define.
+       (ARM_AEXT_V6M): Rewrite in terms of ARM_AEXT_V6M_ONLY.
+       (ARM_ARCH_V6M_ONLY): New define.
+
 2010-11-11  Mingming Sun  <mingm.sun@gmail.com>
 
        * mips.h (INSN_LOONGSON_3A): Defined.
index 0bfd302..50bc726 100644 (file)
 #define ARM_AEXT_NOTM \
   (ARM_AEXT_V4 | ARM_EXT_V5ExP | ARM_EXT_V5J | ARM_EXT_V6_NOTM \
    | ARM_EXT_V6_DSP )
+#define ARM_AEXT_V6M_ONLY \
+  ((ARM_EXT_BARRIER | ARM_EXT_V6M | ARM_EXT_THUMB_MSR) & ~(ARM_AEXT_NOTM))
 #define ARM_AEXT_V6M \
-  ((ARM_AEXT_V6K | ARM_EXT_BARRIER | ARM_EXT_V6M | ARM_EXT_THUMB_MSR) \
-   & ~(ARM_AEXT_NOTM))
+  ((ARM_AEXT_V6K | ARM_AEXT_V6M_ONLY) & ~(ARM_AEXT_NOTM))
 #define ARM_AEXT_V6SM (ARM_AEXT_V6M | ARM_EXT_OS)
 #define ARM_AEXT_V7M \
   ((ARM_AEXT_V7_ARM | ARM_EXT_V6M | ARM_EXT_V7M | ARM_EXT_DIV) \
                        ARM_FEATURE (ARM_AEXT_V7A | ARM_EXT_MP | ARM_EXT_SEC \
                                     | ARM_EXT_DIV | ARM_EXT_ADIV \
                                     | ARM_EXT_VIRT, 0)
+/* Features that are present in v6M and v6S-M but not other v6 cores.  */
+#define ARM_ARCH_V6M_ONLY ARM_FEATURE (ARM_AEXT_V6M_ONLY, 0)
 
 /* There are too many feature bits to fit in a single word, so use a
    structure.  For simplicity we put all core features in one word and