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 <[email protected]>
AuthorDate: 2026-09-01 12:49:24 +0000
Commit:     Dag-Erling Smørgrav <[email protected]>
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))

Reply via email to