summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorSylvestre Ledru <sylvestre@debian.org>2013-09-05 13:47:07 +0000
committerSylvestre Ledru <sylvestre@debian.org>2013-09-05 13:47:07 +0000
commit4afe74ac26f55cbff727849d80f77c90ed12eef8 (patch)
treee8b2d95d9f310b8f2a850ec7aae496ce1a8a1c6d /clang
parent841a9ccfed60167479b0bb5eb027ad43b62cedde (diff)
downloadbcm5719-llvm-4afe74ac26f55cbff727849d80f77c90ed12eef8.tar.gz
bcm5719-llvm-4afe74ac26f55cbff727849d80f77c90ed12eef8.zip
Fix bug #17104 - Target info for GNU/kFreeBSD were missing.
As a result, Clang doesn't define the pre-processor macros that are expected on this platform. Thanks to Robert Millan for the patch llvm-svn: 190048
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Basic/Targets.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 89b116d9be9..c8d70cbc94b 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -278,6 +278,30 @@ public:
}
};
+// GNU/kFreeBSD Target
+template<typename Target>
+class KFreeBSDTargetInfo : public OSTargetInfo<Target> {
+protected:
+ virtual void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
+ MacroBuilder &Builder) const {
+ // GNU/kFreeBSD defines; list based off of gcc output
+
+ DefineStd(Builder, "unix", Opts);
+ Builder.defineMacro("__FreeBSD_kernel__");
+ Builder.defineMacro("__GLIBC__");
+ Builder.defineMacro("__ELF__");
+ if (Opts.POSIXThreads)
+ Builder.defineMacro("_REENTRANT");
+ if (Opts.CPlusPlus)
+ Builder.defineMacro("_GNU_SOURCE");
+ }
+public:
+ KFreeBSDTargetInfo(const std::string &triple)
+ : OSTargetInfo<Target>(triple) {
+ this->UserLabelPrefix = "";
+ }
+};
+
// Minix Target
template<typename Target>
class MinixTargetInfo : public OSTargetInfo<Target> {
@@ -5470,6 +5494,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) {
return new BitrigI386TargetInfo(Triple);
case llvm::Triple::FreeBSD:
return new FreeBSDTargetInfo<X86_32TargetInfo>(Triple);
+ case llvm::Triple::KFreeBSD:
+ return new KFreeBSDTargetInfo<X86_32TargetInfo>(Triple);
case llvm::Triple::Minix:
return new MinixTargetInfo<X86_32TargetInfo>(Triple);
case llvm::Triple::Solaris:
@@ -5509,6 +5535,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) {
return new BitrigX86_64TargetInfo(Triple);
case llvm::Triple::FreeBSD:
return new FreeBSDTargetInfo<X86_64TargetInfo>(Triple);
+ case llvm::Triple::KFreeBSD:
+ return new KFreeBSDTargetInfo<X86_64TargetInfo>(Triple);
case llvm::Triple::Solaris:
return new SolarisTargetInfo<X86_64TargetInfo>(Triple);
case llvm::Triple::MinGW32:
OpenPOWER on IntegriCloud