Skip to content

Commit

Permalink
Revert "[llvm-objcopy] Remove empty SHT_GROUP sections (#97141)"
Browse files Browse the repository at this point in the history
This reverts commit 359c64f.

This caused heap-use-after-free. See #98106.
  • Loading branch information
MaskRay committed Jul 9, 2024
1 parent f3fe14f commit 2abe53a
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 61 deletions.
11 changes: 1 addition & 10 deletions llvm/lib/ObjCopy/ELF/ELFObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2239,17 +2239,8 @@ Error Object::removeSections(
// Transfer removed sections into the Object RemovedSections container for use
// later.
std::move(Iter, Sections.end(), std::back_inserter(RemovedSections));
// Now get rid of them altogether.
// Now finally get rid of them all together.
Sections.erase(Iter, std::end(Sections));

// Finally erase empty SHT_GROUP sections.
llvm::erase_if(Sections, [](const SecPtr &Sec) {
if (auto GroupSec = dyn_cast<GroupSection>(Sec.get()))
return GroupSec->getMembersCount() == 0;

return false;
});

return Error::success();
}

Expand Down
2 changes: 0 additions & 2 deletions llvm/lib/ObjCopy/ELF/ELFObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -964,8 +964,6 @@ class GroupSection : public SectionBase {
const DenseMap<SectionBase *, SectionBase *> &FromTo) override;
void onRemove() override;

size_t getMembersCount() const { return GroupMembers.size(); }

static bool classof(const SectionBase *S) {
return S->OriginalType == ELF::SHT_GROUP;
}
Expand Down
50 changes: 1 addition & 49 deletions llvm/test/tools/llvm-objcopy/ELF/remove-section-in-group.test
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## This checks that the group section is shrunk when its member is removed.

# RUN: yaml2obj --docnum=1 %s -o - \
# RUN: yaml2obj %s -o - \
# RUN: | llvm-objcopy -R .foo - - \
# RUN: | obj2yaml - \
# RUN: | FileCheck %s
Expand Down Expand Up @@ -35,51 +35,3 @@ Symbols:
- Name: foo_bar_grp
Section: .group
Binding: STB_GLOBAL

# RUN: yaml2obj --docnum=2 %s -o %t
# RUN: llvm-objcopy --remove-section=.debug_macro %t
# RUN: llvm-readelf --section-groups %t | FileCheck %s --check-prefix=GROUP-REMOVED

--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .group
Type: SHT_GROUP
Info: foo_grp
Members:
- SectionOrType: GRP_COMDAT
- SectionOrType: .debug_macro
- Name: .debug_macro
Type: SHT_PROGBITS
Flags: [ SHF_GROUP ]
Symbols:
- Name: foo_grp
Section: .group

# GROUP-REMOVED: There are no section groups in this file.

# RUN: yaml2obj --docnum=3 %s -o %t
# RUN: llvm-objcopy --remove-section=.group %t
# RUN: llvm-readelf --section-groups %t | FileCheck %s --check-prefix=EMPTY-GROUP-REMOVED

--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_X86_64
Sections:
- Name: .group
Type: SHT_GROUP
Info: foo_grp
Members:
- SectionOrType: GRP_COMDAT
Symbols:
- Name: foo_grp
Section: .group

# EMPTY-GROUP-REMOVED: There are no section groups in this file.

0 comments on commit 2abe53a

Please sign in to comment.