Skip to content

Commit c9388c1

Browse files
committed
Driver/Darwin/ARM: Kernel/kext code has more strict alignment requirements.
llvm-svn: 127815
1 parent ead01c4 commit c9388c1

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

clang/lib/Driver/Tools.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,8 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) {
420420
}
421421

422422
void Clang::AddARMTargetArgs(const ArgList &Args,
423-
ArgStringList &CmdArgs) const {
423+
ArgStringList &CmdArgs,
424+
bool KernelOrKext) const {
424425
const Driver &D = getToolChain().getDriver();
425426
llvm::Triple Triple = getToolChain().getTriple();
426427

@@ -587,8 +588,17 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
587588
// Setting -msoft-float effectively disables NEON because of the GCC
588589
// implementation, although the same isn't true of VFP or VFP3.
589590
if (FloatABI == "soft") {
590-
CmdArgs.push_back("-target-feature");
591-
CmdArgs.push_back("-neon");
591+
CmdArgs.push_back("-target-feature");
592+
CmdArgs.push_back("-neon");
593+
}
594+
595+
// Kernel code has more strict alignment requirements.
596+
if (KernelOrKext) {
597+
CmdArgs.push_back("-target-feature");
598+
CmdArgs.push_back("-arm-long-calls");
599+
600+
CmdArgs.push_back("-target-feature");
601+
CmdArgs.push_back("-arm-strict-align");
592602
}
593603
}
594604

@@ -1173,7 +1183,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
11731183

11741184
case llvm::Triple::arm:
11751185
case llvm::Triple::thumb:
1176-
AddARMTargetArgs(Args, CmdArgs);
1186+
AddARMTargetArgs(Args, CmdArgs, KernelOrKext);
11771187
break;
11781188

11791189
case llvm::Triple::mips:

clang/lib/Driver/Tools.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace tools {
3434
const InputInfo &Output,
3535
const InputInfoList &Inputs) const;
3636

37-
void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
37+
void AddARMTargetArgs(const ArgList &Args, ArgStringList &CmdArgs,
38+
bool KernelOrKext) const;
3839
void AddMIPSTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
3940
void AddSparcTargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
4041
void AddX86TargetArgs(const ArgList &Args, ArgStringList &CmdArgs) const;
Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
1-
// RUN: %clang -ccc-host-triple x86_64-apple-darwin10 -mkernel -### -fsyntax-only %s 2> %t
2-
// RUN grep "-disable-red-zone" %t
3-
// RUN grep "-fapple-kext" %t
4-
// RUN grep "-fno-builtin" %t
5-
// RUN grep "-fno-rtti" %t
6-
// RUN grep "-fno-common" %t
1+
// RUN: %clang -ccc-host-triple x86_64-apple-darwin10 \
2+
// RUN: -mkernel -### -fsyntax-only %s 2> %t
3+
// RUN: FileCheck --check-prefix=CHECK-X86 < %t %s
4+
5+
// CHECK-X86: "-disable-red-zone"
6+
// CHECK-X86: "-fno-builtin"
7+
// CHECK-X86: "-fno-rtti"
8+
// CHECK-X86: "-fno-common"
9+
10+
// RUN: %clang -ccc-host-triple x86_64-apple-darwin10 \
11+
// RUN: -arch armv7 -mkernel -### -fsyntax-only %s 2> %t
12+
// RUN: FileCheck --check-prefix=CHECK-ARM < %t %s
13+
14+
// CHECK-ARM: "-target-feature" "-arm-long-calls"
15+
// CHECK-ARM: "-target-feature" "-arm-strict-align"
16+
// CHECK-ARM: "-fno-builtin"
17+
// CHECK-ARM: "-fno-rtti"
18+
// CHECK-ARM: "-fno-common"

0 commit comments

Comments
 (0)