[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