[llvm] 4adcff0 - [ARM] Fix llvm-objdump disassembly of armv7m object files.

Eli Friedman via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 28 11:43:40 PDT 2021


Author: Eli Friedman
Date: 2021-07-28T11:41:54-07:00
New Revision: 4adcff0b7004dc3c81fb8b1104044a188db8aa89

URL: https://github.com/llvm/llvm-project/commit/4adcff0b7004dc3c81fb8b1104044a188db8aa89
DIFF: https://github.com/llvm/llvm-project/commit/4adcff0b7004dc3c81fb8b1104044a188db8aa89.diff

LOG: [ARM] Fix llvm-objdump disassembly of armv7m object files.

Apparently, the features were getting mixed up, so we'd try to
disassemble in ARM mode. Fix sub-architecture detection to compute the
correct triple if we're detecting it automatically, so the user doesn't
need to pass --triple=thumb etc.

It's possible we should be somehow tying the "+thumb-mode" target
feature more directly to Tag_CPU_arch_profile? But this seems to work
reasonably well, anyway.

While I'm here, fix up the other llvm-objdump tests that were explicitly
specifying an ARM triple; that shouldn't be necessary.

Differential Revision: https://reviews.llvm.org/D106912

Added: 
    

Modified: 
    llvm/lib/Object/ELFObjectFile.cpp
    llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s
    llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp
index 6613d79ab3d03..9efb28c6da2b3 100644
--- a/llvm/lib/Object/ELFObjectFile.cpp
+++ b/llvm/lib/Object/ELFObjectFile.cpp
@@ -538,9 +538,16 @@ void ELFObjectFileBase::setARMSubArch(Triple &TheTriple) const {
     case ARMBuildAttrs::v6K:
       Triple += "v6k";
       break;
-    case ARMBuildAttrs::v7:
-      Triple += "v7";
+    case ARMBuildAttrs::v7: {
+      Optional<unsigned> ArchProfileAttr =
+          Attributes.getAttributeValue(ARMBuildAttrs::CPU_arch_profile);
+      if (ArchProfileAttr.hasValue() &&
+          ArchProfileAttr.getValue() == ARMBuildAttrs::MicroControllerProfile)
+        Triple += "v7m";
+      else
+        Triple += "v7";
       break;
+    }
     case ARMBuildAttrs::v6_M:
       Triple += "v6m";
       break;

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s
index 9013e189ec60b..6f2e6c5c58492 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5t-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv5t-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv5t-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv5t
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s
index 3ccfed21fd5c5..59d14f15ad11d 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5te-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv5te-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv5te-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv5te
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s
index 32b3f8280521b..747551998f123 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v5tej-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv5tej-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv5tej-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 bxj:
 bxj r0

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s
index db262a35803cd..a883428bdbb87 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-neg-subfeatures.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_FP_arch, 1 // VFP2
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s
index 8297c10f8dbc2..22fc37e91fe92 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv6
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s
index a00f5dc22f92e..4ddbcabf19bfb 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6-subfeatures.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6 -mattr=+vfp2 -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_FP_arch, 2 // VFP2
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s
index 09241bd5be53d..dea7060b32148 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6k-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6k-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6k-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv6k
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s
index d09badfce457a..2bf40f88caccd 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6m-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6m-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6m-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv6m
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s
index 748b63258038c..c888bc8b3216a 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v6t2-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv6t2-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv6t2-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv6t2
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s
index 37226b671d885..ffd9461cea188 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-neg-subfeature.s
@@ -1,5 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
-@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s --check-prefix=CHECK-THUMB
+@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm,+hwdiv -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_FP_arch, 0 // disallow vfp
 
@@ -15,6 +14,7 @@ vfp3:
 
 @CHECK-LABEL: vfp3
 @CHECK-NOT: 00 0a b6 ee vmov.f32 s0, #5.000000e-01
+ at CHECK: unknown
 
 neon:
   vmla.f32 d0, d1, d2
@@ -28,6 +28,7 @@ fp16:
 
 @CHECK-LABEL: fp16
 @CHECK-NOT: 02 07 b6 f3  vcvt.f32.f16 q0, d2
+ at CHECK: unknown
 
 div_arm:
   udiv r0, r1, r2
@@ -41,4 +42,5 @@ div_thumb:
   udiv r0, r1, r2
 
 @CHECK-LABEL: div_thumb
- at CHECK-THUMB-NOT: b1 fb f2 f0 udiv r0, r1, r2
+ at CHECK-NOT: b1 fb f2 f0 udiv r0, r1, r2
+ at CHECK: unknown

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s
index be29cd83f1110..20f9e3daaa504 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7a-subfeature.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7a -mattr=+vfp3,+neon,+fp16,+hwdiv-arm -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_FP_arch, 3 // VFP3
 .eabi_attribute Tag_Advanced_SIMD_arch, 2 // SIMDv1 with fp16

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s
index 03388362d935f..321bef5e0ce2c 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-neg-subfeatures.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_CPU_arch, 10 // v7
 .eabi_attribute Tag_FP_arch, 0 // VFP4

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s
index 3635cb6ca1fff..c12623460cc1f 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv7m-elf -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7m-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv7m
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s
index e27158301b4f4..e8b45d7e16640 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v7m-subfeatures.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump --triple=thumb -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv7m -mattr=+vfp4 -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_CPU_arch, 10 // v7
 .eabi_attribute Tag_CPU_arch_profile, 0x4D // 'M' profile

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s
index d62c7dc97ccb1..3f145aef6c23a 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v8a-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv8a-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv8a-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .arch armv8a
 

diff  --git a/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s b/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s
index a969a14c25cff..0bae7c1c0b224 100644
--- a/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s
+++ b/llvm/test/tools/llvm-objdump/ELF/ARM/v8r-subarch.s
@@ -1,4 +1,4 @@
-@ RUN: llvm-mc < %s -triple armv8r-elf -filetype=obj | llvm-objdump --triple=arm -d - | FileCheck %s
+@ RUN: llvm-mc < %s -triple armv8r-elf -filetype=obj | llvm-objdump -d - | FileCheck %s
 
 .eabi_attribute Tag_CPU_arch, 15 // v8_R
 .eabi_attribute Tag_CPU_arch_profile, 0x52 // 'R' profile


        


More information about the llvm-commits mailing list