diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-06-29 20:52:51 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-06-29 20:52:51 +0000 |
commit | f7b8eec37c8c8012fa525c71fb29a58c9f29beef (patch) | |
tree | f9d15c4793ce744e6d964c427d224820b70e5436 /lib/Basic/Targets.cpp | |
parent | 3708b3df2e86998dca4c006939014ea1174da834 (diff) |
OpenBSD support.
- Patch by Jonathan Gray!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74453 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/Targets.cpp')
-rw-r--r-- | lib/Basic/Targets.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 9ca014d4ff..e156e2abd2 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -70,6 +70,19 @@ static void getSolarisDefines(const LangOptions &Opts, std::vector<char> &Defs) Define(Defs, "__SVR4"); } +static void getOpenBSDDefines(const LangOptions &Opts, bool is64Bit, + const char *Triple, std::vector<char> &Defs) { + // OpenBSD defines; list based off of gcc output + + Define(Defs, "__OpenBSD__", "1"); + Define(Defs, "__KPRINTF_ATTRIBUTE__"); + DefineStd(Defs, "unix", Opts); + Define(Defs, "__ELF__", "1"); + if (is64Bit) { + Define(Defs, "__LP64__"); + } +} + static void getFreeBSDDefines(const LangOptions &Opts, bool is64Bit, const char *Triple, std::vector<char> &Defs) { // FreeBSD defines; list based off of gcc output @@ -866,6 +879,20 @@ public: } // end anonymous namespace namespace { +// x86-32 OpenBSD target +class OpenBSDX86_32TargetInfo : public X86_32TargetInfo { +public: + OpenBSDX86_32TargetInfo(const std::string& triple) : + X86_32TargetInfo(triple) { } + virtual void getTargetDefines(const LangOptions &Opts, + std::vector<char> &Defines) const { + X86_32TargetInfo::getTargetDefines(Opts, Defines); + getOpenBSDDefines(Opts, 0, getTargetTriple(), Defines); + } +}; +} // end anonymous namespace + +namespace { // x86-32 FreeBSD target class FreeBSDX86_32TargetInfo : public X86_32TargetInfo { public: @@ -987,6 +1014,20 @@ public: } // end anonymous namespace namespace { +// x86-64 OpenBSD target +class OpenBSDX86_64TargetInfo : public X86_64TargetInfo { +public: + OpenBSDX86_64TargetInfo(const std::string &triple) + : X86_64TargetInfo(triple) {} + virtual void getTargetDefines(const LangOptions &Opts, + std::vector<char> &Defines) const { + X86_64TargetInfo::getTargetDefines(Opts, Defines); + getOpenBSDDefines(Opts, 1, getTargetTriple(), Defines); + } +}; +} // end anonymous namespace + +namespace { // x86-64 FreeBSD target class FreeBSDX86_64TargetInfo : public X86_64TargetInfo { public: @@ -1457,6 +1498,7 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { // Additions and corrections are welcome. bool isDarwin = T.find("-darwin") != std::string::npos; bool isDragonFly = T.find("-dragonfly") != std::string::npos; + bool isOpenBSD = T.find("-openbsd") != std::string::npos; bool isFreeBSD = T.find("-freebsd") != std::string::npos; bool isSolaris = T.find("-solaris") != std::string::npos; bool isLinux = T.find("-linux") != std::string::npos; @@ -1495,6 +1537,8 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { return new DarwinX86_64TargetInfo(T); if (isLinux) return new LinuxX86_64TargetInfo(T); + if (isOpenBSD) + return new OpenBSDX86_64TargetInfo(T); if (isFreeBSD) return new FreeBSDX86_64TargetInfo(T); if (isSolaris) @@ -1515,6 +1559,8 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) { return new LinuxX86_32TargetInfo(T); if (isDragonFly) return new DragonFlyX86_32TargetInfo(T); + if (isOpenBSD) + return new OpenBSDX86_32TargetInfo(T); if (isFreeBSD) return new FreeBSDX86_32TargetInfo(T); if (isSolaris) |