[llvm] r356856 - Recommit r356738 "[llvm-objcopy] - Implement replaceSectionReferences for GroupSection class."
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Sun Mar 24 07:41:46 PDT 2019
Author: grimar
Date: Sun Mar 24 07:41:45 2019
New Revision: 356856
URL: http://llvm.org/viewvc/llvm-project?rev=356856&view=rev
Log:
Recommit r356738 "[llvm-objcopy] - Implement replaceSectionReferences for GroupSection class."
Fix: r356853 + set AddressAlign to 4 in
Inputs/compress-debug-sections.yaml for the new group section introduced.
Original commit message:
Currently, llvm-objcopy incorrectly handles compression and decompression of the
sections from COMDAT groups, because we do not implement the
replaceSectionReferences for this type of the sections.
The patch does that.
Differential revision: https://reviews.llvm.org/D59638
Added:
llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-groups.test
- copied unchanged from r356744, llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-groups.test
Modified:
llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
llvm/trunk/tools/llvm-objcopy/ELF/Object.h
Modified: llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml?rev=356856&r1=356855&r2=356856&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml (original)
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml Sun Mar 24 07:41:45 2019
@@ -25,6 +25,24 @@ Sections:
- Name: .debug_bar
Type: SHT_PROGBITS
Content: 0000000000000000
+ - Name: .group
+ Type: SHT_GROUP
+ Link: .symtab
+ AddressAlign: 4
+ EntSize: 0x0000000000000004
+ Info: groupname
+ Members:
+ - SectionOrType: GRP_COMDAT
+ - SectionOrType: .text.in.group
+ - SectionOrType: .debug_in_group
+ - Name: .text.in.group
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+ Content: '00'
+ - Name: .debug_in_group
+ Type: SHT_PROGBITS
+ Flags: [ SHF_GROUP ]
+ Content: '00'
Symbols:
Global:
- Name: .debug_foo
@@ -35,4 +53,6 @@ Symbols:
Section: .notdebug_foo
- Name: .Linfo_string0
Section: .debug_bar
+ - Name: groupname
+ Section: .group
...
Modified: llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp?rev=356856&r1=356855&r2=356856&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp (original)
+++ llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp Sun Mar 24 07:41:45 2019
@@ -689,6 +689,13 @@ void GroupSection::markSymbols() {
Sym->Referenced = true;
}
+void GroupSection::replaceSectionReferences(
+ const DenseMap<SectionBase *, SectionBase *> &FromTo) {
+ for (SectionBase *&Sec : GroupMembers)
+ if (SectionBase *To = FromTo.lookup(Sec))
+ Sec = To;
+}
+
void Section::initialize(SectionTableRef SecTable) {
if (Link != ELF::SHN_UNDEF) {
LinkSection =
Modified: llvm/trunk/tools/llvm-objcopy/ELF/Object.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objcopy/ELF/Object.h?rev=356856&r1=356855&r2=356856&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/Object.h (original)
+++ llvm/trunk/tools/llvm-objcopy/ELF/Object.h Sun Mar 24 07:41:45 2019
@@ -633,6 +633,8 @@ public:
void finalize() override;
Error removeSymbols(function_ref<bool(const Symbol &)> ToRemove) override;
void markSymbols() override;
+ void replaceSectionReferences(
+ const DenseMap<SectionBase *, SectionBase *> &FromTo) override;
static bool classof(const SectionBase *S) {
return S->Type == ELF::SHT_GROUP;
More information about the llvm-commits
mailing list