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 Shared;
|
||||||
bool Static = false;
|
bool Static = false;
|
||||||
bool StripAll;
|
bool StripAll;
|
||||||
|
bool StripDebug;
|
||||||
bool SysvHash = true;
|
bool SysvHash = true;
|
||||||
bool Threads;
|
bool Threads;
|
||||||
bool Trace;
|
bool Trace;
|
||||||
|
|
|
@ -291,6 +291,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
||||||
Config->SaveTemps = Args.hasArg(OPT_save_temps);
|
Config->SaveTemps = Args.hasArg(OPT_save_temps);
|
||||||
Config->Shared = Args.hasArg(OPT_shared);
|
Config->Shared = Args.hasArg(OPT_shared);
|
||||||
Config->StripAll = Args.hasArg(OPT_strip_all);
|
Config->StripAll = Args.hasArg(OPT_strip_all);
|
||||||
|
Config->StripDebug = Args.hasArg(OPT_strip_debug);
|
||||||
Config->Threads = Args.hasArg(OPT_threads);
|
Config->Threads = Args.hasArg(OPT_threads);
|
||||||
Config->Trace = Args.hasArg(OPT_trace);
|
Config->Trace = Args.hasArg(OPT_trace);
|
||||||
Config->Verbose = Args.hasArg(OPT_verbose);
|
Config->Verbose = Args.hasArg(OPT_verbose);
|
||||||
|
@ -315,11 +316,16 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) {
|
||||||
Config->ZOrigin = hasZOption(Args, "origin");
|
Config->ZOrigin = hasZOption(Args, "origin");
|
||||||
Config->ZRelro = !hasZOption(Args, "norelro");
|
Config->ZRelro = !hasZOption(Args, "norelro");
|
||||||
|
|
||||||
Config->Pic = Config->Pie || Config->Shared;
|
|
||||||
|
|
||||||
if (Config->Relocatable)
|
if (Config->Relocatable)
|
||||||
Config->StripAll = false;
|
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)) {
|
if (auto *Arg = Args.getLastArg(OPT_hash_style)) {
|
||||||
StringRef S = Arg->getValue();
|
StringRef S = Arg->getValue();
|
||||||
if (S == "gnu") {
|
if (S == "gnu") {
|
||||||
|
|
|
@ -262,8 +262,13 @@ elf::ObjectFile<ELFT>::createInputSection(const Elf_Shdr &Sec) {
|
||||||
if (Name == ".note.GNU-stack")
|
if (Name == ".note.GNU-stack")
|
||||||
return &InputSection<ELFT>::Discarded;
|
return &InputSection<ELFT>::Discarded;
|
||||||
|
|
||||||
if (Name == ".note.GNU-split-stack")
|
if (Name == ".note.GNU-split-stack") {
|
||||||
error("objects using splitstacks are not supported");
|
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
|
// A MIPS object file has a special section that contains register
|
||||||
// usage info, which needs to be handled by the linker specially.
|
// 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">,
|
def strip_all : Flag<["--"], "strip-all">,
|
||||||
HelpText<"Strip all symbols">;
|
HelpText<"Strip all symbols">;
|
||||||
|
|
||||||
|
def strip_debug : Flag<["--"], "strip-debug">,
|
||||||
|
HelpText<"Strip debugging information">;
|
||||||
|
|
||||||
def sysroot : Joined<["--"], "sysroot=">,
|
def sysroot : Joined<["--"], "sysroot=">,
|
||||||
HelpText<"Set the system root">;
|
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