pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

clang-netbsd: Add X-Ray support



Module Name:	pkgsrc-wip
Committed By:	Kamil Rytarowski <n54%gmx.com@localhost>
Pushed By:	kamil
Date:		Fri Feb 16 05:13:34 2018 +0100
Changeset:	5d347b0fc565f842527398f9fe8150ae408315dc

Modified Files:
	clang-netbsd/Makefile.common
	clang-netbsd/distinfo
Added Files:
	clang-netbsd/patches/patch-lib_Driver_ToolChains_NetBSD.cpp

Log Message:
clang-netbsd: Add X-Ray support

While there, disable llvm buildlink3 in order to track here just patches.

Patch untested.

Sponsored by <The NetBSD Foundation>

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=5d347b0fc565f842527398f9fe8150ae408315dc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 clang-netbsd/Makefile.common                       |   4 +-
 clang-netbsd/distinfo                              |   1 +
 .../patches/patch-lib_Driver_ToolChains_NetBSD.cpp | 169 +++++++++++++++++++++
 3 files changed, 172 insertions(+), 2 deletions(-)

diffs:
diff --git a/clang-netbsd/Makefile.common b/clang-netbsd/Makefile.common
index 6b82874ef4..a90e7606d0 100644
--- a/clang-netbsd/Makefile.common
+++ b/clang-netbsd/Makefile.common
@@ -113,7 +113,7 @@ post-extract:
 .include "../../devel/googletest/buildlink3.mk"
 .include "../../devel/zlib/buildlink3.mk"
 .include "../../lang/python/tool.mk"
-DEPENDS+=	llvm-${PKGVERSION_NOREV}{,nb*}:../../wip/llvm-netbsd
-.include "../../wip/llvm-netbsd/buildlink3.mk"
+#DEPENDS+=	llvm-${PKGVERSION_NOREV}{,nb*}:../../wip/llvm-netbsd
+#.include "../../wip/llvm-netbsd/buildlink3.mk"
 .include "../../textproc/libxml2/buildlink3.mk"
 .include "../../mk/bsd.pkg.mk"
diff --git a/clang-netbsd/distinfo b/clang-netbsd/distinfo
index b0f519db5d..3432e5d4b9 100644
--- a/clang-netbsd/distinfo
+++ b/clang-netbsd/distinfo
@@ -1,5 +1,6 @@
 $NetBSD: distinfo,v 1.35 2015/09/11 01:21:57 tnn Exp $
 
 SHA1 (patch-lib_Basic_Targets_OSTargets.h) = 9d229074c8e36be37176349971667817b227eaa5
+SHA1 (patch-lib_Driver_ToolChains_NetBSD.cpp) = e9fa3adccfb3ddfc24b83d51ced5dfa9ac17938e
 SHA1 (patch-test_Sema_128bitfloat.cpp) = cc11582dd9495b603a22ef73609ab04f65324da2
 SHA1 (patch-tools_clang-format_CMakeLists.txt) = f119d2a94cbfb8c00a285d1aa7789ed26f8309cf
