diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-12-15 02:15:56 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-12-15 02:15:56 +0000 |
| commit | 3715d1f435c6830daea0e59e6cf2d7f80f64e97b (patch) | |
| tree | ad709c26faca54ff01415ef23d8b2e3c9a5cfade | |
| parent | 2ec824966d23c0ad09bc92d2b9a88bb03ca87894 (diff) | |
| download | bcm5719-llvm-3715d1f435c6830daea0e59e6cf2d7f80f64e97b.tar.gz bcm5719-llvm-3715d1f435c6830daea0e59e6cf2d7f80f64e97b.zip | |
gcov-style profiling support for OpenBSD. Patch by Jonathan Gray.
llvm-svn: 146631
| -rw-r--r-- | clang/lib/Basic/Targets.cpp | 21 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 18 |
2 files changed, 34 insertions, 5 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 1f52019f645..e02b0db3fe1 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -372,7 +372,26 @@ protected: } public: OpenBSDTargetInfo(const std::string &triple) - : OSTargetInfo<Target>(triple) {} + : OSTargetInfo<Target>(triple) { + this->UserLabelPrefix = ""; + + llvm::Triple Triple(triple); + switch (Triple.getArch()) { + default: + case llvm::Triple::x86: + case llvm::Triple::x86_64: + case llvm::Triple::arm: + case llvm::Triple::sparc: + this->MCountName = "__mcount"; + break; + case llvm::Triple::mips64: + case llvm::Triple::mips64el: + case llvm::Triple::ppc: + case llvm::Triple::sparcv9: + this->MCountName = "_mcount"; + break; + } + } }; // PSP Target diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 3b37f809048..60e6d3dd32f 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -4166,8 +4166,12 @@ void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, if (!Args.hasArg(options::OPT_nostdlib) && !Args.hasArg(options::OPT_nostartfiles)) { if (!Args.hasArg(options::OPT_shared)) { - CmdArgs.push_back(Args.MakeArgString( - getToolChain().GetFilePath("crt0.o"))); + if (Args.hasArg(options::OPT_pg)) + CmdArgs.push_back(Args.MakeArgString( + getToolChain().GetFilePath("gcrt0.o"))); + else + CmdArgs.push_back(Args.MakeArgString( + getToolChain().GetFilePath("crt0.o"))); CmdArgs.push_back(Args.MakeArgString( getToolChain().GetFilePath("crtbegin.o"))); } else { @@ -4192,7 +4196,10 @@ void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, !Args.hasArg(options::OPT_nodefaultlibs)) { if (D.CCCIsCXX) { getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs); - CmdArgs.push_back("-lm"); + if (Args.hasArg(options::OPT_pg)) + CmdArgs.push_back("-lm_p"); + else + CmdArgs.push_back("-lm"); } // FIXME: For some reason GCC passes -lgcc before adding @@ -4202,7 +4209,10 @@ void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasArg(options::OPT_pthread)) CmdArgs.push_back("-lpthread"); if (!Args.hasArg(options::OPT_shared)) - CmdArgs.push_back("-lc"); + if (Args.hasArg(options::OPT_pg)) + CmdArgs.push_back("-lc_p"); + else + CmdArgs.push_back("-lc"); CmdArgs.push_back("-lgcc"); } |

