mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-04-13 03:41:11 +00:00
Revert "Revert r305164/5/7."
Restore the `-gz` option to the driver with some minor tweaks to handle the additional case for `-Wa,--compress-debug-sections`. This intends to make the compression of the debug information controllable from the driver. The following is the behaviour: -gz enable compression (ambiguous for format, will default to zlib-gnu) -gz=none disable compression -gz=zlib-gnu enable compression (deprecated GNU style zlib compression) -gz=zlib enable compression (zlib based compression) Although -Wa,-compress-debug-sections works, it should be discouraged when using the driver to invoke the assembler. However, we permit the assembler to accept the GNU as style argument --compress-debug-sections to maintain compatibility. Note, -gz/-gz= does *NOT* imply -g. That is, you need to additionally specific -g for debug information to be generated. llvm-svn: 306115
This commit is contained in:
parent
021f32fd0f
commit
d064e91ece
@ -134,7 +134,6 @@ def migrator_no_finalize_removal : Flag<["-"], "no-finalize-removal">,
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
let Flags = [CC1Option, CC1AsOption, NoDriverOption] in {
|
let Flags = [CC1Option, CC1AsOption, NoDriverOption] in {
|
||||||
|
|
||||||
def debug_info_kind_EQ : Joined<["-"], "debug-info-kind=">;
|
def debug_info_kind_EQ : Joined<["-"], "debug-info-kind=">;
|
||||||
def debug_info_macro : Flag<["-"], "debug-info-macro">,
|
def debug_info_macro : Flag<["-"], "debug-info-macro">,
|
||||||
HelpText<"Emit macro debug information">;
|
HelpText<"Emit macro debug information">;
|
||||||
@ -144,14 +143,16 @@ def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,
|
|||||||
HelpText<"The compilation directory to embed in the debug info.">;
|
HelpText<"The compilation directory to embed in the debug info.">;
|
||||||
def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">,
|
def dwarf_debug_flags : Separate<["-"], "dwarf-debug-flags">,
|
||||||
HelpText<"The string to embed in the Dwarf debug flags record.">;
|
HelpText<"The string to embed in the Dwarf debug flags record.">;
|
||||||
|
def compress_debug_sections : Flag<["-", "--"], "compress-debug-sections">,
|
||||||
|
HelpText<"DWARF debug sections compression">;
|
||||||
|
def compress_debug_sections_EQ : Flag<["-"], "compress-debug-sections=">,
|
||||||
|
HelpText<"DWARF debug sections compression type">;
|
||||||
def mno_exec_stack : Flag<["-"], "mnoexecstack">,
|
def mno_exec_stack : Flag<["-"], "mnoexecstack">,
|
||||||
HelpText<"Mark the file as not needing an executable stack">;
|
HelpText<"Mark the file as not needing an executable stack">;
|
||||||
def massembler_fatal_warnings : Flag<["-"], "massembler-fatal-warnings">,
|
def massembler_fatal_warnings : Flag<["-"], "massembler-fatal-warnings">,
|
||||||
HelpText<"Make assembler warnings fatal">;
|
HelpText<"Make assembler warnings fatal">;
|
||||||
def mrelax_relocations : Flag<["--"], "mrelax-relocations">,
|
def mrelax_relocations : Flag<["--"], "mrelax-relocations">,
|
||||||
HelpText<"Use relaxable elf relocations">;
|
HelpText<"Use relaxable elf relocations">;
|
||||||
def compress_debug_sections : Flag<["-"], "compress-debug-sections">,
|
|
||||||
HelpText<"Compress DWARF debug sections using zlib">;
|
|
||||||
def msave_temp_labels : Flag<["-"], "msave-temp-labels">,
|
def msave_temp_labels : Flag<["-"], "msave-temp-labels">,
|
||||||
HelpText<"Save temporary labels in the symbol table. "
|
HelpText<"Save temporary labels in the symbol table. "
|
||||||
"Note this may change .s semantics and shouldn't generally be used "
|
"Note this may change .s semantics and shouldn't generally be used "
|
||||||
|
@ -1563,6 +1563,10 @@ def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>;
|
|||||||
def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>,
|
def gmodules : Flag <["-"], "gmodules">, Group<gN_Group>,
|
||||||
HelpText<"Generate debug info with external references to clang modules"
|
HelpText<"Generate debug info with external references to clang modules"
|
||||||
" or precompiled headers">;
|
" or precompiled headers">;
|
||||||
|
def gz : Flag<["-"], "gz">, Group<g_flags_Group>,
|
||||||
|
HelpText<"DWARF debug sections compression type">;
|
||||||
|
def gz_EQ : Joined<["-"], "gz=">, Group<g_flags_Group>,
|
||||||
|
HelpText<"DWARF debug sections compression type">;
|
||||||
def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">;
|
def headerpad__max__install__names : Joined<["-"], "headerpad_max_install_names">;
|
||||||
def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>,
|
def help : Flag<["-", "--"], "help">, Flags<[CC1Option,CC1AsOption]>,
|
||||||
HelpText<"Display available options">;
|
HelpText<"Display available options">;
|
||||||
|
@ -910,6 +910,37 @@ static void RenderDebugEnablingArgs(const ArgList &Args, ArgStringList &CmdArgs,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void RenderDebugInfoCompressionArgs(const ArgList &Args,
|
||||||
|
ArgStringList &CmdArgs,
|
||||||
|
const Driver &D) {
|
||||||
|
const Arg *A = Args.getLastArg(options::OPT_gz, options::OPT_gz_EQ);
|
||||||
|
if (!A)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (A->getOption().getID() == options::OPT_gz) {
|
||||||
|
if (llvm::zlib::isAvailable())
|
||||||
|
CmdArgs.push_back("-compress-debug-sections");
|
||||||
|
else
|
||||||
|
D.Diag(diag::warn_debug_compression_unavailable);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringRef Value = A->getValue();
|
||||||
|
if (Value == "none") {
|
||||||
|
CmdArgs.push_back("-compress-debug-sections=none");
|
||||||
|
} else if (Value == "zlib" || Value == "zlib-gnu") {
|
||||||
|
if (llvm::zlib::isAvailable()) {
|
||||||
|
CmdArgs.push_back(
|
||||||
|
Args.MakeArgString("-compress-debug-sections=" + Twine(Value)));
|
||||||
|
} else {
|
||||||
|
D.Diag(diag::warn_debug_compression_unavailable);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
D.Diag(diag::err_drv_unsupported_option_argument)
|
||||||
|
<< A->getOption().getName() << Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const char *RelocationModelName(llvm::Reloc::Model Model) {
|
static const char *RelocationModelName(llvm::Reloc::Model Model) {
|
||||||
switch (Model) {
|
switch (Model) {
|
||||||
case llvm::Reloc::Static:
|
case llvm::Reloc::Static:
|
||||||
@ -1747,10 +1778,6 @@ static void CollectArgsForIntegratedAssembler(Compilation &C,
|
|||||||
// arg after parsing the '-I' arg.
|
// arg after parsing the '-I' arg.
|
||||||
bool TakeNextArg = false;
|
bool TakeNextArg = false;
|
||||||
|
|
||||||
// When using an integrated assembler, translate -Wa, and -Xassembler
|
|
||||||
// options.
|
|
||||||
bool CompressDebugSections = false;
|
|
||||||
|
|
||||||
bool UseRelaxRelocations = ENABLE_X86_RELAX_RELOCATIONS;
|
bool UseRelaxRelocations = ENABLE_X86_RELAX_RELOCATIONS;
|
||||||
const char *MipsTargetFeature = nullptr;
|
const char *MipsTargetFeature = nullptr;
|
||||||
for (const Arg *A :
|
for (const Arg *A :
|
||||||
@ -1825,12 +1852,11 @@ static void CollectArgsForIntegratedAssembler(Compilation &C,
|
|||||||
CmdArgs.push_back("-massembler-fatal-warnings");
|
CmdArgs.push_back("-massembler-fatal-warnings");
|
||||||
} else if (Value == "--noexecstack") {
|
} else if (Value == "--noexecstack") {
|
||||||
CmdArgs.push_back("-mnoexecstack");
|
CmdArgs.push_back("-mnoexecstack");
|
||||||
} else if (Value == "-compress-debug-sections" ||
|
} else if (Value.startswith("-compress-debug-sections") ||
|
||||||
Value == "--compress-debug-sections") {
|
Value.startswith("--compress-debug-sections") ||
|
||||||
CompressDebugSections = true;
|
Value == "-nocompress-debug-sections" ||
|
||||||
} else if (Value == "-nocompress-debug-sections" ||
|
|
||||||
Value == "--nocompress-debug-sections") {
|
Value == "--nocompress-debug-sections") {
|
||||||
CompressDebugSections = false;
|
CmdArgs.push_back(Value.data());
|
||||||
} else if (Value == "-mrelax-relocations=yes" ||
|
} else if (Value == "-mrelax-relocations=yes" ||
|
||||||
Value == "--mrelax-relocations=yes") {
|
Value == "--mrelax-relocations=yes") {
|
||||||
UseRelaxRelocations = true;
|
UseRelaxRelocations = true;
|
||||||
@ -1883,12 +1909,6 @@ static void CollectArgsForIntegratedAssembler(Compilation &C,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CompressDebugSections) {
|
|
||||||
if (llvm::zlib::isAvailable())
|
|
||||||
CmdArgs.push_back("-compress-debug-sections");
|
|
||||||
else
|
|
||||||
D.Diag(diag::warn_debug_compression_unavailable);
|
|
||||||
}
|
|
||||||
if (UseRelaxRelocations)
|
if (UseRelaxRelocations)
|
||||||
CmdArgs.push_back("--mrelax-relocations");
|
CmdArgs.push_back("--mrelax-relocations");
|
||||||
if (MipsTargetFeature != nullptr) {
|
if (MipsTargetFeature != nullptr) {
|
||||||
@ -2824,6 +2844,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||||||
CmdArgs.push_back("-generate-type-units");
|
CmdArgs.push_back("-generate-type-units");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RenderDebugInfoCompressionArgs(Args, CmdArgs, D);
|
||||||
|
|
||||||
bool UseSeparateSections = isUseSeparateSections(Triple);
|
bool UseSeparateSections = isUseSeparateSections(Triple);
|
||||||
|
|
||||||
if (Args.hasFlag(options::OPT_ffunction_sections,
|
if (Args.hasFlag(options::OPT_ffunction_sections,
|
||||||
@ -4927,6 +4949,7 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||||||
|
|
||||||
const llvm::Triple &Triple = getToolChain().getEffectiveTriple();
|
const llvm::Triple &Triple = getToolChain().getEffectiveTriple();
|
||||||
const std::string &TripleStr = Triple.getTriple();
|
const std::string &TripleStr = Triple.getTriple();
|
||||||
|
const auto &D = getToolChain().getDriver();
|
||||||
|
|
||||||
// Don't warn about "clang -w -c foo.s"
|
// Don't warn about "clang -w -c foo.s"
|
||||||
Args.ClaimAllArgs(options::OPT_w);
|
Args.ClaimAllArgs(options::OPT_w);
|
||||||
@ -5014,6 +5037,8 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
|
|||||||
}
|
}
|
||||||
RenderDebugEnablingArgs(Args, CmdArgs, DebugInfoKind, DwarfVersion,
|
RenderDebugEnablingArgs(Args, CmdArgs, DebugInfoKind, DwarfVersion,
|
||||||
llvm::DebuggerKind::Default);
|
llvm::DebuggerKind::Default);
|
||||||
|
RenderDebugInfoCompressionArgs(Args, CmdArgs, D);
|
||||||
|
|
||||||
|
|
||||||
// Handle -fPIC et al -- the relocation-model affects the assembler
|
// Handle -fPIC et al -- the relocation-model affects the assembler
|
||||||
// for some targets.
|
// for some targets.
|
||||||
|
@ -650,6 +650,8 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C,
|
|||||||
const InputInfoList &Inputs,
|
const InputInfoList &Inputs,
|
||||||
const ArgList &Args,
|
const ArgList &Args,
|
||||||
const char *LinkingOutput) const {
|
const char *LinkingOutput) const {
|
||||||
|
const auto &D = getToolChain().getDriver();
|
||||||
|
|
||||||
claimNoWarnArgs(Args);
|
claimNoWarnArgs(Args);
|
||||||
|
|
||||||
ArgStringList CmdArgs;
|
ArgStringList CmdArgs;
|
||||||
@ -660,6 +662,23 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C,
|
|||||||
std::tie(RelocationModel, PICLevel, IsPIE) =
|
std::tie(RelocationModel, PICLevel, IsPIE) =
|
||||||
ParsePICArgs(getToolChain(), Args);
|
ParsePICArgs(getToolChain(), Args);
|
||||||
|
|
||||||
|
if (const Arg *A = Args.getLastArg(options::OPT_gz, options::OPT_gz_EQ)) {
|
||||||
|
if (A->getOption().getID() == options::OPT_gz) {
|
||||||
|
CmdArgs.push_back("-compress-debug-sections");
|
||||||
|
} else {
|
||||||
|
StringRef Value = A->getValue();
|
||||||
|
if (Value == "none") {
|
||||||
|
CmdArgs.push_back("-compress-debug-sections=none");
|
||||||
|
} else if (Value == "zlib" || Value == "zlib-gnu") {
|
||||||
|
CmdArgs.push_back(
|
||||||
|
Args.MakeArgString("-compress-debug-sections=" + Twine(Value)));
|
||||||
|
} else {
|
||||||
|
D.Diag(diag::err_drv_unsupported_option_argument)
|
||||||
|
<< A->getOption().getName() << Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch (getToolChain().getArch()) {
|
switch (getToolChain().getArch()) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -745,9 +745,22 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||||||
Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
|
Opts.InstrumentForProfiling = Args.hasArg(OPT_pg);
|
||||||
Opts.CallFEntry = Args.hasArg(OPT_mfentry);
|
Opts.CallFEntry = Args.hasArg(OPT_mfentry);
|
||||||
Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info);
|
Opts.EmitOpenCLArgMetadata = Args.hasArg(OPT_cl_kernel_arg_info);
|
||||||
// TODO: map this from -gz in the driver and give it a named value
|
|
||||||
if (Args.hasArg(OPT_compress_debug_sections))
|
if (const Arg *A = Args.getLastArg(OPT_compress_debug_sections,
|
||||||
|
OPT_compress_debug_sections_EQ)) {
|
||||||
|
if (A->getOption().getID() == OPT_compress_debug_sections) {
|
||||||
|
// TODO: be more clever about the compression type auto-detection
|
||||||
Opts.setCompressDebugSections(llvm::DebugCompressionType::GNU);
|
Opts.setCompressDebugSections(llvm::DebugCompressionType::GNU);
|
||||||
|
} else {
|
||||||
|
auto DCT = llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
|
||||||
|
.Case("none", llvm::DebugCompressionType::None)
|
||||||
|
.Case("zlib", llvm::DebugCompressionType::Z)
|
||||||
|
.Case("zlib-gnu", llvm::DebugCompressionType::GNU)
|
||||||
|
.Default(llvm::DebugCompressionType::None);
|
||||||
|
Opts.setCompressDebugSections(DCT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
||||||
Opts.DebugCompilationDir = Args.getLastArgValue(OPT_fdebug_compilation_dir);
|
Opts.DebugCompilationDir = Args.getLastArgValue(OPT_fdebug_compilation_dir);
|
||||||
for (auto A : Args.filtered(OPT_mlink_bitcode_file, OPT_mlink_cuda_bitcode)) {
|
for (auto A : Args.filtered(OPT_mlink_bitcode_file, OPT_mlink_cuda_bitcode)) {
|
||||||
|
37
clang/test/Driver/compress-noias.c
Normal file
37
clang/test/Driver/compress-noias.c
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// REQUIRES: zlib
|
||||||
|
// REQUIRES: x86-registered-target
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -Wa,-compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-_COMPRESS_DEBUG_SECTIONS %s
|
||||||
|
// CHECK-_COMPRESS_DEBUG_SECTIONS: "-compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -Wa,--compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-__COMPRESS_DEBUG_SECTIONS %s
|
||||||
|
// CHECK-__COMPRESS_DEBUG_SECTIONS: "--compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -Wa,--compress-debug-sections -Wa,--nocompress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-POSNEG %s
|
||||||
|
// CHECK-POSNEG: "--compress-debug-sections"
|
||||||
|
// CHECK-POSNEG: "--nocompress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -Wa,-compress-debug-sections -Wa,--compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-MULTIPLE %s
|
||||||
|
// CHECK-MULTIPLE: "-compress-debug-sections"
|
||||||
|
// CHECK-MULTIPLE: "--compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ %s
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ %s
|
||||||
|
// CHECK-OPT_GZ: "-compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=none -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_NONE %s
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=none -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_NONE %s
|
||||||
|
// CHECK-OPT_GZ_EQ_NONE: "-compress-debug-sections=none"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=zlib -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB %s
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=zlib -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB %s
|
||||||
|
// CHECK-OPT_GZ_EQ_ZLIB: "-compress-debug-sections=zlib"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=zlib-gnu -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB_GNU %s
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=zlib-gnu -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB_GNU %s
|
||||||
|
// CHECK-OPT_GZ_EQ_ZLIB_GNU: "-compress-debug-sections=zlib-gnu"
|
||||||
|
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=invalid -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_INVALID %s
|
||||||
|
// RUN: %clang -### -target i686-unknown-linux-gnu -fno-integrated-as -gz=invalid -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_INVALID %s
|
||||||
|
// CHECK-OPT_GZ_EQ_INVALID: error: unsupported argument 'invalid' to option 'gz='
|
||||||
|
|
@ -1,8 +1,36 @@
|
|||||||
// RUN: %clang -### -c -integrated-as -Wa,-compress-debug-sections %s 2>&1 | FileCheck --check-prefix=COMPRESS_DEBUG %s
|
|
||||||
// RUN: %clang -### -c -integrated-as -Wa,--compress-debug-sections %s 2>&1 | FileCheck --check-prefix=COMPRESS_DEBUG %s
|
|
||||||
// REQUIRES: zlib
|
// REQUIRES: zlib
|
||||||
|
|
||||||
// COMPRESS_DEBUG: "-compress-debug-sections"
|
// RUN: %clang -### -fintegrated-as -Wa,-compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-_COMPRESS_DEBUG_SECTIONS %s
|
||||||
|
// CHECK-_COMPRESS_DEBUG_SECTIONS: "-compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -Wa,--compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-__COMPRESS_DEBUG_SECTIONS %s
|
||||||
|
// CHECK-__COMPRESS_DEBUG_SECTIONS: "--compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -Wa,--compress-debug-sections -Wa,--nocompress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-POSNEG %s
|
||||||
|
// CHECK-POSNEG: "--compress-debug-sections"
|
||||||
|
// CHECK-POSNEG: "--nocompress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -Wa,-compress-debug-sections -Wa,--compress-debug-sections -c %s 2>&1 | FileCheck -check-prefix CHECK-MULTIPLE %s
|
||||||
|
// CHECK-MULTIPLE: "-compress-debug-sections"
|
||||||
|
// CHECK-MULTIPLE: "--compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ %s
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ %s
|
||||||
|
// CHECK-OPT_GZ: "-compress-debug-sections"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=none -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_NONE %s
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=none -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_NONE %s
|
||||||
|
// CHECK-OPT_GZ_EQ_NONE: "-compress-debug-sections=none"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=zlib -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB %s
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=zlib -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB %s
|
||||||
|
// CHECK-OPT_GZ_EQ_ZLIB: "-compress-debug-sections=zlib"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=zlib-gnu -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB_GNU %s
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=zlib-gnu -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_ZLIB_GNU %s
|
||||||
|
// CHECK-OPT_GZ_EQ_ZLIB_GNU: "-compress-debug-sections=zlib-gnu"
|
||||||
|
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=invalid -x assembler -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_INVALID %s
|
||||||
|
// RUN: %clang -### -fintegrated-as -gz=invalid -c %s 2>&1 | FileCheck -check-prefix CHECK-OPT_GZ_EQ_INVALID %s
|
||||||
|
// CHECK-OPT_GZ_EQ_INVALID: error: unsupported argument 'invalid' to option 'gz='
|
||||||
|
|
||||||
// RUN: %clang -### -c -integrated-as -Wa,--compress-debug-sections -Wa,--nocompress-debug-sections %s 2>&1 | FileCheck --check-prefix=NOCOMPRESS_DEBUG %s
|
|
||||||
// NOCOMPRESS_DEBUG-NOT: "-compress-debug-sections"
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// RUN: %clang -c %s -Wa,--compress-debug-sections 2>&1 | FileCheck %s
|
|
||||||
// RUN: %clang -c %s -Wa,--compress-debug-sections -Wa,--nocompress-debug-sections 2>&1 | FileCheck --allow-empty --check-prefix=NOWARN %s
|
|
||||||
// REQUIRES: nozlib
|
// REQUIRES: nozlib
|
||||||
|
|
||||||
// CHECK: warning: cannot compress debug sections (zlib not installed)
|
// RUN: %clang -fintegrated-as -gz -c %s 2>&1 | FileCheck %s -check-prefix CHECK-WARN
|
||||||
// NOWARN-NOT: warning: cannot compress debug sections (zlib not installed)
|
// RUN: %clang -fintegrated-as -gz=none -c %s 2>&1 | FileCheck -allow-empty -check-prefix CHECK-NOWARN %s
|
||||||
|
|
||||||
|
// CHECK-WARN: warning: cannot compress debug sections (zlib not installed)
|
||||||
|
// CHECK-NOWARN-NOT: warning: cannot compress debug sections (zlib not installed)
|
||||||
|
8
clang/test/Misc/cc1as-compress.s
Normal file
8
clang/test/Misc/cc1as-compress.s
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// REQUIRES: zlib
|
||||||
|
// REQUIRES: x86-registered-target
|
||||||
|
|
||||||
|
// RUN: %clang -cc1as -triple i686 --compress-debug-sections -filetype asm %s -o /dev/null 2>&1 | FileCheck -allow-empty %s
|
||||||
|
// RUN: %clang -cc1as -triple i686 -compress-debug-sections -filetype asm %s -o /dev/null 2>&1 | FileCheck -allow-empty %s
|
||||||
|
|
||||||
|
// CHECK-NOT: error: unknown argument:
|
||||||
|
|
@ -202,9 +202,22 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
|
|||||||
Opts.SaveTemporaryLabels = Args.hasArg(OPT_msave_temp_labels);
|
Opts.SaveTemporaryLabels = Args.hasArg(OPT_msave_temp_labels);
|
||||||
// Any DebugInfoKind implies GenDwarfForAssembly.
|
// Any DebugInfoKind implies GenDwarfForAssembly.
|
||||||
Opts.GenDwarfForAssembly = Args.hasArg(OPT_debug_info_kind_EQ);
|
Opts.GenDwarfForAssembly = Args.hasArg(OPT_debug_info_kind_EQ);
|
||||||
// TODO: base this on -gz instead
|
|
||||||
if (Args.hasArg(OPT_compress_debug_sections))
|
if (const Arg *A = Args.getLastArg(OPT_compress_debug_sections,
|
||||||
|
OPT_compress_debug_sections_EQ)) {
|
||||||
|
if (A->getOption().getID() == OPT_compress_debug_sections) {
|
||||||
|
// TODO: be more clever about the compression type auto-detection
|
||||||
Opts.CompressDebugSections = llvm::DebugCompressionType::GNU;
|
Opts.CompressDebugSections = llvm::DebugCompressionType::GNU;
|
||||||
|
} else {
|
||||||
|
Opts.CompressDebugSections =
|
||||||
|
llvm::StringSwitch<llvm::DebugCompressionType>(A->getValue())
|
||||||
|
.Case("none", llvm::DebugCompressionType::None)
|
||||||
|
.Case("zlib", llvm::DebugCompressionType::Z)
|
||||||
|
.Case("zlib-gnu", llvm::DebugCompressionType::GNU)
|
||||||
|
.Default(llvm::DebugCompressionType::None);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
Opts.RelaxELFRelocations = Args.hasArg(OPT_mrelax_relocations);
|
||||||
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags);
|
Opts.DwarfVersion = getLastArgIntValue(Args, OPT_dwarf_version_EQ, 2, Diags);
|
||||||
Opts.DwarfDebugFlags = Args.getLastArgValue(OPT_dwarf_debug_flags);
|
Opts.DwarfDebugFlags = Args.getLastArgValue(OPT_dwarf_debug_flags);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user