summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2013-10-24 10:48:50 +0000
committerTim Northover <tnorthover@apple.com>2013-10-24 10:48:50 +0000
commit901dee4d28d1993d0bf21d660bccf9039b0ff095 (patch)
tree1f39d25b0c160b8f9ea6e221e8ea10308d63206e
parent94ecbd2e6c05316c25349eec88a99f40c83995ce (diff)
downloadbcm5719-llvm-901dee4d28d1993d0bf21d660bccf9039b0ff095.tar.gz
bcm5719-llvm-901dee4d28d1993d0bf21d660bccf9039b0ff095.zip
ARM-Darwin: Use the *-*-darwin-eabi triple for v6m & v7m archs
These arch arguments are used for embedded targets (obviously) which need a different calling convention to iOS. llvm-svn: 193328
-rw-r--r--clang/lib/Basic/Targets.cpp4
-rw-r--r--clang/lib/Driver/ToolChains.cpp16
-rw-r--r--clang/test/Driver/darwin-eabi.c6
-rw-r--r--clang/test/Frontend/darwin-eabi.c6
4 files changed, 27 insertions, 5 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 843cc1bbf84..4deaa640f8a 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -149,7 +149,9 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
Str[4] = '0' + (Rev % 10);
Str[5] = '\0';
Builder.defineMacro("__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__", Str);
- } else {
+ } else if (Triple.getArchName() != "thumbv6m" &&
+ Triple.getArchName() != "thumbv7m" &&
+ Triple.getArchName() != "thumbv7em") {
// Note that the Driver allows versions which aren't representable in the
// define (because we only get a single digit for the minor and micro
// revision numbers). So, we limit them to the maximum representable
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp
index ec0d8f387cd..d45966c459f 100644
--- a/clang/lib/Driver/ToolChains.cpp
+++ b/clang/lib/Driver/ToolChains.cpp
@@ -167,10 +167,18 @@ std::string Darwin::ComputeEffectiveClangTriple(const ArgList &Args,
if (!isTargetInitialized())
return Triple.getTriple();
- SmallString<16> Str;
- Str += isTargetIPhoneOS() ? "ios" : "macosx";
- Str += getTargetVersion().getAsString();
- Triple.setOSName(Str);
+ if (Triple.getArchName() == "thumbv6m" ||
+ Triple.getArchName() == "thumbv7m" ||
+ Triple.getArchName() == "thumbv7em") {
+ // OS is ios or macosx unless it's the v6m or v7m.
+ Triple.setOS(llvm::Triple::Darwin);
+ Triple.setEnvironment(llvm::Triple::EABI);
+ } else {
+ SmallString<16> Str;
+ Str += isTargetIPhoneOS() ? "ios" : "macosx";
+ Str += getTargetVersion().getAsString();
+ Triple.setOSName(Str);
+ }
return Triple.getTriple();
}
diff --git a/clang/test/Driver/darwin-eabi.c b/clang/test/Driver/darwin-eabi.c
index 744e536a13e..1288fa40608 100644
--- a/clang/test/Driver/darwin-eabi.c
+++ b/clang/test/Driver/darwin-eabi.c
@@ -1,6 +1,12 @@
// RUN: %clang -arch armv7 -target thumbv7-apple-darwin-eabi -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-AAPCS
// RUN: %clang -arch armv7s -target thumbv7-apple-ios -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-APCS
// RUN: %clang -arch armv7s -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-APCS
+// RUN: %clang -arch armv6m -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-DARWIN-EABI
+// RUN: %clang -arch armv7m -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-DARWIN-EABI
+// RUN: %clang -arch armv7em -target thumbv7-apple-darwin -### -c %s 2>&1 | FileCheck %s --check-prefix=CHECK-DARWIN-EABI
+
+// CHECK-DARWIN-EABI: "-triple" "{{thumbv[67]e?m}}-apple-darwin-eabi"
+// CHECK-IOS: "-triple" "thumbv7" "thumbv7-apple-ios
// CHECK-AAPCS: "-target-abi" "aapcs"
// CHECK-APCS: "-target-abi" "apcs-gnu"
diff --git a/clang/test/Frontend/darwin-eabi.c b/clang/test/Frontend/darwin-eabi.c
new file mode 100644
index 00000000000..dc0504bd3c1
--- /dev/null
+++ b/clang/test/Frontend/darwin-eabi.c
@@ -0,0 +1,6 @@
+// RUN: %clang -target x86_64-apple-darwin -arch armv6m -dM -E %s | FileCheck %s
+// RUN: %clang -target x86_64-apple-darwin -arch armv7m -dM -E %s | FileCheck %s
+// RUN: %clang -target x86_64-apple-darwin -arch armv7em -dM -E %s | FileCheck %s
+
+// CHECK-NOT: __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__
+// CHECK-NOT: __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
OpenPOWER on IntegriCloud