From 0b313e95a73ad567915c9c1135d3d49f39236325 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Wed, 23 Feb 2022 16:26:17 -0500 Subject: [PATCH] gdb/linux-tdep: move "Perms" column right Commit 29ef4c0699e1 ("gdb/linux-tdep.c: Add Perms to the 'info proc mappings' output") has broken test gdb.base/info-proc.exp on Linux, because it changes the output of "info proc mappings" in a way that the test does not expect (my bad for not testing before pushing). I looked at how FreeBSD handles this, since I remembered it did show permission flags. It looks like this: Start Addr End Addr Size Offset Flags File 0x200000 0x243000 0x43000 0x0 r-- CN-- /usr/local/bin/tmux (I think that `Flags` and the flags not being aligned is not intentional) The test passes on FreeBSD, because the test looks for four hex numbers in a row and ignores the rest: ".*Mapped address spaces:.*${hex}${ws}${hex}${ws}${hex}${ws}${hex}.*" I suggest fixing it on Linux by moving the flags column to the same place as in the FreeBSD output. It makes things a bit more consistent between OSes, and we don't have to touch the test. At the same time, make use of the actual length of the permission's string to specify the number of characters to print. Before this patch, the output looks like: Start Addr End Addr Perms Size Offset objfile 0x55dd4b544000 0x55dd4b546000 r--p 0x2000 0x0 /usr/bin/sleep and after, it looks like: Start Addr End Addr Size Offset Perms objfile 0x5622ae662000 0x5622ae664000 0x2000 0x0 r--p /usr/bin/sleep Change-Id: If0fc167b010b25f97a3c54e2f491df4973ccde8f --- gdb/linux-tdep.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 83bd4237286..d4868902ac3 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -892,15 +892,15 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args, printf_filtered (_("Mapped address spaces:\n\n")); if (gdbarch_addr_bit (gdbarch) == 32) { - printf_filtered ("\t%10s %10s %7s %10s %10s %s\n", - "Start Addr", " End Addr", "Perms", - " Size", " Offset", "objfile"); + printf_filtered ("\t%10s %10s %10s %10s %s %s\n", + "Start Addr", " End Addr", " Size", + " Offset", "Perms ", "objfile"); } else { - printf_filtered (" %18s %18s %7s %10s %10s %s\n", - "Start Addr", " End Addr", "Perms", - " Size", " Offset", "objfile"); + printf_filtered (" %18s %18s %10s %10s %s %s\n", + "Start Addr", " End Addr", " Size", + " Offset", "Perms ", "objfile"); } char *saveptr; @@ -912,22 +912,24 @@ linux_info_proc (struct gdbarch *gdbarch, const char *args, if (gdbarch_addr_bit (gdbarch) == 32) { - printf_filtered ("\t%10s %10s %7.5s %10s %10s %s\n", + printf_filtered ("\t%10s %10s %10s %10s %-5.*s %s\n", paddress (gdbarch, m.addr), paddress (gdbarch, m.endaddr), - m.permissions.data (), hex_string (m.endaddr - m.addr), hex_string (m.offset), + (int) m.permissions.size (), + m.permissions.data (), m.filename); } else { - printf_filtered (" %18s %18s %7.5s %10s %10s %s\n", + printf_filtered (" %18s %18s %10s %10s %-5.*s %s\n", paddress (gdbarch, m.addr), paddress (gdbarch, m.endaddr), - m.permissions.data (), hex_string (m.endaddr - m.addr), hex_string (m.offset), + (int) m.permissions.size (), + m.permissions.data (), m.filename); } } -- 2.30.2