git: 6c8a50c9196d - stable/14 - various: Fix nlist invocations

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Thu, 03 Sep 2026 11:57:11 UTC
The branch stable/14 has been updated by des:

URL: https://cgit.FreeBSD.org/src/commit/?id=6c8a50c9196d0d81550fe4ce755f8ff900137e10

commit 6c8a50c9196d0d81550fe4ce755f8ff900137e10
Author:     Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2026-09-01 12:49:24 +0000
Commit:     Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2026-09-03 11:56:44 +0000

    various: Fix nlist invocations
    
    Fix nlist(3) consumers that either expected our toolchain to prepend an
    underscore to symbol names or expected nlist(3) to ignore the mismatch,
    as it did until we overhauled it back in May.
    
    While here, also fix cases where the last element in the list had an
    empty string instead of NULL as sentinel.
    
    MFC after:      3 days
    Fixes:          4617a6cb82a6 ("nlist: Handle multiple symbol tables")
    Reviewed by:    kib, jhb
    Differential Revision:  https://reviews.freebsd.org/D59254
    
    (cherry picked from commit cdfc673811aca2c6690f37bde9ef4896ea2e1d6b)
---
 lib/libkvm/kvm_amd64.c          |  4 +-
 lib/libkvm/kvm_cptime.c         |  2 +-
 lib/libkvm/kvm_getloadavg.c     |  6 +--
 lib/libkvm/kvm_getswapinfo.c    |  4 +-
 lib/libkvm/kvm_i386.c           |  6 +--
 lib/libkvm/kvm_pcpu.c           | 16 +++----
 lib/libkvm/kvm_proc.c           | 18 ++++----
 lib/libkvm/kvm_vnet.c           |  4 +-
 lib/libmemstat/memstat_malloc.c | 12 +++---
 lib/libmemstat/memstat_uma.c    | 10 ++---
 sbin/ddb/ddb_capture.c          | 12 +++---
 usr.bin/ktrdump/ktrdump.c       |  8 ++--
 usr.bin/netstat/Makefile        |  2 +-
 usr.bin/netstat/nlist_symbols   | 94 ++++++++++++++++++++---------------------
 usr.bin/vmstat/vmstat.c         | 22 +++++-----
 usr.sbin/iostat/iostat.c        |  6 +--
 usr.sbin/pstat/pstat.c          |  8 ++--
 17 files changed, 117 insertions(+), 117 deletions(-)

diff --git a/lib/libkvm/kvm_amd64.c b/lib/libkvm/kvm_amd64.c
index cc41d3c8c5c8..71e843b51624 100644
--- a/lib/libkvm/kvm_amd64.c
+++ b/lib/libkvm/kvm_amd64.c
@@ -128,7 +128,7 @@ _amd64_initvtop(kvm_t *kd)
 	}
 
 	nl[0].n_name = "kernbase";
