From: Rafael Espindola Date: Mon, 2 May 2011 17:43:32 +0000 (+0000) Subject: Disable CFI if not using the integrated assembler. We should probably do this only for X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=61b1efe2d0b459a98962fd9b4c097ad8bb9bfdec;p=clang 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 --- 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");