[lld] r228533 - [ELF] Implement --strip-all/-s

Davide Italiano davide at freebsd.org
Sun Feb 8 11:42:15 PST 2015


Author: davide
Date: Sun Feb  8 13:42:15 2015
New Revision: 228533

URL: http://llvm.org/viewvc/llvm-project?rev=228533&view=rev
Log:
[ELF] Implement --strip-all/-s

Differential Revision:	D7489
Reviewed by:	shankarke

Added:
    lld/trunk/test/elf/strip-all.test
Modified:
    lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
    lld/trunk/lib/Driver/GnuLdDriver.cpp
    lld/trunk/lib/Driver/GnuLdOptions.td
    lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
    lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h

Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=228533&r1=228532&r2=228533&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Sun Feb  8 13:42:15 2015
@@ -292,6 +292,10 @@ public:
   bool alignSegments() const { return _alignSegments; }
   void setAlignSegments(bool align) { _alignSegments = align; }
 
+  /// \brief Strip symbols.
+  bool stripSymbols() const { return _stripSymbols; }
+  void setStripSymbols(bool strip) { _stripSymbols = strip; }
+
   // We can parse several linker scripts via command line whose ASTs are stored
   // in the current linking context via addLinkerScript().
   void addLinkerScript(std::unique_ptr<script::Parser> script) {
@@ -322,6 +326,7 @@ protected:
   bool _noAllowDynamicLibraries;
   bool _mergeRODataToTextSegment;
   bool _demangle;
+  bool _stripSymbols;
   bool _alignSegments;
   bool _nostdlib;
   llvm::Optional<uint64_t> _maxPageSize;

Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=228533&r1=228532&r2=228533&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Sun Feb  8 13:42:15 2015
@@ -685,6 +685,11 @@ bool GnuLdDriver::parse(int argc, const
       break;
     }
 
+    case OPT_strip_all: {
+      ctx->setStripSymbols(true);
+      break;
+    }
+
     case OPT_soname:
       ctx->setSharedObjectName(inputArg->getValue());
       break;

Modified: lld/trunk/lib/Driver/GnuLdOptions.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdOptions.td?rev=228533&r1=228532&r2=228533&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdOptions.td (original)
+++ lld/trunk/lib/Driver/GnuLdOptions.td Sun Feb  8 13:42:15 2015
@@ -239,6 +239,11 @@ def demangle : Flag<["--"], "demangle">,
 def no_demangle : Flag<["--"], "no-demangle">,
      HelpText<"Dont demangle C++ symbols">,
      Group<grp_symbolopts>;
+def strip_all : Flag<["--"], "strip-all">,
+     HelpText<"Omit all symbol informations from output">,
+     Group<grp_symbolopts>;
+def alias_strip_all : Flag<["-"], "s">,
+     Alias<strip_all>;
 
 //===----------------------------------------------------------------------===//
 /// Optimization Options

Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=228533&r1=228532&r2=228533&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Sun Feb  8 13:42:15 2015
@@ -60,7 +60,8 @@ ELFLinkingContext::ELFLinkingContext(
       _isStaticExecutable(false), _noInhibitExec(false), _exportDynamic(false),
       _mergeCommonStrings(false), _useShlibUndefines(true),
       _dynamicLinkerArg(false), _noAllowDynamicLibraries(false),
-      _mergeRODataToTextSegment(true), _demangle(true), _alignSegments(true),
+      _mergeRODataToTextSegment(true), _demangle(true),
+      _stripSymbols(false), _alignSegments(true),
       _outputMagic(OutputMagic::DEFAULT), _initFunction("_init"),
       _finiFunction("_fini"), _sysrootPath("") {}
 

Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=228533&r1=228532&r2=228533&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Sun Feb  8 13:42:15 2015
@@ -417,7 +417,9 @@ std::error_code OutputELFWriter<ELFT>::b
   buildAtomToAddressMap(file);
 
   // Create symbol table and section string table
-  buildStaticSymbolTable(file);
+  // Do it only if -s is not specified.
+  if (!_context.stripSymbols())
+    buildStaticSymbolTable(file);
 
   // Finalize the layout by calling the finalize() functions
   _layout.finalize();

Added: lld/trunk/test/elf/strip-all.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/strip-all.test?rev=228533&view=auto
==============================================================================
--- lld/trunk/test/elf/strip-all.test (added)
+++ lld/trunk/test/elf/strip-all.test Sun Feb  8 13:42:15 2015
@@ -0,0 +1,107 @@
+# Tests the --strip-all (-s) flag. We expect the symbol table to not contain
+# any symbol in the output file.
+#
+# The following code was used to generate the object.
+# $ clang -c blah.c -o blah
+#
+# void
+# callMeMaybe(int *v)
+# {
+#	*v += 1;
+# }
+#
+# int
+# main(void)
+# {
+#
+#	int blah = 42;
+#	callMeMaybe(&blah);
+# }
+
+#RUN: yaml2obj -format=elf %s -o=%t.o
+#RUN: lld -flavor gnu -target x86_64 %t.o -e=main --strip-all -o %t1
+#RUN: llvm-readobj -dt %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+#CHECKSYMS: @
+
+---
+FileHeader:      
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  OSABI:           ELFOSABI_FREEBSD
+  Type:            ET_REL
+  Machine:         EM_X86_64
+Sections:        
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    AddressAlign:    0x0000000000000010
+    Content:         554889E548897DF8488B7DF88B07050100000089075DC3660F1F840000000000554889E54883EC10488D7DFCC745FC2A000000E8C8FFFFFFB8000000004883C4105DC3
+  - Name:            .data
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    AddressAlign:    0x0000000000000004
+    Content:         ''
+  - Name:            .bss
+    Type:            SHT_NOBITS
+    Flags:           [ SHF_WRITE, SHF_ALLOC ]
+    AddressAlign:    0x0000000000000004
+    Content:         ''
+  - Name:            .comment
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_MERGE, SHF_STRINGS ]
+    AddressAlign:    0x0000000000000001
+    Content:         004672656542534420636C616E672076657273696F6E20332E342E312028746167732F52454C454153455F33342F646F74312D66696E616C203230383033322920323031343035313200
+  - Name:            .note.GNU-stack
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x0000000000000001
+    Content:         ''
+  - Name:            .eh_frame
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC ]
+    AddressAlign:    0x0000000000000008
+    Content:         1400000000000000017A5200017810011B0C070890010000180000001C000000000000001700000000410E108602430D060000001800000038000000000000002300000000410E108602430D06000000
+  - Name:            .rela.eh_frame
+    Type:            SHT_RELA
+    Link:            .symtab
+    AddressAlign:    0x0000000000000008
+    Info:            .eh_frame
+    Relocations:     
+      - Offset:          0x0000000000000020
+        Symbol:          .text
+        Type:            R_X86_64_PC32
+      - Offset:          0x000000000000003C
+        Symbol:          .text
+        Type:            R_X86_64_PC32
+        Addend:          32
+Symbols:         
+  Local:           
+    - Name:            .text
+      Type:            STT_SECTION
+      Section:         .text
+    - Name:            .data
+      Type:            STT_SECTION
+      Section:         .data
+    - Name:            .bss
+      Type:            STT_SECTION
+      Section:         .bss
+    - Name:            .comment
+      Type:            STT_SECTION
+      Section:         .comment
+    - Name:            .note.GNU-stack
+      Type:            STT_SECTION
+      Section:         .note.GNU-stack
+    - Name:            .eh_frame
+      Type:            STT_SECTION
+      Section:         .eh_frame
+  Global:          
+    - Name:            callMeMaybe
+      Type:            STT_FUNC
+      Section:         .text
+      Size:            0x0000000000000017
+    - Name:            main
+      Type:            STT_FUNC
+      Section:         .text
+      Value:           0x0000000000000020
+      Size:            0x0000000000000023
+...





More information about the llvm-commits mailing list