https://github.com/yamt updated https://github.com/llvm/llvm-project/pull/187923

>From 0f7ec6a82cb25f8c255a0bf4c8b72fd7aa63c596 Mon Sep 17 00:00:00 2001
From: YAMAMOTO Takashi <[email protected]>
Date: Sun, 22 Mar 2026 06:18:14 +0000
Subject: [PATCH] [Driver] Add LTO support for NetBSD

Basically copy-and-paste from FreeBSD/OpenBSD.

Note: as system /usr/bin/ld is not threaded, LLVMgold.so
fails if it attempts to create threads. i couldn't find
a way to suppress the use of threads. -fuse-ld=lld works.
---
 clang/lib/Driver/ToolChains/NetBSD.cpp | 6 ++++++
 clang/lib/Driver/ToolChains/NetBSD.h   | 1 +
 clang/test/Driver/netbsd.c             | 5 +++++
 clang/test/Driver/save-stats.c         | 2 ++
 4 files changed, 14 insertions(+)

diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp 
b/clang/lib/Driver/ToolChains/NetBSD.cpp
index ea722b59853d6..56a42710106fe 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.cpp
+++ b/clang/lib/Driver/ToolChains/NetBSD.cpp
@@ -274,6 +274,10 @@ void netbsd::Linker::ConstructJob(Compilation &C, const 
JobAction &JA,
                             options::OPT_s, options::OPT_t});
   ToolChain.AddFilePathLibArgs(Args, CmdArgs);
 
+  if (D.isUsingLTO())
+    addLTOOptions(ToolChain, Args, CmdArgs, Output, Inputs,
+                  D.getLTOMode() == LTOK_Thin);
+
   bool NeedsSanitizerDeps = addSanitizerRuntimes(ToolChain, Args, CmdArgs);
   bool NeedsXRayDeps = addXRayRuntime(ToolChain, Args, CmdArgs);
   AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA);
@@ -437,6 +441,8 @@ Tool *NetBSD::buildAssembler() const {
 
 Tool *NetBSD::buildLinker() const { return new tools::netbsd::Linker(*this); }
 
+bool NetBSD::HasNativeLLVMSupport() const { return true; }
+
 ToolChain::CXXStdlibType NetBSD::GetDefaultCXXStdlibType() const {
   switch (getArch()) {
   case llvm::Triple::aarch64:
diff --git a/clang/lib/Driver/ToolChains/NetBSD.h 
b/clang/lib/Driver/ToolChains/NetBSD.h
index 96303acaa0099..45848e06abef5 100644
--- a/clang/lib/Driver/ToolChains/NetBSD.h
+++ b/clang/lib/Driver/ToolChains/NetBSD.h
@@ -52,6 +52,7 @@ class LLVM_LIBRARY_VISIBILITY NetBSD : public Generic_ELF {
 public:
   NetBSD(const Driver &D, const llvm::Triple &Triple,
          const llvm::opt::ArgList &Args);
+  bool HasNativeLLVMSupport() const override;
 
   bool IsMathErrnoDefault() const override { return false; }
   bool IsObjCNonFragileABIDefault() const override { return true; }
diff --git a/clang/test/Driver/netbsd.c b/clang/test/Driver/netbsd.c
index 8404bb6bbd528..a8c682ac9f8cc 100644
--- a/clang/test/Driver/netbsd.c
+++ b/clang/test/Driver/netbsd.c
@@ -338,3 +338,8 @@
 // RUN: %clang --target=riscv64-unknown-netbsd -mno-relax -### %s 2>&1 \
 // RUN:   | FileCheck -check-prefix=RISCV-FLAGS %s
 // RISCV-FLAGS: "-X" "--no-relax"
+
+// Check passing LTO flags to the linker
+// RUN: %clang --target=amd64-unknown-netbsd -flto -### %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-LTO-FLAGS %s
+// CHECK-LTO-FLAGS: "-plugin-opt=mcpu=x86-64"
diff --git a/clang/test/Driver/save-stats.c b/clang/test/Driver/save-stats.c
index ad7867a991686..312e0161dd22a 100644
--- a/clang/test/Driver/save-stats.c
+++ b/clang/test/Driver/save-stats.c
@@ -24,6 +24,8 @@
 // RUN: %clang --target=x86_64-unknown-linux -save-stats -flto -o 
obj/dir/save-stats.exe -Wl,-plugin-opt=-dummy %s -### 2>&1 | FileCheck %s 
-check-prefix=CHECK-LTO
 // RUN: %clang --target=x86_64-unknown-freebsd -save-stats -flto -o 
obj/dir/save-stats.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO
 // RUN: %clang --target=x86_64-unknown-freebsd -save-stats -flto -o 
obj/dir/save-stats.exe -Wl,-plugin-opt=-dummy %s -### 2>&1 | FileCheck %s 
-check-prefix=CHECK-LTO
+// RUN: %clang --target=x86_64-unknown-netbsd -save-stats -flto -o 
obj/dir/save-stats.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO
+// RUN: %clang --target=x86_64-unknown-netbsd -save-stats -flto -o 
obj/dir/save-stats.exe -Wl,-plugin-opt=-dummy %s -### 2>&1 | FileCheck %s 
-check-prefix=CHECK-LTO
 // RUN: %clang --target=x86_64-unknown-openbsd -save-stats -flto -o 
obj/dir/save-stats.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO
 // RUN: %clang --target=x86_64-unknown-openbsd -save-stats -flto -o 
obj/dir/save-stats.exe -Wl,-plugin-opt=-dummy %s -### 2>&1 | FileCheck %s 
-check-prefix=CHECK-LTO
 // RUN: %clang --target=x86_64-unknown-fuchsia -save-stats -flto -o 
obj/dir/save-stats.exe %s -### 2>&1 | FileCheck %s -check-prefix=CHECK-LTO

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to