diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-02 17:43:32 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-02 17:43:32 +0000 |
commit | 61b1efe2d0b459a98962fd9b4c097ad8bb9bfdec (patch) | |
tree | 24a9a2b8d8a00c953f1e0bfffb17af44dddcd534 /lib/Driver/Tools.cpp | |
parent | 340fa242130c2d8d74c83edca0952e771aebe0e6 (diff) |
Disable CFI if not using the integrated assembler. We should probably do this only for
OS X, but it is probably not all that important.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@130697 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Tools.cpp')
-rw-r--r-- | lib/Driver/Tools.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 099a9a1c47..60803ddf93 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -905,6 +905,25 @@ static void addExceptionArgs(const ArgList &Args, types::ID InputType, CmdArgs.push_back("-fexceptions"); } +static bool ShouldDisableCFI(const ArgList &Args, + const ToolChain &TC) { + + // FIXME: Duplicated code with ToolChains.cpp + // FIXME: This doesn't belong here, but ideally we will support static soon + // anyway. + bool HasStatic = (Args.hasArg(options::OPT_mkernel) || + Args.hasArg(options::OPT_static) || + Args.hasArg(options::OPT_fapple_kext)); + bool IsIADefault = TC.IsIntegratedAssemblerDefault() && !HasStatic; + bool UseIntegratedAs = Args.hasFlag(options::OPT_integrated_as, + options::OPT_no_integrated_as, + IsIADefault); + bool UseCFI = Args.hasFlag(options::OPT_fdwarf2_cfi_asm, + options::OPT_fno_dwarf2_cfi_asm, + UseIntegratedAs); + return !UseCFI; +} + void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, @@ -1375,11 +1394,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-fno-gnu-keywords"); } - if (Arg *A = Args.getLastArg(options::OPT_fdwarf2_cfi_asm, - options::OPT_fno_dwarf2_cfi_asm)) { - if (A->getOption().matches(options::OPT_fno_dwarf2_cfi_asm)) - CmdArgs.push_back("-fno-dwarf2-cfi-asm"); - } + if (ShouldDisableCFI(Args, getToolChain())) + CmdArgs.push_back("-fno-dwarf2-cfi-asm"); if (Arg *A = Args.getLastArg(options::OPT_ftemplate_depth_)) { CmdArgs.push_back("-ftemplate-depth"); |