Re: [PATCH] procfs: match /proc/self/maps address width to Linux

Henrique Brito <[email protected]>
Newsgroups gmane.os.netbsd.devel.kernel
Message-ID <CAMNY2LGUo-23ft37RyCzMabF7a7sBWnBJ8E8tt-eyz9EgT0QZg@mail.gmail.com>
On Mon, Aug 3, 2026 at 7:07 AM Stephen Borrill <[email protected]> wrote:
>
> > One review question could be whether it would be better to modify the
> > call to snprintf(3) to not use 'width' at all.
>
> I think that /proc/self/maps should be implementation-compatible with
> Linux. Not using width at all would not be compatible as Linux zero-pads
> to 8 (but no more).

Yes, we cannot remove it entirely, but now that width has a fixed value of 8,
we could just embed it directly in the snprintf(3) format string. (See
diff V2 bellow)

I kept the width variable mainly to minimize the diff and keep the change close
to the existing structure, but it is simple to remove it.

> Henrique's question really is, does anything actually care about the
> layout of maps outside of Linux apps (and Linuxy apps being built for
> NetBSD)? If there are no counter-arguments, I'll commit his patch.

I did some grepping around NetBSD src/ and couldn’t find anything that
this could break. Also, based on my testing, everything seemed to be fine.

Diff without the 'width' variable:

[PATCH V2]

diff --git a/sys/miscfs/procfs/procfs_map.c b/sys/miscfs/procfs/procfs_map.c
index d37e357c333..a3d5ba43a2e 100644
--- a/sys/miscfs/procfs/procfs_map.c
+++ b/sys/miscfs/procfs/procfs_map.c
@@ -120,8 +120,6 @@ procfs_domap(struct lwp *curl, struct proc *p,
struct pfsnode *pfs,
       dev_t dev;
       long fileid;
       size_t pos;
-       int width = (int)((curl->l_proc->p_flag & PK_32) ? sizeof(int32_t) :
-           sizeof(void *)) * 2;

       if (uio->uio_rw != UIO_READ)
               return EOPNOTSUPP;
@@ -166,15 +164,15 @@ again:
                               }
                       }
                       pos += snprintf(buffer + pos, bufsize - pos,
-                           "%.*"PRIxVADDR"-%.*"PRIxVADDR" %c%c%c%c "
-                           "%.*lx %.2llx:%.2llx %-8ld %25.s %s\n",
-                           width, entry->start,
-                           width, entry->end,
+                           "%08"PRIxVADDR"-%08"PRIxVADDR" %c%c%c%c "
+                           "%08lx %.2llx:%.2llx %-8ld %25.s %s\n",
+                           entry->start,
+                           entry->end,
                           (entry->protection & VM_PROT_READ) ? 'r' : '-',
                           (entry->protection & VM_PROT_WRITE) ? 'w' : '-',
                           (entry->protection & VM_PROT_EXECUTE) ? 'x' : '-',
                           (entry->etype & UVM_ET_COPYONWRITE) ? 'p' : 's',
-                           width, (unsigned long)entry->offset,
+                           (unsigned long)entry->offset,
                           (unsigned long long)major(dev),
                           (unsigned long long)minor(dev), fileid, "", path);
               } else {

-- 
Henrique Brito
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.