aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2011-05-02 17:43:32 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2011-05-02 17:43:32 +0000
commit61b1efe2d0b459a98962fd9b4c097ad8bb9bfdec (patch)
tree24a9a2b8d8a00c953f1e0bfffb17af44dddcd534
parent340fa242130c2d8d74c83edca0952e771aebe0e6 (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
-rw-r--r--lib/Driver/Tools.cpp26
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");