Download raw body.
nlist(3) users: drop leading underscores
Years ago, in the good old (but dark) ages of a.out, C symbols would get
prefixed with an underscore (`_'). But on ELF platforms, they would not
be modified.
As a result of this, nlist(3), if it fails to find a symbol but the
symbol names starts with an underscore, tries a second time, without the
underscore.
This allowed nlist users to always look for _foo and work on both a.out
and ELF platforms.
It's been more than 10 years since all OpenBSD platforms use ELF
binaries. Therefore there is no need to search for _foo symbols, as none
will be found.
The following diff adjusts the symbol lists of all nlist(3) consumers in
base, to remove that leading underscore.
I am *NOT* suggesting that the logic to retry without the leading
underscore in nlist() gets removed, yet. Give it a few more years.
Index: bin/ps/nlist.c
===================================================================
RCS file: /OpenBSD/src/bin/ps/nlist.c,v
diff -u -p -r1.24 nlist.c
--- bin/ps/nlist.c 2 Jul 2025 13:24:48 -0000 1.24
+++ bin/ps/nlist.c 2 Nov 2026 13:02:32 -0000
@@ -46,13 +46,13 @@
#include "ps.h"
struct nlist psnl[] = {
- {"_fscale"},
+ {"fscale"},
#define X_FSCALE 0
- {"_ccpu"},
+ {"ccpu"},
#define X_CCPU 1
- {"_physmem"},
+ {"physmem"},
#define X_PHYSMEM 2
- {"_maxslp"},
+ {"maxslp"},
#define X_MAXSLP 3
{NULL}
};
Index: lib/libkvm/kvm.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm.c,v
diff -u -p -r1.72 kvm.c
--- lib/libkvm/kvm.c 22 Feb 2022 17:35:01 -0000 1.72
+++ lib/libkvm/kvm.c 2 Nov 2026 13:02:32 -0000
@@ -819,7 +819,7 @@ kvm_dump_inval(kvm_t *kd)
_kvm_err(kd, kd->program, "clearing dump on live kernel");
return (-1);
}
- nl[0].n_name = "_dumpmag";
+ nl[0].n_name = "dumpmag";
nl[1].n_name = NULL;
if (kvm_nlist(kd, nl) == -1) {
Index: lib/libkvm/kvm_amd64.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm_amd64.c,v
diff -u -p -r1.17 kvm_amd64.c
--- lib/libkvm/kvm_amd64.c 4 Jun 2026 05:25:04 -0000 1.17
+++ lib/libkvm/kvm_amd64.c 2 Nov 2026 13:02:32 -0000
@@ -76,8 +76,8 @@ _kvm_initvtop(kvm_t *kd)
{
struct nlist nl[3];
- nl[0].n_name = "_pmap_direct_base";
- nl[1].n_name = "_pmap_direct_end";
+ nl[0].n_name = "pmap_direct_base";
+ nl[1].n_name = "pmap_direct_end";
nl[2].n_name = NULL;
if (kvm_nlist(kd, nl) != 0) {
Index: lib/libkvm/kvm_file2.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm_file2.c,v
diff -u -p -r1.58 kvm_file2.c
--- lib/libkvm/kvm_file2.c 11 Feb 2024 21:29:12 -0000 1.58
+++ lib/libkvm/kvm_file2.c 2 Nov 2026 13:02:32 -0000
@@ -208,8 +208,8 @@ kvm_deadfile_byfile(kvm_t *kd, int op, i
struct filelist filehead;
int nfiles;
- nl[0].n_name = "_filehead";
- nl[1].n_name = "_numfiles";
+ nl[0].n_name = "filehead";
+ nl[1].n_name = "numfiles";
nl[2].n_name = 0;
if (kvm_nlist(kd, nl) != 0) {
@@ -279,9 +279,9 @@ kvm_deadfile_byid(kvm_t *kd, int op, int
char *filebuf = NULL;
int i, nfiles;
- nl[0].n_name = "_filehead";
- nl[1].n_name = "_numfiles";
- nl[2].n_name = "_allprocess";
+ nl[0].n_name = "filehead";
+ nl[1].n_name = "numfiles";
+ nl[2].n_name = "allprocess";
nl[3].n_name = 0;
if (kvm_nlist(kd, nl) != 0) {
Index: lib/libkvm/kvm_getloadavg.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm_getloadavg.c,v
diff -u -p -r1.10 kvm_getloadavg.c
--- lib/libkvm/kvm_getloadavg.c 10 Sep 2021 00:02:43 -0000 1.10
+++ lib/libkvm/kvm_getloadavg.c 2 Nov 2026 13:02:32 -0000
@@ -46,9 +46,9 @@
#include "kvm_private.h"
static struct nlist nl[] = {
- { "_averunnable" },
+ { "averunnable" },
#define X_AVERUNNABLE 0
- { "_fscale" },
+ { "fscale" },
#define X_FSCALE 1
{ "" },
};
Index: lib/libkvm/kvm_i386.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm_i386.c,v
diff -u -p -r1.28 kvm_i386.c
--- lib/libkvm/kvm_i386.c 1 Dec 2021 16:53:28 -0000 1.28
+++ lib/libkvm/kvm_i386.c 2 Nov 2026 13:02:32 -0000
@@ -124,9 +124,9 @@ _kvm_initvtop(kvm_t *kd)
vm->PTD = NULL;
- nl[0].n_name = "_PTDpaddr";
- nl[1].n_name = "_PTDsize";
- nl[2].n_name = "_cpu_pae";
+ nl[0].n_name = "PTDpaddr";
+ nl[1].n_name = "PTDsize";
+ nl[2].n_name = "cpu_pae";
nl[3].n_name = NULL;
if (kvm_nlist(kd, nl) != 0) {
Index: lib/libkvm/kvm_proc2.c
===================================================================
RCS file: /OpenBSD/src/lib/libkvm/kvm_proc2.c,v
diff -u -p -r1.39 kvm_proc2.c
--- lib/libkvm/kvm_proc2.c 8 Jul 2024 13:18:26 -0000 1.39
+++ lib/libkvm/kvm_proc2.c 2 Nov 2026 13:02:32 -0000
@@ -134,8 +134,8 @@ kvm_proclist(kvm_t *kd, int op, int arg,
op &= ~KERN_PROC_SHOW_THREADS;
/* Anchor a time to compare process starting times from. */
- nl[0].n_name = "_time_second";
- nl[1].n_name = "_time_uptime";
+ nl[0].n_name = "time_second";
+ nl[1].n_name = "time_uptime";
nl[2].n_name = NULL;
if (kvm_nlist(kd, nl) != 0) {
for (i = 0; nl[i].n_type != 0; ++i)
@@ -476,10 +476,10 @@ kvm_getprocs(kvm_t *kd, int op, int arg,
}
memset(nl, 0, sizeof(nl));
- nl[0].n_name = "_nthreads";
- nl[1].n_name = "_nprocesses";
- nl[2].n_name = "_allprocess";
- nl[3].n_name = "_zombprocess";
+ nl[0].n_name = "nthreads";
+ nl[1].n_name = "nprocesses";
+ nl[2].n_name = "allprocess";
+ nl[3].n_name = "zombprocess";
nl[4].n_name = NULL;
if (kvm_nlist(kd, nl) != 0) {
Index: regress/sys/arch/amd64/fpu/fxproc0.c
===================================================================
RCS file: /OpenBSD/src/regress/sys/arch/amd64/fpu/fxproc0.c,v
diff -u -p -r1.2 fxproc0.c
--- regress/sys/arch/amd64/fpu/fxproc0.c 13 Dec 2021 16:56:49 -0000 1.2
+++ regress/sys/arch/amd64/fpu/fxproc0.c 2 Nov 2026 13:02:32 -0000
@@ -49,7 +49,7 @@ main(int argc, char *argv[])
char *memf, *nlistf;
kvm_t *kd;
int ch;
- struct nlist nl[] = { { .n_name = "_proc0" }, { .n_name = NULL } };
+ struct nlist nl[] = { { .n_name = "proc0" }, { .n_name = NULL } };
memf = nlistf = NULL;
while ((ch = getopt(argc, argv, "M:N:")) != -1) {
Index: regress/sys/arch/amd64/dump_tables/dump_tables.c
===================================================================
RCS file: /OpenBSD/src/regress/sys/arch/amd64/dump_tables/dump_tables.c,v
diff -u -p -r1.9 dump_tables.c
--- regress/sys/arch/amd64/dump_tables/dump_tables.c 7 Jun 2026 14:22:07 -0000 1.9
+++ regress/sys/arch/amd64/dump_tables/dump_tables.c 2 Nov 2026 13:02:32 -0000
@@ -79,8 +79,8 @@ int meltdown, hide_direct, hide_pte, rep
int user_proc;
struct nlist nl[] = {
- { "_proc0paddr" },
- { "_pmap_direct_base" },
+ { "proc0paddr" },
+ { "pmap_direct_base" },
{ NULL }
};
Index: sbin/dmesg/dmesg.c
===================================================================
RCS file: /OpenBSD/src/sbin/dmesg/dmesg.c,v
diff -u -p -r1.33 dmesg.c
--- sbin/dmesg/dmesg.c 4 Dec 2022 23:50:46 -0000 1.33
+++ sbin/dmesg/dmesg.c 2 Nov 2026 13:02:32 -0000
@@ -49,7 +49,7 @@
#ifndef NOKVM
struct nlist nl[] = {
#define X_MSGBUF 0
- { "_msgbufp" },
+ { "msgbufp" },
{ NULL },
};
#endif
Index: sbin/savecore/savecore.c
===================================================================
RCS file: /OpenBSD/src/sbin/savecore/savecore.c,v
diff -u -p -r1.67 savecore.c
--- sbin/savecore/savecore.c 31 May 2025 20:25:33 -0000 1.67
+++ sbin/savecore/savecore.c 2 Nov 2026 13:02:32 -0000
@@ -59,32 +59,32 @@ extern FILE *zopen(const char *fname, co
struct nlist current_nl[] = { /* Namelist for currently running system. */
#define X_DUMPDEV 0
- { "_dumpdev" },
+ { "dumpdev" },
#define X_DUMPLO 1
- { "_dumplo" },
+ { "dumplo" },
#define X_TIME 2
- { "_time_second" },
+ { "time_second" },
#define X_DUMPSIZE 3
- { "_dumpsize" },
+ { "dumpsize" },
#define X_VERSION 4
- { "_version" },
+ { "version" },
#define X_PANICSTR 5
- { "_panicstr" },
+ { "panicstr" },
#define X_DUMPMAG 6
- { "_dumpmag" },
+ { "dumpmag" },
{ NULL },
};
int cursyms[] = { X_DUMPDEV, X_DUMPLO, X_VERSION, X_DUMPMAG, -1 };
int dumpsyms[] = { X_TIME, X_DUMPSIZE, X_VERSION, X_PANICSTR, X_DUMPMAG, -1 };
struct nlist dump_nl[] = { /* Name list for dumped system. */
- { "_dumpdev" }, /* Entries MUST be the same as */
- { "_dumplo" }, /* those in current_nl[]. */
- { "_time_second" },
- { "_dumpsize" },
- { "_version" },
- { "_panicstr" },
- { "_dumpmag" },
+ { "dumpdev" }, /* Entries MUST be the same as */
+ { "dumplo" }, /* those in current_nl[]. */
+ { "time_second" },
+ { "dumpsize" },
+ { "version" },
+ { "panicstr" },
+ { "dumpmag" },
{ NULL },
};
Index: usr.bin/ipcs/ipcs.c
===================================================================
RCS file: /OpenBSD/src/usr.bin/ipcs/ipcs.c,v
diff -u -p -r1.30 ipcs.c
--- usr.bin/ipcs/ipcs.c 10 Oct 2026 14:33:52 -0000 1.30
+++ usr.bin/ipcs/ipcs.c 2 Nov 2026 13:02:32 -0000
@@ -661,19 +661,19 @@ ipcs_kvm(void)
kvm_t *kd;
int i;
struct nlist symbols[] = {
- {"_sema"},
+ {"sema"},
#define X_SEMA 0
- {"_seminfo"},
+ {"seminfo"},
#define X_SEMINFO 1
- {"_semu"},
+ {"semu"},
#define X_SEMU 2
- {"_msginfo"},
+ {"msginfo"},
#define X_MSGINFO 3
- {"_msg_queues"},
+ {"msg_queues"},
#define X_MSG_QUEUES 4
- {"_shminfo"},
+ {"shminfo"},
#define X_SHMINFO 5
- {"_shmsegs"},
+ {"shmsegs"},
#define X_SHMSEGS 6
{NULL}
};
Index: usr.bin/netstat/main.c
===================================================================
RCS file: /OpenBSD/src/usr.bin/netstat/main.c,v
diff -u -p -r1.126 main.c
--- usr.bin/netstat/main.c 16 Jul 2026 12:35:32 -0000 1.126
+++ usr.bin/netstat/main.c 2 Nov 2026 13:02:32 -0000
@@ -55,11 +55,11 @@
struct nlist nl[] = {
#define N_AFMAP 0
- { "_afmap"},
+ { "afmap"},
#define N_AF2IDX 1
- { "_af2idx" },
+ { "af2idx" },
#define N_AF2IDXMAX 2
- { "_af2idx_max" },
+ { "af2idx_max" },
{ "" }
};
Index: usr.bin/nfsstat/nfsstat.c
===================================================================
RCS file: /OpenBSD/src/usr.bin/nfsstat/nfsstat.c,v
diff -u -p -r1.38 nfsstat.c
--- usr.bin/nfsstat/nfsstat.c 8 Mar 2023 04:43:12 -0000 1.38
+++ usr.bin/nfsstat/nfsstat.c 2 Nov 2026 13:02:32 -0000
@@ -60,7 +60,7 @@
struct nlist nl[] = {
#define N_NFSSTAT 0
- { "_nfsstats" },
+ { "nfsstats" },
{ "" },
};
kvm_t *kd;
Index: usr.bin/vmstat/dkstats.c
===================================================================
RCS file: /OpenBSD/src/usr.bin/vmstat/dkstats.c,v
diff -u -p -r1.42 dkstats.c
--- usr.bin/vmstat/dkstats.c 6 May 2024 16:54:22 -0000 1.42
+++ usr.bin/vmstat/dkstats.c 2 Nov 2026 13:02:32 -0000
@@ -53,19 +53,19 @@
#if !defined(NOKVM)
static struct nlist namelist[] = {
#define X_TK_NIN 0 /* sysctl */
- { "_tk_nin" },
+ { "tk_nin" },
#define X_TK_NOUT 1 /* sysctl */
- { "_tk_nout" },
+ { "tk_nout" },
#define X_CP_TIME 2 /* sysctl */
- { "_cp_time" },
+ { "cp_time" },
#define X_HZ 3 /* sysctl */
- { "_hz" },
+ { "hz" },
#define X_STATHZ 4 /* sysctl */
- { "_stathz" },
+ { "stathz" },
#define X_DISK_COUNT 5 /* sysctl */
- { "_disk_count" },
+ { "disk_count" },
#define X_DISKLIST 6 /* sysctl */
- { "_disklist" },
+ { "disklist" },
{ NULL },
};
#define KVM_ERROR(_string) { \
Index: usr.bin/vmstat/vmstat.c
===================================================================
RCS file: /OpenBSD/src/usr.bin/vmstat/vmstat.c,v
diff -u -p -r1.160 vmstat.c
--- usr.bin/vmstat/vmstat.c 21 May 2025 03:04:14 -0000 1.160
+++ usr.bin/vmstat/vmstat.c 2 Nov 2026 13:02:32 -0000
@@ -61,21 +61,21 @@
struct nlist namelist[] = {
#define X_UVMEXP 0 /* sysctl */
- { "_uvmexp" },
+ { "uvmexp" },
#define X_TIME_UPTIME 1
- { "_time_uptime" },
+ { "time_uptime" },
#define X_NCHSTATS 2 /* sysctl */
- { "_nchstats" },
+ { "nchstats" },
#define X_KMEMSTAT 3 /* sysctl */
- { "_kmemstats" },
+ { "kmemstats" },
#define X_KMEMBUCKETS 4 /* sysctl */
- { "_bucket" },
+ { "bucket" },
#define X_FORKSTAT 5 /* sysctl */
- { "_forkstat" },
+ { "forkstat" },
#define X_POOLHEAD 6 /* sysctl */
- { "_pool_head" },
+ { "pool_head" },
#define X_NAPTIME 7
- { "_naptime" },
+ { "naptime" },
{ NULL },
};
Index: usr.sbin/acpidump/acpidump.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/acpidump/acpidump.c,v
diff -u -p -r1.25 acpidump.c
--- usr.sbin/acpidump/acpidump.c 11 Sep 2022 10:40:35 -0000 1.25
+++ usr.sbin/acpidump/acpidump.c 2 Nov 2026 13:02:32 -0000
@@ -714,7 +714,7 @@ efi_acpi_addr(void)
kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
if (kd == NULL)
goto on_error;
- nl[0].n_name = "_efi_acpi_table";
+ nl[0].n_name = "efi_acpi_table";
if (kvm_nlist(kd, nl) != 0)
goto on_error;
if (kvm_read(kd, nl[0].n_value, &table, sizeof(table)) == -1)
@@ -745,7 +745,7 @@ efi_acpi_addr(void)
kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, NULL);
if (kd == NULL)
goto on_error;
- nl[0].n_name = "_bios_efiinfo";
+ nl[0].n_name = "bios_efiinfo";
if (kvm_nlist(kd, nl) != 0)
goto on_error;
if (kvm_read(kd, nl[0].n_value, &ptr, sizeof(ptr)) == -1)
Index: usr.sbin/config/ukc.h
===================================================================
RCS file: /OpenBSD/src/usr.sbin/config/ukc.h,v
diff -u -p -r1.17 ukc.h
--- usr.sbin/config/ukc.h 6 Sep 2019 21:30:31 -0000 1.17
+++ usr.sbin/config/ukc.h 2 Nov 2026 13:02:32 -0000
@@ -49,24 +49,24 @@
#ifdef UKC_MAIN
struct nlist nl[] = {
- { "_locnames" },
- { "_locnamp" },
- { "_cfroots" },
- { "_cfroots_size" },
- { "_pv_size" },
- { "_pv" },
- { "_cfdata" },
- { "_kernel_text" },
- { "_version" },
- { "_extraloc" },
- { "_rextraloc" },
- { "_textraloc" },
- { "_userconf_histlen" },
- { "_userconf_history" },
- { "_pdevnames" },
- { "_pdevnames_size" },
- { "_pdevinit" },
- { "_nkmempages" },
+ { "locnames" },
+ { "locnamp" },
+ { "cfroots" },
+ { "cfroots_size" },
+ { "pv_size" },
+ { "pv" },
+ { "cfdata" },
+ { "kernel_text" },
+ { "version" },
+ { "extraloc" },
+ { "rextraloc" },
+ { "textraloc" },
+ { "userconf_histlen" },
+ { "userconf_history" },
+ { "pdevnames" },
+ { "pdevnames_size" },
+ { "pdevinit" },
+ { "nkmempages" },
{ NULL },
};
int maxdev = 0;
Index: usr.sbin/installboot/i386_installboot.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/installboot/i386_installboot.c,v
diff -u -p -r1.51 i386_installboot.c
--- usr.sbin/installboot/i386_installboot.c 17 Sep 2025 16:12:10 -0000 1.51
+++ usr.sbin/installboot/i386_installboot.c 2 Nov 2026 13:02:32 -0000
@@ -76,14 +76,14 @@ char *blkstore;
size_t blksize;
struct sym_data pbr_symbols[] = {
- {"_fs_bsize_p", 2},
- {"_fs_bsize_s", 2},
- {"_fsbtodb", 1},
- {"_p_offset", 4},
- {"_inodeblk", 4},
- {"_inodedbl", 4},
- {"_nblocks", 2},
- {"_blkincr", 1},
+ {"fs_bsize_p", 2},
+ {"fs_bsize_s", 2},
+ {"fsbtodb", 1},
+ {"p_offset", 4},
+ {"inodeblk", 4},
+ {"inodedbl", 4},
+ {"nblocks", 2},
+ {"blkincr", 1},
{NULL}
};
Index: usr.sbin/kgmon/kgmon.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/kgmon/kgmon.c,v
diff -u -p -r1.26 kgmon.c
--- usr.sbin/kgmon/kgmon.c 28 Jun 2019 13:32:48 -0000 1.26
+++ usr.sbin/kgmon/kgmon.c 2 Nov 2026 13:02:32 -0000
@@ -48,9 +48,9 @@
struct nlist nl[] = {
#define N_GMONPARAM 0
- { "__gmonparam" },
+ { "_gmonparam" },
#define N_PROFHZ 1
- { "_profhz" },
+ { "profhz" },
{ NULL }
};
Index: usr.sbin/procmap/procmap.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/procmap/procmap.c,v
diff -u -p -r1.74 procmap.c
--- usr.sbin/procmap/procmap.c 20 Oct 2024 11:21:24 -0000 1.74
+++ usr.sbin/procmap/procmap.c 2 Nov 2026 13:02:32 -0000
@@ -163,17 +163,17 @@ struct kbit {
#define KDEREF(kd, item) _KDEREF((kd), A(item), D(item, data), S(item))
struct nlist nl[] = {
- { "_maxsmap" },
+ { "maxsmap" },
#define NL_MAXSSIZ 0
- { "_uvm_vnodeops" },
+ { "uvm_vnodeops" },
#define NL_UVM_VNODEOPS 1
- { "_uvm_deviceops" },
+ { "uvm_deviceops" },
#define NL_UVM_DEVICEOPS 2
- { "_aobj_pager" },
+ { "aobj_pager" },
#define NL_AOBJ_PAGER 3
- { "_kernel_map" },
+ { "kernel_map" },
#define NL_KERNEL_MAP 4
- { "_nclruhead" },
+ { "nclruhead" },
#define NL_NCLRUHEAD 5
{ NULL }
};
Index: usr.sbin/pstat/pstat.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/pstat/pstat.c,v
diff -u -p -r1.132 pstat.c
--- usr.sbin/pstat/pstat.c 6 Aug 2026 20:41:11 -0000 1.132
+++ usr.sbin/pstat/pstat.c 2 Nov 2026 13:02:32 -0000
@@ -71,17 +71,17 @@
struct nlist vnodenl[] = {
#define FNL_NFILE 0 /* sysctl */
- {"_numfiles"},
+ {"numfiles"},
#define FNL_MAXFILE 1 /* sysctl */
- {"_maxfiles"},
+ {"maxfiles"},
#define TTY_NTTY 2 /* sysctl */
- {"_tty_count"},
+ {"tty_count"},
#define V_NUMV 3 /* sysctl */
- { "_numvnodes" },
+ {"numvnodes"},
#define TTY_TTYLIST 4 /* sysctl */
- {"_ttylist"},
+ {"ttylist"},
#define V_MOUNTLIST 5 /* no sysctl */
- { "_mountlist" },
+ {"mountlist"},
{ NULL }
};
Index: usr.sbin/trpt/trpt.c
===================================================================
RCS file: /OpenBSD/src/usr.sbin/trpt/trpt.c,v
diff -u -p -r1.40 trpt.c
--- usr.sbin/trpt/trpt.c 8 Mar 2023 04:43:15 -0000 1.40
+++ usr.sbin/trpt/trpt.c 2 Nov 2026 13:02:32 -0000
@@ -100,9 +100,9 @@
struct nlist nl[] = {
#define N_TCP_DEBUG 0 /* no sysctl */
- { "_tcp_debug" },
+ { "tcp_debug" },
#define N_TCP_DEBX 1 /* no sysctl */
- { "_tcp_debx" },
+ { "tcp_debx" },
{ NULL },
};
nlist(3) users: drop leading underscores