[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