diff options
author | Daniel Dunbar <daniel@zuster.org> | 2011-03-17 17:10:06 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2011-03-17 17:10:06 +0000 |
commit | fa41d6975058ceb1b8a24564f6dcec72f89f62e8 (patch) | |
tree | f2cefcce785acf228522be7cee61107783d1fde6 /lib/Driver/Tools.cpp | |
parent | a085da86242c9b8e3466f8cf6f4397e9f248fd20 (diff) |
Driver/Darwin/ARM: Kernel/kext code has more strict alignment requirements.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127815 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Tools.cpp')
-rw-r--r-- | lib/Driver/Tools.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 761e5f8b67..09a1442aed 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -420,7 +420,8 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) { } void Clang::AddARMTargetArgs(const ArgList &Args, - ArgStringList &CmdArgs) const { + ArgStringList &CmdArgs, + bool KernelOrKext) const { const Driver &D = getToolChain().getDriver(); llvm::Triple Triple = getToolChain().getTriple(); @@ -587,8 +588,17 @@ void Clang::AddARMTargetArgs(const ArgList &Args, // Setting -msoft-float effectively disables NEON because of the GCC // implementation, although the same isn't true of VFP or VFP3. if (FloatABI == "soft") { - CmdArgs.push_back("-target-feature"); - CmdArgs.push_back("-neon"); + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("-neon"); + } + + // Kernel code has more strict alignment requirements. + if (KernelOrKext) { + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("-arm-long-calls"); + + CmdArgs.push_back("-target-feature"); + CmdArgs.push_back("-arm-strict-align"); } } @@ -1173,7 +1183,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, case llvm::Triple::arm: case llvm::Triple::thumb: - AddARMTargetArgs(Args, CmdArgs); + AddARMTargetArgs(Args, CmdArgs, KernelOrKext); break; case llvm::Triple::mips: |