-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[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
Conversation
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
@llvm/pr-subscribers-llvm-support @llvm/pr-subscribers-backend-aarch64 Author: SivanShani-Arm (sivan-shani) ChangesELFExtendedAttrParser lacked a destructor that properly handled errors, causing This commit adds error handling in the destructor and introduces test files for Fixes: Full diff: https://github.com/llvm/llvm-project/pull/131783.diff 3 Files Affected:
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
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
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