[clang] [Driver] Add LTO support for NetBSD (PR #187923)
YAMAMOTO Takashi via cfe-commits
cfe-commits at lists.llvm.org
Sat Apr 4 00:13:56 PDT 2026
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 <imuwoto at gmail.com>
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
More information about the cfe-commits
mailing list