-	nl[1].n_name = 0;
+	nl[1].n_name = NULL;
 
 	if (kvm_nlist2(kd, nl) != 0) {
 		_kvm_err(kd, kd->program, "bad namelist - no kernbase");
@@ -137,7 +137,7 @@ _amd64_initvtop(kvm_t *kd)
 	kernbase = nl[0].n_value;
 
 	nl[0].n_name = "KPML4phys";
-	nl[1].n_name = 0;
+	nl[1].n_name = NULL;
 
 	if (kvm_nlist2(kd, nl) != 0) {
 		_kvm_err(kd, kd->program, "bad namelist - no KPML4phys");
diff --git a/lib/libkvm/kvm_cptime.c b/lib/libkvm/kvm_cptime.c
index 5e92b565486c..8961f7c954ab 100644
--- a/lib/libkvm/kvm_cptime.c
+++ b/lib/libkvm/kvm_cptime.c
@@ -44,7 +44,7 @@
 #include "kvm_private.h"
 
 static struct nlist kvm_cp_time_nl[] = {
-	{ .n_name = "_cp_time" },		/* (deprecated) */
+	{ .n_name = "cp_time" },		/* (deprecated) */
 	{ .n_name = NULL },
 };
 
diff --git a/lib/libkvm/kvm_getloadavg.c b/lib/libkvm/kvm_getloadavg.c
index b3b810752979..ef622c7f5b66 100644
--- a/lib/libkvm/kvm_getloadavg.c
+++ b/lib/libkvm/kvm_getloadavg.c
@@ -44,11 +44,11 @@ __SCCSID("@(#)kvm_getloadavg.c	8.1 (Berkeley) 6/4/93");
 #include "kvm_private.h"
 
 static struct nlist nl[] = {
-	{ .n_name = "_averunnable" },
+	{ .n_name = "averunnable" },
 #define	X_AVERUNNABLE	0
-	{ .n_name = "_fscale" },
+	{ .n_name = "fscale" },
 #define	X_FSCALE	1
-	{ .n_name = "" },
+	{ .n_name = NULL },
 };
 
 /*
diff --git a/lib/libkvm/kvm_getswapinfo.c b/lib/libkvm/kvm_getswapinfo.c
index 3c5019977d50..5091c7af5197 100644
--- a/lib/libkvm/kvm_getswapinfo.c
+++ b/lib/libkvm/kvm_getswapinfo.c
@@ -52,8 +52,8 @@
 #include "kvm_private.h"
 
 static struct nlist kvm_swap_nl[] = {
-	{ .n_name = "_swtailq" },	/* list of swap devices and sizes */
-	{ .n_name = "_dmmax" },		/* maximum size of a swap block */
+	{ .n_name = "swtailq" },	/* list of swap devices and sizes */
+	{ .n_name = "dmmax" },		/* maximum size of a swap block */
 	{ .n_name = NULL }
 };
 
diff --git a/lib/libkvm/kvm_i386.c b/lib/libkvm/kvm_i386.c
index f63d6888b686..3f02043614ea 100644
--- a/lib/libkvm/kvm_i386.c
+++ b/lib/libkvm/kvm_i386.c
@@ -134,7 +134,7 @@ _i386_initvtop(kvm_t *kd)
 	}
 
 	nl[0].n_name = "kernbase";
