mirror of https://github.com/microsoft/clang.git
Add -funique-section-names and -fno-unique-section-names options.
For now -funique-section-names is the default, so no change in default behavior. The total .o size in a build of llvm and clang goes from 241687775 to 230649031 bytes if -fno-unique-section-names is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230031 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d830233bd6
commit
acdbdefe39
|
@ -1004,6 +1004,14 @@ def fdata_sections : Flag <["-"], "fdata-sections">, Group<f_Group>,
|
|||
Flags<[CC1Option]>, HelpText<"Place each data in its own section (ELF Only)">;
|
||||
def fno_data_sections : Flag <["-"], "fno-data-sections">, Group<f_Group>,
|
||||
Flags<[CC1Option]>;
|
||||
|
||||
def funique_section_names : Flag <["-"], "funique-section-names">,
|
||||
Group<f_Group>, Flags<[CC1Option]>,
|
||||
HelpText<"Use unique names for text and data sections (ELF Only)">;
|
||||
def fno_unique_section_names : Flag <["-"], "fno-unique-section-names">,
|
||||
Group<f_Group>, Flags<[CC1Option]>;
|
||||
|
||||
|
||||
def fdebug_types_section: Flag <["-"], "fdebug-types-section">, Group<f_Group>,
|
||||
Flags<[CC1Option]>, HelpText<"Place debug types in their own section (ELF Only)">;
|
||||
def fno_debug_types_section: Flag<["-"], "fno-debug-types-section">, Group<f_Group>,
|
||||
|
|
|
@ -40,6 +40,7 @@ CODEGENOPT(CXAAtExit , 1, 1) ///< Use __cxa_atexit for calling destructo
|
|||
CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker
|
||||
///< aliases to base ctors when possible.
|
||||
CODEGENOPT(DataSections , 1, 0) ///< Set when -fdata-sections is enabled.
|
||||
CODEGENOPT(UniqueSectionNames, 1, 1) ///< Set for -funique-section-names.
|
||||
CODEGENOPT(DisableFPElim , 1, 0) ///< Set when -fomit-frame-pointer is enabled.
|
||||
CODEGENOPT(DisableFree , 1, 0) ///< Don't free memory.
|
||||
CODEGENOPT(DisableGCov , 1, 0) ///< Don't run the GCov pass, for testing.
|
||||
|
|
|
@ -527,6 +527,7 @@ TargetMachine *EmitAssemblyHelper::CreateTargetMachine(bool MustCreateTM) {
|
|||
Options.PositionIndependentExecutable = LangOpts.PIELevel != 0;
|
||||
Options.FunctionSections = CodeGenOpts.FunctionSections;
|
||||
Options.DataSections = CodeGenOpts.DataSections;
|
||||
Options.UniqueSectionNames = CodeGenOpts.UniqueSectionNames;
|
||||
|
||||
Options.MCOptions.MCRelaxAll = CodeGenOpts.RelaxAll;
|
||||
Options.MCOptions.MCSaveTempLabels = CodeGenOpts.SaveTempLabels;
|
||||
|
|
|
@ -3316,6 +3316,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-fdata-sections");
|
||||
}
|
||||
|
||||
if (!Args.hasFlag(options::OPT_funique_section_names,
|
||||
options::OPT_fno_unique_section_names, true))
|
||||
CmdArgs.push_back("-fno-unique-section-names");
|
||||
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_finstrument_functions);
|
||||
|
||||
if (Args.hasArg(options::OPT_fprofile_instr_generate) &&
|
||||
|
|
|
@ -472,6 +472,9 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
|||
OPT_fno_function_sections, false);
|
||||
Opts.DataSections = Args.hasFlag(OPT_fdata_sections,
|
||||
OPT_fno_data_sections, false);
|
||||
Opts.UniqueSectionNames = Args.hasFlag(OPT_funique_section_names,
|
||||
OPT_fno_unique_section_names, true);
|
||||
|
||||
Opts.MergeFunctions = Args.hasArg(OPT_fmerge_functions);
|
||||
|
||||
Opts.MSVolatile = Args.hasArg(OPT_fms_volatile);
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
// REQUIRES: x86-registered-target
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -S -ffunction-sections -fdata-sections -fno-unique-section-names -o - < %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -S -ffunction-sections -fdata-sections -o - < %s | FileCheck %s --check-prefix=UNIQUE
|
||||
|
||||
const int hello = 123;
|
||||
void world() {}
|
||||
|
||||
// CHECK: .section .text,"ax",@progbits,unique
|
||||
// CHECK: .section .rodata,"a",@progbits,unique
|
||||
|
||||
// UNIQUE: .section .text.world,"ax",@progbits
|
||||
// UNIQUE: .section .rodata.hello,"a",@progbits
|
|
@ -4,6 +4,8 @@
|
|||
// CHECK-NOFS-NOT: -ffunction-sections
|
||||
// CHECK-DS: -fdata-sections
|
||||
// CHECK-NODS-NOT: -fdata-sections
|
||||
// CHECK-US-NOT: -fno-unique-section-names
|
||||
// CHECK-NOUS: -fno-unique-section-names
|
||||
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
|
||||
// RUN: -target i386-unknown-linux \
|
||||
|
@ -60,3 +62,13 @@
|
|||
// RUN: -fdata-sections -fno-data-sections -fdata-sections \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-DS %s
|
||||
|
||||
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
|
||||
// RUN: -target i386-unknown-linux \
|
||||
// RUN: -funique-section-names \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-US %s
|
||||
|
||||
// RUN: %clang -no-canonical-prefixes %s -### -fsyntax-only 2>&1 \
|
||||
// RUN: -target i386-unknown-linux \
|
||||
// RUN: -fno-unique-section-names \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-NOUS %s
|
||||
|
|
Loading…
Reference in New Issue