git: cdfc673811ac - main - various: Fix nlist invocations

From: Dag-Erling Smørgrav <des_at_FreeBSD.org>
Date: Tue, 01 Sep 2026 12:50:08 UTC
The branch main has been updated by des:

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

commit cdfc673811aca2c6690f37bde9ef4896ea2e1d6b
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-01 12:49:24 +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
---
 lib/libkvm/kvm_amd64.c          |  6 +--
 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   | 96 ++++++++++++++++++++---------------------
 usr.bin/vmstat/vmstat.c         | 22 +++++-----
 usr.sbin/iostat/iostat.c        |  6 +--
 usr.sbin/pstat/pstat.c          |  8 ++--
 17 files changed, 119 insertions(+), 119 deletions(-)

diff --git a/lib/libkvm/kvm_amd64.c b/lib/libkvm/kvm_amd64.c
index acc7ac017a3c..5776be95fe59 100644
--- a/lib/libkvm/kvm_amd64.c
+++ b/lib/libkvm/kvm_amd64.c
@@ -140,7 +140,7 @@ _amd64_initvtop(kvm_t *kd)
 
 	if (found == 0) {
 		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");
@@ -148,7 +148,7 @@ _amd64_initvtop(kvm_t *kd)
 		}
 
 		nl[0].n_name = "kernphys";
-		nl[1].n_name = 0;
+		nl[1].n_name = NULL;
 
 		/* XXX
 		 * Relocatable kernels can still be loaded at 2M.
@@ -163,7 +163,7 @@ _amd64_initvtop(kvm_t *kd)
 	}
 
 	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 bf6d10c0c620..73b7947f25a7 100644
--- a/lib/libkvm/kvm_cptime.c
+++ b/lib/libkvm/kvm_cptime.c
@@ -43,7 +43,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 cbefa8f0064a..9d7370a89b32 100644
--- a/lib/libkvm/kvm_getloadavg.c
+++ b/lib/libkvm/kvm_getloadavg.c
@@ -42,11 +42,11 @@
 #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 a713c6752fa7..bb8746b5aefe 100644
--- a/lib/libkvm/kvm_getswapinfo.c
+++ b/lib/libkvm/kvm_getswapinfo.c
@@ -51,8 +51,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 776c486579a1..994f264a5907 100644
--- a/lib/libkvm/kvm_i386.c
+++ b/lib/libkvm/kvm_i386.c
@@ -132,7 +132,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__
@@ -145,7 +145,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;
@@ -181,7 +181,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 a83d927bcfd9..c61ec6250348 100644
--- a/lib/libkvm/kvm_pcpu.c
+++ b/lib/libkvm/kvm_pcpu.c
@@ -52,11 +52,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 },
 };
@@ -239,13 +239,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 a952888c9ef0..56b2c2c93613 100644
--- a/lib/libkvm/kvm_proc.c
+++ b/lib/libkvm/kvm_proc.c
@@ -609,15 +609,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 a60663d483e1..c4323eb80537 100644
--- a/lib/libkvm/kvm_vnet.c
+++ b/lib/libkvm/kvm_vnet.c
@@ -67,9 +67,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 81d51b81c5bd..091fe159436f 100644
--- a/lib/libmemstat/memstat_malloc.c
+++ b/lib/libmemstat/memstat_malloc.c
@@ -49,16 +49,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 ab8b2c1ed0bb..710737504dce 100644
--- a/sbin/ddb/ddb_capture.c
+++ b/sbin/ddb/ddb_capture.c
@@ -54,16 +54,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 417c565022da..294b8699260b 100644
--- a/usr.bin/ktrdump/ktrdump.c
+++ b/usr.bin/ktrdump/ktrdump.c
@@ -53,10 +53,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 121911b8a18b..7ff6ca9ff564 100644
--- a/usr.bin/netstat/Makefile
+++ b/usr.bin/netstat/Makefile
@@ -22,7 +22,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 30cdd69bc54b..ef07f6bda7a7 100644
--- a/usr.bin/netstat/nlist_symbols
+++ b/usr.bin/netstat/nlist_symbols
@@ -1,50 +1,50 @@
 #
 # 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	_pflowstats
-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	pflowstats
+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 9b4d3a25ee07..d8d33cb3a3a5 100644
--- a/usr.bin/vmstat/vmstat.c
+++ b/usr.bin/vmstat/vmstat.c
@@ -73,15 +73,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, },
 };
 
@@ -305,8 +305,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 fd11c7666955..5a971499c6e6 100644
--- a/usr.sbin/pstat/pstat.c
+++ b/usr.sbin/pstat/pstat.c
@@ -72,10 +72,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))