On 5/19/26 02:53, Dag-Erling Smørg rav wrote:
The branch main has been updated by des:

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

commit 4617a6cb82a673b02257257c1f5f8a3c8d2bb943
Author:     Dag-Erling Smørgrav <[email protected]>
AuthorDate: 2026-05-19 06:52:53 +0000
Commit:     Dag-Erling Smørgrav <[email protected]>
CommitDate: 2026-05-19 06:53:35 +0000

     nlist: Handle multiple symbol tables
* Instead of looking for and stopping at the first SHT_SYMTAB section,
       iterate over all SHT_DYNSYM and SHT_SYMTAB sections until we've either
       found all our symbols or run out.
* Perform bounds checks on section and string table offsets and sizes
       before attempting to mmap() the string table.
* Perform bounds checks on individual symbol table entries before
       attempting to access the corresponding strings.
* Stop treating _Foo and Foo as the same symbol. This unbreaks OpenSSH which uses nlist(3) to verify PKCS#11 providers.

The _Foo vs Foo change broke many uses of kvm_nlist in the tree.  In particular,
ktrdump no longer works on crashdumps now, and I finally single-stepped through
it today to figure out why.

A quick grep shows me all these places that are now broken:

lib/libkvm/kvm_cptime.c:        { .n_name = "_cp_time" },               /* 
(deprecated) */
lib/libkvm/kvm_getloadavg.c:    { .n_name = "_averunnable" },
lib/libkvm/kvm_getloadavg.c:    { .n_name = "_fscale" },
lib/libkvm/kvm_getswapinfo.c:   { .n_name = "_swtailq" },       /* list of swap 
devices and sizes */
lib/libkvm/kvm_getswapinfo.c:   { .n_name = "_dmmax" },         /* maximum size 
of a swap block */
lib/libkvm/kvm_pcpu.c:  { .n_name = "_cpuid_to_pcpu" },
lib/libkvm/kvm_pcpu.c:  { .n_name = "_mp_maxcpus" },
lib/libkvm/kvm_pcpu.c:  { .n_name = "_mp_ncpus" },
lib/libkvm/kvm_pcpu.c:  { .n_name = "___pcpu" },
lib/libkvm/kvm_pcpu.c:          { .n_name = "___start_" DPCPU_SETNAME },
lib/libkvm/kvm_pcpu.c:          { .n_name = "___stop_" DPCPU_SETNAME },
lib/libkvm/kvm_pcpu.c:          { .n_name = "_dpcpu_off" },
lib/libkvm/kvm_pcpu.c:          { .n_name = "_mp_maxcpus" },
lib/libkvm/kvm_proc.c:          nl[0].n_name = "_nprocs";
lib/libkvm/kvm_proc.c:          nl[1].n_name = "_allproc";
lib/libkvm/kvm_proc.c:          nl[2].n_name = "_ticks";
lib/libkvm/kvm_proc.c:          nl[3].n_name = "_hz";
lib/libkvm/kvm_proc.c:          nl[4].n_name = "_cpu_tick_frequency";
lib/libkvm/kvm_proc.c:          nlz[0].n_name = "_zombproc";
lib/libkvm/kvm_vnet.c:          { .n_name = "___start_" VNET_SETNAME },
lib/libkvm/kvm_vnet.c:          { .n_name = "___stop_" VNET_SETNAME },
lib/libmemstat/memstat_malloc.c:        { .n_name = "_kmemstatistics" },
lib/libmemstat/memstat_malloc.c:        { .n_name = "_kmemzones" },
lib/libmemstat/memstat_malloc.c:        { .n_name = "_numzones" },
lib/libmemstat/memstat_malloc.c:        { .n_name = "_vm_malloc_zone_count" },
lib/libmemstat/memstat_malloc.c:        { .n_name = "_mp_maxcpus" },
lib/libmemstat/memstat_uma.c:   { .n_name = "_uma_kegs" },
lib/libmemstat/memstat_uma.c:   { .n_name = "_mp_maxid" },
lib/libmemstat/memstat_uma.c:   { .n_name = "_all_cpus" },
lib/libmemstat/memstat_uma.c:   { .n_name = "_vm_ndomains" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_buf" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_bufsize" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_maxbufsize" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_bufoff" },
sbin/ddb/ddb_capture.c: { .n_name = "_db_capture_inprogress" },
tools/tools/ifpifa/ifpifa.c:        { .n_name = "_ifnet", },
tools/tools/umastat/umastat.c:  { .n_name = "_uma_kegs" },
tools/tools/umastat/umastat.c:  { .n_name = "_mp_maxcpus" },
tools/tools/umastat/umastat.c:  { .n_name = "_mp_maxid" },
tools/tools/umastat/umastat.c:  { .n_name = "_all_cpus" },
usr.bin/ktrdump/ktrdump.c:      { .n_name = "_ktr_version" },
usr.bin/ktrdump/ktrdump.c:      { .n_name = "_ktr_entries" },
usr.bin/ktrdump/ktrdump.c:      { .n_name = "_ktr_idx" },
usr.bin/ktrdump/ktrdump.c:      { .n_name = "_ktr_buf" },
usr.bin/vmstat/vmstat.c:        [X_SUM] = { .n_name = "_vm_cnt", },
usr.bin/vmstat/vmstat.c:        [X_HZ] = { .n_name = "_hz", },
usr.bin/vmstat/vmstat.c:        [X_STATHZ] = { .n_name = "_stathz", },
usr.bin/vmstat/vmstat.c:        [X_NCHSTATS] = { .n_name = "_nchstats", },
usr.bin/vmstat/vmstat.c:        [X_INTRNAMES] = { .n_name = "_intrnames", },
usr.bin/vmstat/vmstat.c:        [X_SINTRNAMES] = { .n_name = "_sintrnames", },
usr.bin/vmstat/vmstat.c:        [X_INTRCNT] = { .n_name = "_intrcnt", },
usr.bin/vmstat/vmstat.c:        [X_SINTRCNT] = { .n_name = "_sintrcnt", },
usr.bin/vmstat/vmstat.c:        [X_NINTRCNT] = { .n_name = "_nintrcnt", },
usr.sbin/iostat/iostat.c:       { .n_name = "_tty_nin",
usr.sbin/iostat/iostat.c:       { .n_name = "_tty_nout",
usr.sbin/iostat/iostat.c:       { .n_name = "_boottime",

Would you rather revert the underscore change or fix all these?

--
John Baldwin


Reply via email to