finding out the warning hierarchy, and which of them are enabled by default
or for a particular compiler invocation.
-- By default, Clang emits an address-significance table into
- every ELF object file when using the integrated assembler.
- Address-significance tables allow linkers to implement `safe ICF
- <https://research.google.com/pubs/archive/36912.pdf>`_ without the false
- positives that can result from other implementation techniques such as
- relocation scanning. The ``-faddrsig`` and ``-fno-addrsig`` flags can be
- used to control whether to emit the address-significance table.
-
- ...
New Compiler Flags
// value of -fmax-type-align.
}
-.. option:: -faddrsig, -fno-addrsig
-
- Controls whether Clang emits an address-significance table into the object
- file. Address-significance tables allow linkers to implement `safe ICF
- <https://research.google.com/pubs/archive/36912.pdf>`_ without the false
- positives that can result from other implementation techniques such as
- relocation scanning. Address-significance tables are enabled by default
- on ELF targets when using the integrated assembler. This flag currently
- only has an effect on ELF targets.
Profile Guided Optimization
---------------------------
def fno_profile_use : Flag<["-"], "fno-profile-use">,
Alias<fno_profile_instr_use>;
-def faddrsig : Flag<["-"], "faddrsig">, Group<f_Group>, Flags<[CoreOption, CC1Option]>,
- HelpText<"Emit an address-significance table">;
-def fno_addrsig : Flag<["-"], "fno-addrsig">, Group<f_Group>, Flags<[CoreOption]>,
- HelpText<"Don't emit an address-significance table">;
def fblocks : Flag<["-"], "fblocks">, Group<f_Group>, Flags<[CC1Option]>,
HelpText<"Enable the 'blocks' language feature">;
def fbootclasspath_EQ : Joined<["-"], "fbootclasspath=">, Group<f_Group>;
/// Whether to emit all vtables
CODEGENOPT(ForceEmitVTables, 1, 0)
-/// Whether to emit an address-significance table into the object file.
-CODEGENOPT(Addrsig, 1, 0)
-
#undef CODEGENOPT
#undef ENUM_CODEGENOPT
Options.ExplicitEmulatedTLS = CodeGenOpts.ExplicitEmulatedTLS;
Options.DebuggerTuning = CodeGenOpts.getDebuggerTuning();
Options.EmitStackSizeSection = CodeGenOpts.StackSizeSection;
- Options.EmitAddrsig = CodeGenOpts.Addrsig;
if (CodeGenOpts.EnableSplitDwarf)
Options.MCOptions.SplitDwarfFile = CodeGenOpts.SplitDwarfFile;
}
}
- if (Args.hasFlag(options::OPT_faddrsig, options::OPT_fno_addrsig,
- getToolChain().getTriple().isOSBinFormatELF() &&
- getToolChain().useIntegratedAs()))
- CmdArgs.push_back("-faddrsig");
-
// Finally add the compile command to the compilation.
if (Args.hasArg(options::OPT__SLASH_fallback) &&
Output.getType() == types::TY_Object &&
Opts.EmitVersionIdentMetadata = Args.hasFlag(OPT_Qy, OPT_Qn, true);
- Opts.Addrsig = Args.hasArg(OPT_faddrsig);
-
return Success;
}
+++ /dev/null
-// RUN: %clang_cc1 -triple=x86_64-unknown-linux -S %s -faddrsig -O -o - | FileCheck --check-prefix=ADDRSIG %s
-// RUN: %clang_cc1 -triple=x86_64-unknown-linux -S %s -O -o - | FileCheck --check-prefix=NO-ADDRSIG %s
-
-// ADDRSIG: .addrsig
-// ADDRSIG: .addrsig_sym g1
-// ADDRSIG-NOT: .addrsig_sym g2
-
-// NO-ADDRSIG-NOT: .addrsig
-
-extern const int g1[], g2[];
-
-const int *f1() {
- return g1;
-}
-
-int f2() {
- return g2[0];
-}
+++ /dev/null
-// RUN: %clang -### -target x86_64-unknown-linux -c %s 2>&1 | FileCheck -check-prefix=ADDRSIG %s
-// RUN: %clang -### -target x86_64-unknown-linux -fno-integrated-as -c %s 2>&1 | FileCheck -check-prefix=NO-ADDRSIG %s
-// RUN: %clang -### -target x86_64-unknown-linux -fno-integrated-as -faddrsig -c %s 2>&1 | FileCheck -check-prefix=ADDRSIG %s
-// RUN: %clang -### -target x86_64-unknown-linux -fno-addrsig -c %s 2>&1 | FileCheck -check-prefix=NO-ADDRSIG %s
-// RUN: %clang -### -target x86_64-apple-darwin -c %s 2>&1 | FileCheck -check-prefix=NO-ADDRSIG %s
-
-// ADDRSIG: -faddrsig
-// NO-ADDRSIG-NOT: -faddrsig