ELF: Add --strip-debug option.
If --strip-debug option is given, then all sections whose names start with ".debug" are removed from output. llvm-svn: 265722
This commit is contained in:
parent
07334f05de
commit
fc6a4b045f
|
@ -79,6 +79,7 @@ struct Configuration {
|
|||
bool Shared;
|
||||
bool Static = false;
|
||||
bool StripAll;
|
||||
bool StripDebug;
|
||||
bool SysvHash = true;
|
||||
bool Threads;
|
||||
bool Trace;
|
||||
|
|
|
@ -291,6 +291,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
|||
Config->SaveTemps = Args.hasArg(OPT_save_temps);
|
||||
Config->Shared = Args.hasArg(OPT_shared);
|
||||
Config->StripAll = Args.hasArg(OPT_strip_all);
|
||||
Config->StripDebug = Args.hasArg(OPT_strip_debug);
|
||||
Config->Threads = Args.hasArg(OPT_threads);
|
||||
Config->Trace = Args.hasArg(OPT_trace);
|
||||
Config->Verbose = Args.hasArg(OPT_verbose);
|
||||
|
@ -315,11 +316,16 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
|||
Config->ZOrigin = hasZOption(Args, "origin");
|
||||
Config->ZRelro = !hasZOption(Args, "norelro");
|
||||
|
||||
Config->Pic = Config->Pie || Config->Shared;
|
||||
|
||||
if (Config->Relocatable)
|
||||
Config->StripAll = false;
|
||||
|
||||
// --strip-all implies --strip-debug.
|
||||
if (Config->StripAll)
|
||||
Config->StripDebug = true;
|
||||
|
||||
// Config->Pic is true if we are generating position-independent code.
|
||||
Config->Pic = Config->Pie || Config->Shared;
|
||||
|
||||
if (auto *Arg = Args.getLastArg(OPT_hash_style)) {
|
||||
StringRef S = Arg->getValue();
|
||||
if (S == "gnu") {
|
||||
|
|
|
@ -262,8 +262,13 @@ elf::ObjectFile<ELFT>::createInputSection(const Elf_Shdr &Sec) {
|
|||
if (Name == ".note.GNU-stack")
|
||||
return &InputSection<ELFT>::Discarded;
|
||||
|
||||
if (Name == ".note.GNU-split-stack")
|
||||
if (Name == ".note.GNU-split-stack") {
|
||||
error("objects using splitstacks are not supported");
|
||||
return &InputSection<ELFT>::Discarded;
|
||||
}
|
||||
|
||||
if (Config->StripDebug && Name.startswith(".debug"))
|
||||
return &InputSection<ELFT>::Discarded;
|
||||
|
||||
// A MIPS object file has a special section that contains register
|
||||
// usage info, which needs to be handled by the linker specially.
|
||||
|
|
|
@ -133,6 +133,9 @@ def start_lib : Flag<["--"], "start-lib">,
|
|||
def strip_all : Flag<["--"], "strip-all">,
|
||||
HelpText<"Strip all symbols">;
|
||||
|
||||
def strip_debug : Flag<["--"], "strip-debug">,
|
||||
HelpText<"Strip debugging information">;
|
||||
|
||||
def sysroot : Joined<["--"], "sysroot=">,
|
||||
HelpText<"Set the system root">;
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
# REQUIRES: x86
|
||||
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux -g %s -o %t
|
||||
# RUN: ld.lld %t -o %t2
|
||||
# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=DEFAULT %s
|
||||
# RUN: ld.lld %t -o %t2 --strip-debug
|
||||
# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=STRIP %s
|
||||
# RUN: ld.lld %t -o %t2 --strip-all
|
||||
# RUN: llvm-readobj -sections -symbols %t2 | FileCheck -check-prefix=STRIP %s
|
||||
|
||||
# DEFAULT: Name: .debug_info
|
||||
# DEFAULT: Name: .debug_abbrev
|
||||
# DEFAULT: Name: .debug_aranges
|
||||
# DEFAULT: Name: .debug_line
|
||||
|
||||
# STRIP-NOT: Name: .debug_info
|
||||
# STRIP-NOT: Name: .debug_abbrev
|
||||
# STRIP-NOT: Name: .debug_aranges
|
||||
# STRIP-NOT: Name: .debug_line
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
ret
|
Loading…
Reference in New Issue