-	nl[1].n_name = 0;
+	nl[1].n_name = NULL;
 
 	if (kvm_nlist2(kd, nl) != 0) {
 #ifdef __i386__
@@ -147,7 +147,7 @@ _i386_initvtop(kvm_t *kd)
 		kernbase = nl[0].n_value;
 
 	nl[0].n_name = "IdlePDPT";
-	nl[1].n_name = 0;
+	nl[1].n_name = NULL;
 
 	if (kvm_nlist2(kd, nl) == 0) {
 		i386_physaddr_pae_t pa64;
@@ -183,7 +183,7 @@ _i386_initvtop(kvm_t *kd)
 		kd->vmst->pae = 1;
 	} else {
 		nl[0].n_name = "IdlePTD";
-		nl[1].n_name = 0;
+		nl[1].n_name = NULL;
 
 		if (kvm_nlist2(kd, nl) != 0) {
 			_kvm_err(kd, kd->program, "bad namelist");
diff --git a/lib/libkvm/kvm_pcpu.c b/lib/libkvm/kvm_pcpu.c
index 613fadffe435..8db55ea5ad7b 100644
--- a/lib/libkvm/kvm_pcpu.c
+++ b/lib/libkvm/kvm_pcpu.c
@@ -53,11 +53,11 @@
 #endif
 
 static struct nlist kvm_pcpu_nl[] = {
-	{ .n_name = "_cpuid_to_pcpu" },
-	{ .n_name = "_mp_maxcpus" },
-	{ .n_name = "_mp_ncpus" },
+	{ .n_name = "cpuid_to_pcpu" },
+	{ .n_name = "mp_maxcpus" },
+	{ .n_name = "mp_ncpus" },
 #ifdef __OFFSET_BY_PCPU
-	{ .n_name = "___pcpu" },
+	{ .n_name = "__pcpu" },
 #endif
 	{ .n_name = NULL },
 };
@@ -240,13 +240,13 @@ _kvm_dpcpu_init(kvm_t *kd)
 {
 	struct kvm_nlist nl[] = {
 #define	NLIST_START_SET_PCPU	0
-		{ .n_name = "___start_" DPCPU_SETNAME },
+		{ .n_name = "__start_" DPCPU_SETNAME },
 #define	NLIST_STOP_SET_PCPU	1
-		{ .n_name = "___stop_" DPCPU_SETNAME },
+		{ .n_name = "__stop_" DPCPU_SETNAME },
 #define	NLIST_DPCPU_OFF		2
-		{ .n_name = "_dpcpu_off" },
+		{ .n_name = "dpcpu_off" },
 #define	NLIST_MP_MAXCPUS	3
-		{ .n_name = "_mp_maxcpus" },
+		{ .n_name = "mp_maxcpus" },
 		{ .n_name = NULL },
 	};
 	uintptr_t *dpcpu_off_buf;
diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c
index 6ad5d4a7cea6..3c1cfeca971e 100644
--- a/lib/libkvm/kvm_proc.c
+++ b/lib/libkvm/kvm_proc.c
@@ -602,15 +602,15 @@ liveout:
 		struct nlist nl[6], *p;
 		struct nlist nlz[2];
 
-		nl[0].n_name = "_nprocs";
-		nl[1].n_name = "_allproc";
-		nl[2].n_name = "_ticks";
-		nl[3].n_name = "_hz";
-		nl[4].n_name = "_cpu_tick_frequency";
-		nl[5].n_name = 0;
-
-		nlz[0].n_name = "_zombproc";
-		nlz[1].n_name = 0;
+		nl[0].n_name = "nprocs";
+		nl[1].n_name = "allproc";
+		nl[2].n_name = "ticks";
+		nl[3].n_name = "hz";
+		nl[4].n_name = "cpu_tick_frequency";
+		nl[5].n_name = NULL;
+
+		nlz[0].n_name = "zombproc";
+		nlz[1].n_name = NULL;
 
 		if (!kd->arch->ka_native(kd)) {
 			_kvm_err(kd, kd->program,
diff --git a/lib/libkvm/kvm_vnet.c b/lib/libkvm/kvm_vnet.c
index 03e80d0458f3..6690a84a064e 100644
--- a/lib/libkvm/kvm_vnet.c
+++ b/lib/libkvm/kvm_vnet.c
@@ -68,9 +68,9 @@ _kvm_vnet_selectpid(kvm_t *kd, pid_t pid)
 		 * here to __{start,stop}_set_vnet.
 		 */
 #define	NLIST_START_VNET	0
-		{ .n_name = "___start_" VNET_SETNAME },
+		{ .n_name = "__start_" VNET_SETNAME },
 #define	NLIST_STOP_VNET		1
-		{ .n_name = "___stop_" VNET_SETNAME },
+		{ .n_name = "__stop_" VNET_SETNAME },
 #define	NLIST_VNET_HEAD		2
 		{ .n_name = "vnet_head" },
 #define	NLIST_ALLPROC		3
diff --git a/lib/libmemstat/memstat_malloc.c b/lib/libmemstat/memstat_malloc.c
index 9bc281e1c2b3..156f6b753f21 100644
--- a/lib/libmemstat/memstat_malloc.c
+++ b/lib/libmemstat/memstat_malloc.c
@@ -50,16 +50,16 @@ static int	memstat_malloc_zone_init_kvm(kvm_t *kvm);
 
 static struct nlist namelist[] = {
 #define	X_KMEMSTATISTICS	0
-	{ .n_name = "_kmemstatistics" },
+	{ .n_name = "kmemstatistics" },
 #define	X_KMEMZONES		1
-	{ .n_name = "_kmemzones" },
+	{ .n_name = "kmemzones" },
 #define	X_NUMZONES		2
-	{ .n_name = "_numzones" },
+	{ .n_name = "numzones" },
 #define	X_VM_MALLOC_ZONE_COUNT	3
-	{ .n_name = "_vm_malloc_zone_count" },
+	{ .n_name = "vm_malloc_zone_count" },
 #define	X_MP_MAXCPUS		4
-	{ .n_name = "_mp_maxcpus" },
-	{ .n_name = "" },
+	{ .n_name = "mp_maxcpus" },
+	{ .n_name = NULL },
 };
 
 /*
diff --git a/lib/libmemstat/memstat_uma.c b/lib/libmemstat/memstat_uma.c
index a125e7b7c4be..8c858c39ef09 100644
--- a/lib/libmemstat/memstat_uma.c
+++ b/lib/libmemstat/memstat_uma.c
@@ -51,14 +51,14 @@
 
 static struct nlist namelist[] = {
 #define	X_UMA_KEGS	0
-	{ .n_name = "_uma_kegs" },
+	{ .n_name = "uma_kegs" },
 #define	X_MP_MAXID	1
-	{ .n_name = "_mp_maxid" },
+	{ .n_name = "mp_maxid" },
 #define	X_ALL_CPUS	2
-	{ .n_name = "_all_cpus" },
+	{ .n_name = "all_cpus" },
 #define	X_VM_NDOMAINS	3
-	{ .n_name = "_vm_ndomains" },
-	{ .n_name = "" },
+	{ .n_name = "vm_ndomains" },
+	{ .n_name = NULL },
 };
 
 /*
diff --git a/sbin/ddb/ddb_capture.c b/sbin/ddb/ddb_capture.c
index fcff16e292ea..12e7497d2484 100644
--- a/sbin/ddb/ddb_capture.c
+++ b/sbin/ddb/ddb_capture.c
@@ -55,16 +55,16 @@
 
 static struct nlist namelist[] = {
 #define X_DB_CAPTURE_BUF	0
-	{ .n_name = "_db_capture_buf" },
+	{ .n_name = "db_capture_buf" },
 #define X_DB_CAPTURE_BUFSIZE	1
-	{ .n_name = "_db_capture_bufsize" },
+	{ .n_name = "db_capture_bufsize" },
 #define X_DB_CAPTURE_MAXBUFSIZE	2
-	{ .n_name = "_db_capture_maxbufsize" },
+	{ .n_name = "db_capture_maxbufsize" },
 #define X_DB_CAPTURE_BUFOFF	3
-	{ .n_name = "_db_capture_bufoff" },
+	{ .n_name = "db_capture_bufoff" },
 #define	X_DB_CAPTURE_INPROGRESS	4
-	{ .n_name = "_db_capture_inprogress" },
-	{ .n_name = "" },
+	{ .n_name = "db_capture_inprogress" },
+	{ .n_name = NULL },
 };
 
 static int
diff --git a/usr.bin/ktrdump/ktrdump.c b/usr.bin/ktrdump/ktrdump.c
index f1c49cbbd418..596c3cd569d6 100644
--- a/usr.bin/ktrdump/ktrdump.c
+++ b/usr.bin/ktrdump/ktrdump.c
@@ -54,10 +54,10 @@
 static void usage(void) __dead2;
 
 static struct nlist nl[] = {
-	{ .n_name = "_ktr_version" },
-	{ .n_name = "_ktr_entries" },
-	{ .n_name = "_ktr_idx" },
-	{ .n_name = "_ktr_buf" },
+	{ .n_name = "ktr_version" },
+	{ .n_name = "ktr_entries" },
+	{ .n_name = "ktr_idx" },
+	{ .n_name = "ktr_buf" },
 	{ .n_name = NULL }
 };
 
diff --git a/usr.bin/netstat/Makefile b/usr.bin/netstat/Makefile
index 98bc7b866d9d..ba008be98abb 100644
--- a/usr.bin/netstat/Makefile
+++ b/usr.bin/netstat/Makefile
@@ -24,7 +24,7 @@ nl_defs.h: nlist_symbols
 		print "extern struct nlist nl[];"; \
 		i = 0; \
 	    } \
-	    !/^\#/ { printf("\#define\tN%s\t%s\n", toupper($$2), i++); }' \
+	    !/^\#/ { printf("\#define\tN_%s\t%s\n", toupper($$2), i++); }' \
 	    < ${.ALLSRC} > ${.TARGET} || rm -f ${.TARGET}
 CLEANFILES+=	nl_symbols.c nl_defs.h
 CFLAGS+=	-I${.OBJDIR}
diff --git a/usr.bin/netstat/nlist_symbols b/usr.bin/netstat/nlist_symbols
index 7d7fcdc4c249..f81941e3bdf7 100644
--- a/usr.bin/netstat/nlist_symbols
+++ b/usr.bin/netstat/nlist_symbols
@@ -1,49 +1,49 @@
 #
 # module_name	symbol_name
-all	_ahstat
-all	_arpstat
-all	_carpstats
-all	_espstat
-all	_icmp6stat
-all	_icmpstat
-all	_igmpstat
-all	_ip6stat
-all	_ipcompstat
-all	_ipsec4stat
-all	_ipsec6stat
-all	_ipstat
-all	_mf6ctable
-all	_mfchashtbl
-all	_mfctablesize
-all	_mif6table
-all	_mrt6stat
-all	_mrtstat
-all	_netisr_bindthreads
-all	_netisr_defaultqlimit
-all	_netisr_dispatch_policy
-all	_netisr_maxprot
-all	_netisr_maxqlimit
-all	_netisr_maxthreads
-all	_netisr_proto
-all	_ngsocklist
-all	_nws
-all	_nws_array
-all	_nws_count
-all	_pfkeystat
-all	_pfsyncstats
-all	_pim6stat
-all	_pimstat
-all	_rip6stat
-all	_rtree
-all	_rtstat
-all	_sctpstat
-all	_sfstat
-all	_tcpstat
-all	_tcps_states
-all	_udpstat
-all	_unp_count
-all	_unp_dhead
-all	_unp_gencnt
-all	_unp_shead
-all	_unp_sphead
-all	_viftable
+all	ahstat
+all	arpstat
+all	carpstats
+all	espstat
+all	icmp6stat
+all	icmpstat
+all	igmpstat
+all	ip6stat
+all	ipcompstat
+all	ipsec4stat
+all	ipsec6stat
+all	ipstat
+all	mf6ctable
+all	mfchashtbl
+all	mfctablesize
+all	mif6table
+all	mrt6stat
+all	mrtstat
+all	netisr_bindthreads
+all	netisr_defaultqlimit
+all	netisr_dispatch_policy
+all	netisr_maxprot
+all	netisr_maxqlimit
+all	netisr_maxthreads
+all	netisr_proto
+all	ngsocklist
+all	nws
+all	nws_array
+all	nws_count
+all	pfkeystat
+all	pfsyncstats
+all	pim6stat
+all	pimstat
+all	rip6stat
+all	rtree
+all	rtstat
+all	sctpstat
+all	sfstat
+all	tcpstat
+all	tcps_states
+all	udpstat
+all	unp_count
+all	unp_dhead
+all	unp_gencnt
+all	unp_shead
+all	unp_sphead
+all	viftable
diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c
index 3ae34c0219c6..59dacbc92d9b 100644
--- a/usr.bin/vmstat/vmstat.c
+++ b/usr.bin/vmstat/vmstat.c
@@ -87,15 +87,15 @@ enum x_stats { X_SUM, X_HZ, X_STATHZ, X_NCHSTATS, X_INTRNAMES, X_SINTRNAMES,
     X_INTRCNT, X_SINTRCNT, X_NINTRCNT };
 
 static struct nlist namelist[] = {
-	[X_SUM] = { .n_name = "_vm_cnt", },
-	[X_HZ] = { .n_name = "_hz", },
-	[X_STATHZ] = { .n_name = "_stathz", },
-	[X_NCHSTATS] = { .n_name = "_nchstats", },
-	[X_INTRNAMES] = { .n_name = "_intrnames", },
-	[X_SINTRNAMES] = { .n_name = "_sintrnames", },
-	[X_INTRCNT] = { .n_name = "_intrcnt", },
-	[X_SINTRCNT] = { .n_name = "_sintrcnt", },
-	[X_NINTRCNT] = { .n_name = "_nintrcnt", },
+	[X_SUM] = { .n_name = "vm_cnt", },
+	[X_HZ] = { .n_name = "hz", },
+	[X_STATHZ] = { .n_name = "stathz", },
+	[X_NCHSTATS] = { .n_name = "nchstats", },
+	[X_INTRNAMES] = { .n_name = "intrnames", },
+	[X_SINTRNAMES] = { .n_name = "sintrnames", },
+	[X_INTRCNT] = { .n_name = "intrcnt", },
+	[X_SINTRCNT] = { .n_name = "sintrcnt", },
+	[X_NINTRCNT] = { .n_name = "nintrcnt", },
 	{ .n_name = NULL, },
 };
 
@@ -318,8 +318,8 @@ retry_nlist:
 			 * found try looking up older 'cnt' symbol.
 			 * */
 			if (namelist[X_SUM].n_type == 0 &&
-			    strcmp(namelist[X_SUM].n_name, "_vm_cnt") == 0) {
-				namelist[X_SUM].n_name = "_cnt";
+			    strcmp(namelist[X_SUM].n_name, "vm_cnt") == 0) {
+				namelist[X_SUM].n_name = "cnt";
 				goto retry_nlist;
 			}
 
diff --git a/usr.sbin/iostat/iostat.c b/usr.sbin/iostat/iostat.c
index ec18f4fd35b3..1b6eec1be5f9 100644
--- a/usr.sbin/iostat/iostat.c
+++ b/usr.sbin/iostat/iostat.c
@@ -119,13 +119,13 @@
 
 static struct nlist namelist[] = {
 #define X_TTY_NIN	0
-	{ .n_name = "_tty_nin",
+	{ .n_name = "tty_nin",
 	  .n_type = 0, .n_other = 0, .n_desc = 0, .n_value = 0 },
 #define X_TTY_NOUT	1
-	{ .n_name = "_tty_nout",
+	{ .n_name = "tty_nout",
 	  .n_type = 0, .n_other = 0, .n_desc = 0, .n_value = 0 },
 #define X_BOOTTIME	2
-	{ .n_name = "_boottime",
+	{ .n_name = "boottime",
 	  .n_type = 0, .n_other = 0, .n_desc = 0, .n_value = 0 },
 #define X_END		2
 	{ .n_name = NULL,
diff --git a/usr.sbin/pstat/pstat.c b/usr.sbin/pstat/pstat.c
index 4b31947f6c46..9f94d9aae9a5 100644
--- a/usr.sbin/pstat/pstat.c
+++ b/usr.sbin/pstat/pstat.c
@@ -84,10 +84,10 @@ static struct {
 	int order;
 	const char *name;
 } namelist[] = {
-	{ NL_CONSTTY, "_constty" },
-	{ NL_MAXFILES, "_maxfiles" },
-	{ NL_NFILES, "_openfiles" },
-	{ NL_TTY_LIST, "_tty_list" },
+	{ NL_CONSTTY, "constty" },
+	{ NL_MAXFILES, "maxfiles" },
+	{ NL_NFILES, "openfiles" },
+	{ NL_TTY_LIST, "tty_list" },
 	{ NL_MARKER, "" },
 };
 #define NNAMES	(sizeof(namelist) / sizeof(*namelist))