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
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions llvm/include/llvm/Support/ELFAttrParserExtended.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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: }
62 changes: 62 additions & 0 deletions llvm/test/MC/AArch64/build-attributes-asm-arch-specific.s
Original file line number Diff line number Diff line change
@@ -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
Loading