Skip to content

[readobj][ELFExtendedAttrParser] Add destructor with error handling #131783

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 18, 2025

Conversation

sivan-shani
Copy link
Contributor

ELFExtendedAttrParser lacked a destructor that properly handled errors, causing llvm-readobj --arch-specific to crash when the AArch64 Build Attributes section was empty.

This commit adds error handling in the destructor and introduces test files for --arch-specific to cover both an empty AArch64 Build Attributes section and a populated one.

Fixes:
sivan-shani@b1ebfac

ELFExtendedAttrParser lacked a destructor that properly handled errors,
causing `llvm-readobj --arch-specific` to crash when the AArch64 Build Attributes section was empty.

This commit adds error handling in the destructor and introduces test files
for `--arch-specific` to cover both an empty AArch64 Build Attributes section and a populated one.

Fixes:
b1ebfac
@llvmbot
Copy link
Member

llvmbot commented Mar 18, 2025

@llvm/pr-subscribers-llvm-support
@llvm/pr-subscribers-mc

@llvm/pr-subscribers-backend-aarch64

Author: SivanShani-Arm (sivan-shani)

Changes

ELFExtendedAttrParser lacked a destructor that properly handled errors, causing llvm-readobj --arch-specific to crash when the AArch64 Build Attributes section was empty.

This commit adds error handling in the destructor and introduces test files for --arch-specific to cover both an empty AArch64 Build Attributes section and a populated one.

Fixes:
sivan-shani@b1ebfac


Full diff: https://github.com/llvm/llvm-project/pull/131783.diff

3 Files Affected:

  • (modified) llvm/include/llvm/Support/ELFAttrParserExtended.h (+1)
  • (added) llvm/test/MC/AArch64/build-attributes-asm-arch-specific-empty.s (+6)
  • (added) llvm/test/MC/AArch64/build-attributes-asm-arch-specific.s (+62)
diff --git a/llvm/include/llvm/Support/ELFAttrParserExtended.h b/llvm/include/llvm/Support/ELFAttrParserExtended.h
index 63712c38d7312..68f45fb7f368a 100644
--- a/llvm/include/llvm/Support/ELFAttrParserExtended.h
+++ b/llvm/include/llvm/Support/ELFAttrParserExtended.h
@@ -35,6 +35,7 @@ class ELFExtendedAttrParser : public ELFAttributeParser {
                        const unsigned Tag);
 
 public:
+  virtual ~ELFExtendedAttrParser() { static_cast<void>(!Cursor.takeError()); }
   Error parse(ArrayRef<uint8_t> Section, llvm::endianness Endian) override;
 
   std::optional<unsigned> getAttributeValue(unsigned Tag) const override;
diff --git a/llvm/test/MC/AArch64/build-attributes-asm-arch-specific-empty.s b/llvm/test/MC/AArch64/build-attributes-asm-arch-specific-empty.s
new file mode 100644
index 0000000000000..2286073eb12f2
--- /dev/null
+++ b/llvm/test/MC/AArch64/build-attributes-asm-arch-specific-empty.s
@@ -0,0 +1,6 @@
+// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-readelf --arch-specific - | FileCheck %s --check-prefix=CHECK
+
+// test llvm-readelf with empty file.
+
+// CHECK: BuildAttributes {
+// CHECK-NEXT: }
diff --git a/llvm/test/MC/AArch64/build-attributes-asm-arch-specific.s b/llvm/test/MC/AArch64/build-attributes-asm-arch-specific.s
new file mode 100644
index 0000000000000..ec3b3b79ef2d7
--- /dev/null
+++ b/llvm/test/MC/AArch64/build-attributes-asm-arch-specific.s
@@ -0,0 +1,62 @@
+// RUN: llvm-mc -triple=aarch64 -filetype=obj %s | llvm-readelf --arch-specific - | FileCheck %s --check-prefix=ASM
+
+// ASM: BuildAttributes {
+// ASM-NEXT: FormatVersion: 0x41
+// ASM-NEXT:  Section 1 {
+// ASM-NEXT:    SectionLength: 21
+// ASM-NEXT:    VendorName: subsection_a Optionality: optional Type: uleb128
+// ASM-NEXT:    Attributes {
+// ASM-NEXT:      7: 11
+// ASM-NEXT:    }
+// ASM-NEXT:  }
+// ASM-NEXT:  Section 2 {
+// ASM-NEXT:    SectionLength: 32
+// ASM-NEXT:    VendorName: aeabi_subsection Optionality: optional Type: ntbs
+// ASM-NEXT:    Attributes {
+// ASM-NEXT:      5: "Value"
+// ASM-NEXT:    }
+// ASM-NEXT:  }
+// ASM-NEXT:  Section 3 {
+// ASM-NEXT:    SectionLength: 22
+// ASM-NEXT:    VendorName: subsection_b Optionality: required Type: uleb128
+// ASM-NEXT:    Attributes {
+// ASM-NEXT:      6: 536
+// ASM-NEXT:    }
+// ASM-NEXT:  }
+// ASM-NEXT:  Section 4 {
+// ASM-NEXT:    SectionLength: 26
+// ASM-NEXT:    VendorName: aeabi_pauthabi Optionality: required Type: uleb128
+// ASM-NEXT:    Attributes {
+// ASM-NEXT:      Tag_PAuth_Platform: 9
+// ASM-NEXT:      Tag_PAuth_Schema: 777
+// ASM-NEXT:    }
+// ASM-NEXT:  }
+// ASM-NEXT:  Section 5 {
+// ASM-NEXT:    SectionLength: 35
+// ASM-NEXT:    VendorName: aeabi_feature_and_bits Optionality: optional Type: uleb128
+// ASM-NEXT:    Attributes {
+// ASM-NEXT:      Tag_Feature_BTI: 1
+// ASM-NEXT:      Tag_Feature_PAC: 1
+// ASM-NEXT:      Tag_Feature_GCS: 1
+// ASM-NEXT:    }
+// ASM-NEXT:  }
+// ASM-NEXT: }
+
+
+.aeabi_subsection subsection_a, optional, uleb128
+.aeabi_subsection aeabi_subsection, optional, ntbs
+.aeabi_subsection subsection_b, required, uleb128
+.aeabi_subsection aeabi_pauthabi, required, uleb128
+.aeabi_attribute Tag_PAuth_Platform, 7
+.aeabi_attribute Tag_PAuth_Schema, 777
+.aeabi_attribute Tag_PAuth_Platform, 9
+.aeabi_subsection aeabi_feature_and_bits, optional, uleb128
+.aeabi_attribute Tag_Feature_BTI, 1
+.aeabi_attribute Tag_Feature_PAC, 1
+.aeabi_attribute Tag_Feature_GCS, 1
+.aeabi_subsection aeabi_subsection, optional, ntbs
+.aeabi_attribute 5, "Value"
+.aeabi_subsection subsection_b, required, uleb128
+.aeabi_attribute 6, 536
+.aeabi_subsection subsection_a, optional, uleb128
+.aeabi_attribute 7, 11

@sivan-shani sivan-shani requested a review from ostannard March 18, 2025 11:02
Copy link
Collaborator

@ostannard ostannard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@sivan-shani sivan-shani merged commit 23743f5 into llvm:main Mar 18, 2025
13 of 14 checks passed
@sivan-shani sivan-shani deleted the fix branch April 22, 2025 14:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants