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:		4617a6cb82 ("nlist: Handle multiple symbol tables")
Reviewed by:	kib, jhb
Differential Revision:	https://reviews.freebsd.org/D59254
This commit is contained in:
Dag-Erling Smørgrav committed 2026-09-01 14:49:24 +02:00
1 parent f89b0ce5fd
commit cdfc673811
17 files changed
+118 -118

No files matched your search

+3 -3
View File
@@ -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");
+1 -1
View File
@@ -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 },
};
+3 -3
View File
@@ -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 },
};
/*
+2 -2
View File
@@ -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 }
};
+3 -3
View File
@@ -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");
+8 -8
View File
@@ -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;
+8 -8
View File
@@ -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;
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 = 0;
nlz[0].n_name = "zombproc";
nlz[1].n_name = NULL;
if (!kd->arch->ka_native(kd)) {
_kvm_err(kd, kd->program,
+2 -2
View File
@@ -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
+6 -6
View File
@@ -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 },
};
/*
+5 -5
View File
@@ -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 },
};
/*
+6 -6
View File
@@ -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
+4 -4
View File
@@ -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 }
};
+1 -1
View File
@@ -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}
+48 -48
View File
@@ -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
+11 -11
View File
@@ -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;
}
+3 -3
View File
@@ -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,
+4 -4
View File
@@ -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))