[lld] 949bb7e - Revert "[ELFAttributeParser] Skip unknown vendor subsections."

Simon Tatham via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 27 06:22:35 PDT 2023


Author: Simon Tatham
Date: 2023-06-27T14:22:09+01:00
New Revision: 949bb7e4de62cd07c1ed026574afd58ead565d3e

URL: https://github.com/llvm/llvm-project/commit/949bb7e4de62cd07c1ed026574afd58ead565d3e
DIFF: https://github.com/llvm/llvm-project/commit/949bb7e4de62cd07c1ed026574afd58ead565d3e.diff

LOG: Revert "[ELFAttributeParser] Skip unknown vendor subsections."

This reverts commit 8f208edd44d0832ac2580e0ec4238be4ecfd5737.

I completely missed the compiled unit test for ELFAttributeParser,
which also needs updating. I'll reland this change once I make further
fixes.

Added: 
    

Modified: 
    lld/test/ELF/arm-tag-vfp-args-errs.s
    llvm/lib/Support/ELFAttributeParser.cpp

Removed: 
    


################################################################################
diff  --git a/lld/test/ELF/arm-tag-vfp-args-errs.s b/lld/test/ELF/arm-tag-vfp-args-errs.s
index 4fc152e2d98c1..622cea07a0447 100644
--- a/lld/test/ELF/arm-tag-vfp-args-errs.s
+++ b/lld/test/ELF/arm-tag-vfp-args-errs.s
@@ -1,25 +1,16 @@
 // REQUIRES:arm
-
-// RUN: rm -rf %t
-// RUN: split-file %s %t
-
-// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-base.s -o %t/base.o
-// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-vfp.s -o %t/vfp.o
-// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-toolchain.s -o %t/toolchain.o
-// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %t/main.s -o %t/main.o
-// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %t/vendor.s -o %t/vendor.o
-// RUN: not ld.lld %t/main.o %t/base.o %t/vfp.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/base.o %t/vendor.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/base.o %t/toolchain.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/vfp.o %t/base.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/vfp.o %t/toolchain.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/toolchain.o %t/base.o -o%t/a.out 2>&1 | FileCheck %s
-// RUN: not ld.lld %t/main.o %t/toolchain.o %t/vfp.o -o%t/a.out 2>&1 | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-base.s -o %tbase.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-vfp.s -o %tvfp.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %S/Inputs/arm-vfp-arg-toolchain.s -o %ttoolchain.o
+// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
+// RUN: not ld.lld %t.o %tbase.o %tvfp.o -o%t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o %tbase.o %ttoolchain.o -o%t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o %tvfp.o %tbase.o -o%t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o %tvfp.o %ttoolchain.o -o%t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o %ttoolchain.o %tbase.o -o%t 2>&1 | FileCheck %s
+// RUN: not ld.lld %t.o %ttoolchain.o %tvfp.o -o%t 2>&1 | FileCheck %s
 
 // CHECK: incompatible Tag_ABI_VFP_args
-
-//--- main.s
-
 	.arch armv7-a
 	.eabi_attribute 20, 1
 	.eabi_attribute 21, 1
@@ -36,52 +27,3 @@
         .globl _start
         .type _start, %function
 _start: bx lr
-
-//--- vendor.s
-
-        .syntax unified
-
-        // Manually construct a custom .ARM.attributes section
-        .section .ARM.attributes,"",%0x70000003 // SHT_ARM_ATTRIBUTES
-
-        // Initial byte giving the section format version
-        .byte 'A'
-
-        // Subsection with a name that won't be recognised as a known vendor
-vendor_subsect_start:
-        .word vendor_subsect_end - vendor_subsect_start // subsection length
-        .asciz "ShouldBeIgnored" // vendor name
-        .dcb.b 64, 0xff // dummy vendor section contents
-vendor_subsect_end:
-
-        // Subsection that should be identical to the attributes defined by
-        // Inputs/arm-vfp-arg-vfp.s
-aeabi_subsect_start:
-        .word aeabi_subsect_end - aeabi_subsect_start
-        .asciz "aeabi" // vendor name indicating the standard subsection
-file_subsubsect_start:
-        .byte 1 // introduce sub-subsection of attributes for the whole file
-        .word file_subsubsect_end - file_subsubsect_start // sub-subsection len
-        .byte 5 // CPU_name
-        .asciz "7-A"
-        .byte 6, 10 // CPU_arch = ARM v7
-        .byte 7, 'A' // CPU_arch_profile = Application
-        .byte 8, 1 // ARM_ISA_use = Permitted
-        .byte 9, 2 // THUMB_ISA_use = Thumb-2
-        .byte 18, 4 // ABI_PCS_wchar_t = 4-byte
-        .byte 20, 1 // ABI_FP_denormal = IEEE-754
-        .byte 21, 1 // ABI_FP_exceptions = IEEE-754
-        .byte 23, 3 // ABI_FP_number_model = IEEE-754
-        .byte 24, 1 // ABI_align_needed = 8-byte alignment
-        .byte 25, 1 // ABI_align_preserved = 8-byte data alignment
-        .byte 26, 2 // ABI_enum_size = Int32
-        .byte 28, 1 // ABI_VFP_args = AAPCS VFP
-        .byte 30, 6 // ABI_optimization_goals = Best Debugging
-        .byte 34, 1 // CPU_unaligned_access = v6-style
-file_subsubsect_end:
-aeabi_subsect_end:
-
-        .text
-        .global f1
-        .type f1, %function
-f1:     bx lr

diff  --git a/llvm/lib/Support/ELFAttributeParser.cpp b/llvm/lib/Support/ELFAttributeParser.cpp
index 2e90b70dc83f9..a5a0676b1077e 100644
--- a/llvm/lib/Support/ELFAttributeParser.cpp
+++ b/llvm/lib/Support/ELFAttributeParser.cpp
@@ -127,14 +127,10 @@ Error ELFAttributeParser::parseSubsection(uint32_t length) {
     sw->printString("Vendor", vendorName);
   }
 
-  // Handle a subsection with an unrecognized vendor-name by skipping
-  // over it to the next subsection. ADDENDA32 in the Arm ABI defines
-  // that vendor attribute sections must not affect compatibility, so
-  // this should always be safe.
-  if (vendorName.lower() != vendor) {
-    cursor.seek(end);
-    return Error::success();
-  }
+  // Ignore unrecognized vendor-name.
+  if (vendorName.lower() != vendor)
+    return createStringError(errc::invalid_argument,
+                             "unrecognized vendor-name: " + vendorName);
 
   while (cursor.tell() < end) {
     /// Tag_File | Tag_Section | Tag_Symbol   uleb128:byte-size


        


More information about the llvm-commits mailing list