diff --git a/clang-netbsd/patches/patch-lib_Driver_ToolChains_NetBSD.cpp b/clang-netbsd/patches/patch-lib_Driver_ToolChains_NetBSD.cpp
new file mode 100644
index 0000000000..56b1aaf42a
--- /dev/null
+++ b/clang-netbsd/patches/patch-lib_Driver_ToolChains_NetBSD.cpp
@@ -0,0 +1,169 @@
+$NetBSD$
+
+--- lib/Driver/ToolChains/NetBSD.cpp.orig	2018-02-16 03:40:05.438666489 +0000
++++ lib/Driver/ToolChains/NetBSD.cpp
+@@ -24,6 +24,30 @@ using namespace clang::driver::toolchain
+ using namespace clang;
+ using namespace llvm::opt;
+ 
++static bool addXRayRuntime(const ToolChain &TC, const ArgList &Args,
++                           ArgStringList &CmdArgs) {
++  if (Args.hasArg(options::OPT_shared))
++    return false;
++
++  if (Args.hasFlag(options::OPT_fxray_instrument,
++                   options::OPT_fnoxray_instrument, false)) {
++    CmdArgs.push_back("-whole-archive");
++    CmdArgs.push_back(TC.getCompilerRTArgString(Args, "xray", false));
++    CmdArgs.push_back("-no-whole-archive");
++    return true;
++  }
++
++  return false;
++}
++
++static void linkXRayRuntimeDeps(const ToolChain &TC, const ArgList &Args,
++                                ArgStringList &CmdArgs) {
++  CmdArgs.push_back("--no-as-needed");
++  CmdArgs.push_back("-pthread");
++  CmdArgs.push_back("-lrt");
++  CmdArgs.push_back("-lm");
++}
++
+ void netbsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
+                                      const InputInfo &Output,
+                                      const InputInfoList &Inputs,
+@@ -112,7 +136,9 @@ void netbsd::Linker::ConstructJob(Compil
+                                   const InputInfoList &Inputs,
+                                   const ArgList &Args,
+                                   const char *LinkingOutput) const {
+-  const Driver &D = getToolChain().getDriver();
++  const toolchains::NetBSD &ToolChain =
++    static_cast<const toolchains::NetBSD &>(getToolChain());
++  const Driver &D = ToolChain.getDriver();
+   ArgStringList CmdArgs;
+ 
+   if (!D.SysRoot.empty())
+@@ -135,7 +161,7 @@ void netbsd::Linker::ConstructJob(Compil
+ 
+   // Many NetBSD architectures support more than one ABI.
+   // Determine the correct emulation for ld.
+-  switch (getToolChain().getArch()) {
++  switch (ToolChain.getArch()) {
+   case llvm::Triple::x86:
+     CmdArgs.push_back("-m");
+     CmdArgs.push_back("elf_i386");
+@@ -143,7 +169,7 @@ void netbsd::Linker::ConstructJob(Compil
+   case llvm::Triple::arm:
+   case llvm::Triple::thumb:
+     CmdArgs.push_back("-m");
+-    switch (getToolChain().getTriple().getEnvironment()) {
++    switch (ToolChain.getTriple().getEnvironment()) {
+     case llvm::Triple::EABI:
+     case llvm::Triple::GNUEABI:
+       CmdArgs.push_back("armelf_nbsd_eabi");
+@@ -159,9 +185,9 @@ void netbsd::Linker::ConstructJob(Compil
+     break;
+   case llvm::Triple::armeb:
+   case llvm::Triple::thumbeb:
+-    arm::appendEBLinkFlags(Args, CmdArgs, getToolChain().getEffectiveTriple());
++    arm::appendEBLinkFlags(Args, CmdArgs, ToolChain.getEffectiveTriple());
+     CmdArgs.push_back("-m");
+-    switch (getToolChain().getTriple().getEnvironment()) {
++    switch (ToolChain.getTriple().getEnvironment()) {
+     case llvm::Triple::EABI:
+     case llvm::Triple::GNUEABI:
+       CmdArgs.push_back("armelfb_nbsd_eabi");
+@@ -179,13 +205,13 @@ void netbsd::Linker::ConstructJob(Compil
+   case llvm::Triple::mips64el:
+     if (mips::hasMipsAbiArg(Args, "32")) {
+       CmdArgs.push_back("-m");
+-      if (getToolChain().getArch() == llvm::Triple::mips64)
++      if (ToolChain.getArch() == llvm::Triple::mips64)
+         CmdArgs.push_back("elf32btsmip");
+       else
+         CmdArgs.push_back("elf32ltsmip");
+     } else if (mips::hasMipsAbiArg(Args, "64")) {
+       CmdArgs.push_back("-m");
+-      if (getToolChain().getArch() == llvm::Triple::mips64)
++      if (ToolChain.getArch() == llvm::Triple::mips64)
+         CmdArgs.push_back("elf64btsmip");
+       else
+         CmdArgs.push_back("elf64ltsmip");
+@@ -226,16 +252,16 @@ void netbsd::Linker::ConstructJob(Compil
+   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+     if (!Args.hasArg(options::OPT_shared)) {
+       CmdArgs.push_back(
+-          Args.MakeArgString(getToolChain().GetFilePath("crt0.o")));
++          Args.MakeArgString(ToolChain.GetFilePath("crt0.o")));
+     }
+     CmdArgs.push_back(
+-        Args.MakeArgString(getToolChain().GetFilePath("crti.o")));
++        Args.MakeArgString(ToolChain.GetFilePath("crti.o")));
+     if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie)) {
+       CmdArgs.push_back(
+-          Args.MakeArgString(getToolChain().GetFilePath("crtbeginS.o")));
++          Args.MakeArgString(ToolChain.GetFilePath("crtbeginS.o")));
+     } else {
+       CmdArgs.push_back(
+-          Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
++          Args.MakeArgString(ToolChain.GetFilePath("crtbegin.o")));
+     }
+   }
+ 
+@@ -248,13 +274,14 @@ void netbsd::Linker::ConstructJob(Compil
+   Args.AddAllArgs(CmdArgs, options::OPT_r);
+ 
+   bool NeedsSanitizerDeps = addSanitizerRuntimes(getToolChain(), Args, CmdArgs);
++  bool NeedsXRayDeps = addXRayRuntime(ToolChain, Args, CmdArgs);
+   AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+ 
+   unsigned Major, Minor, Micro;
+-  getToolChain().getTriple().getOSVersion(Major, Minor, Micro);
++  ToolChain.getTriple().getOSVersion(Major, Minor, Micro);
+   bool useLibgcc = true;
+   if (Major >= 7 || Major == 0) {
+-    switch (getToolChain().getArch()) {
++    switch (ToolChain.getArch()) {
+     case llvm::Triple::aarch64:
+     case llvm::Triple::aarch64_be:
+     case llvm::Triple::arm:
+@@ -278,12 +305,14 @@ void netbsd::Linker::ConstructJob(Compil
+   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
+     addOpenMPRuntime(CmdArgs, getToolChain(), Args);
+     if (D.CCCIsCXX()) {
+-      if (getToolChain().ShouldLinkCXXStdlib(Args))
+-        getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
++      if (ToolChain.ShouldLinkCXXStdlib(Args))
++        ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs);
+       CmdArgs.push_back("-lm");
+     }
+     if (NeedsSanitizerDeps)
+       linkSanitizerRuntimeDeps(getToolChain(), CmdArgs);
++    if (NeedsXRayDeps)
++      linkXRayRuntimeDeps(ToolChain, Args, CmdArgs);
+     if (Args.hasArg(options::OPT_pthread))
+       CmdArgs.push_back("-lpthread");
+     CmdArgs.push_back("-lc");
+@@ -308,16 +337,16 @@ void netbsd::Linker::ConstructJob(Compil
+   if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+     if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie))
+       CmdArgs.push_back(
+-          Args.MakeArgString(getToolChain().GetFilePath("crtendS.o")));
++          Args.MakeArgString(ToolChain.GetFilePath("crtendS.o")));
+     else
+       CmdArgs.push_back(
+-          Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
+-    CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o")));
++          Args.MakeArgString(ToolChain.GetFilePath("crtend.o")));
++    CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o")));
+   }
+ 
+-  getToolChain().addProfileRTLibs(Args, CmdArgs);
++  ToolChain.addProfileRTLibs(Args, CmdArgs);
+ 
+-  const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
++  const char *Exec = Args.MakeArgString(ToolChain.GetLinkerPath());
+   C.addCommand(llvm::make_unique<Command>(JA, *this, Exec, CmdArgs, Inputs));
+ }
+ 


Home | Main Index | Thread Index | Old Index