[PATCH] D59542: [llvm-objcopy] - Use replaceSectionReferences to update the sections for symbols in symbol table.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 20 06:56:36 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL356554: [llvm-objcopy] - Use replaceSectionReferences to update the sections for… (authored by grimar, committed by ).
Herald added a project: LLVM.
Changed prior to commit:
https://reviews.llvm.org/D59542?vs=191467&id=191485#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D59542/new/
https://reviews.llvm.org/D59542
Files:
llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-symbols.test
llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
llvm/trunk/tools/llvm-objcopy/ELF/Object.h
Index: llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
===================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/Inputs/compress-debug-sections.yaml
@@ -21,6 +21,10 @@
- Offset: 0x2
Symbol: .notdebug_foo
Type: R_X86_64_32
+## This section should not be involved in relocations.
+ - Name: .debug_bar
+ Type: SHT_PROGBITS
+ Content: 0000000000000000
Symbols:
Global:
- Name: .debug_foo
@@ -29,4 +33,6 @@
- Name: .notdebug_foo
Type: STT_SECTION
Section: .notdebug_foo
+ - Name: .Linfo_string0
+ Section: .debug_bar
...
Index: llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-symbols.test
===================================================================
--- llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-symbols.test
+++ llvm/trunk/test/tools/llvm-objcopy/ELF/compress-debug-sections-symbols.test
@@ -0,0 +1,21 @@
+# REQUIRES: zlib
+
+# RUN: yaml2obj %p/Inputs/compress-debug-sections.yaml -o %t.o
+
+## Test that after the compression is done we do not remove the symbol
+## and it is placed into the right section.
+
+# RUN: llvm-objcopy --compress-debug-sections %t.o %t-compressed1.o
+# RUN: llvm-readobj -symbols %t-compressed1.o | FileCheck %s --check-prefixes=CHECK,ZLIB
+
+# RUN: llvm-objcopy --compress-debug-sections=zlib-gnu %t.o %t-compressed2.o
+# RUN: llvm-readobj -symbols %t-compressed2.o | FileCheck %s --check-prefixes=CHECK,ZLIBGNU
+
+# CHECK: Name: .Linfo_string0
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Global
+# CHECK-NEXT: Type: None
+# CHECK-NEXT: Other: 0
+# ZLIB-NEXT: Section: .debug_bar
+# ZLIBGNU-NEXT: Section: .zdebug_bar
Index: llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
===================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
+++ llvm/trunk/tools/llvm-objcopy/ELF/Object.cpp
@@ -457,6 +457,13 @@
return Error::success();
}
+void SymbolTableSection::replaceSectionReferences(
+ const DenseMap<SectionBase *, SectionBase *> &FromTo) {
+ for (std::unique_ptr<Symbol> &Sym : Symbols)
+ if (SectionBase *To = FromTo.lookup(Sym->DefinedIn))
+ Sym->DefinedIn = To;
+}
+
void SymbolTableSection::initialize(SectionTableRef SecTable) {
Size = 0;
setStrTab(SecTable.getSectionOfType<StringTableSection>(
@@ -638,12 +645,6 @@
// Update the target section if it was replaced.
if (SectionBase *To = FromTo.lookup(SecToApplyRel))
SecToApplyRel = To;
-
- // Change the sections where symbols are defined in if their
- // original sections were replaced.
- for (const Relocation &R : Relocations)
- if (SectionBase *To = FromTo.lookup(R.RelocSymbol->DefinedIn))
- R.RelocSymbol->DefinedIn = To;
}
void SectionWriter::visit(const DynamicRelocationSection &Sec) {
Index: llvm/trunk/tools/llvm-objcopy/ELF/Object.h
===================================================================
--- llvm/trunk/tools/llvm-objcopy/ELF/Object.h
+++ llvm/trunk/tools/llvm-objcopy/ELF/Object.h
@@ -529,6 +529,8 @@
void accept(SectionVisitor &Visitor) const override;
void accept(MutableSectionVisitor &Visitor) override;
Error removeSymbols(function_ref<bool(const Symbol &)> ToRemove) override;
+ void replaceSectionReferences(
+ const DenseMap<SectionBase *, SectionBase *> &FromTo) override;
static bool classof(const SectionBase *S) {
return S->Type == ELF::SHT_SYMTAB;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59542.191485.patch
Type: text/x-patch
Size: 3705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190320/6836cf97/attachment.bin>
More information about the llvm-commits
mailing list