From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH][gdb] Print user/includes fields for maint commands
Date: Tue, 24 Mar 2020 12:22:42 +0100 [thread overview]
Message-ID: <20200324112241.GA23197@delia> (raw)
Hi,
The type struct compunit_symtab contains two fields (disregarding field next)
that express relations with other compunit_symtabs: user and includes.
These fields are currently not printed with "maint info symtabs" and
"maint print symbols".
Fix this such that for "maint info symtabs" we print:
...
{ ((struct compunit_symtab *) 0x23e8450)
debugformat DWARF 2
producer (null)
dirname (null)
blockvector ((struct blockvector *) 0x23e8590)
+ user ((struct compunit_symtab *) 0x2336280)
+ ( includes
+ ((struct compunit_symtab *) 0x23e85e0)
+ ((struct compunit_symtab *) 0x23e8960)
+ )
{ symtab <unknown> ((struct symtab *) 0x23e85b0)
fullname (null)
linetable ((struct linetable *) 0x0)
}
}
...
And for "maint print symbols" we print:
...
-Symtab for file <unknown>
+Symtab for file <unknown> at 0x23e85b0
Read from object file /data/gdb_versions/devel/a.out (0x233ccf0)
Language: c
Blockvector:
block #000, object at 0x23e8530, 0 syms/buckets in 0x0..0x0
block #001, object at 0x23e84d0 under 0x23e8530, 0 syms/buckets in 0x0..0x0
+Compunit user: 0x2336300
+Compunit include: 0x23e8900
+Compunit include: 0x23dd970
...
Note: for user and includes we don't list the actual compunit_symtab address,
but instead the corresponding symtab address, which allows us to find that
symtab elsewhere in the output (given that we also now print the address of
symtabs).
OK for trunk?
Thanks,
- Tom
[gdb] Print user/includes fields for maint commands
gdb/ChangeLog:
2020-03-24 Tom de Vries <tdevries@suse.de>
* symmisc.c (dump_symtab_1): Print user and includes fields.
(maintenance_info_symtabs): Same.
---
gdb/symmisc.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 3df526bddb..f7a36905f2 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -279,8 +279,12 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
const struct block *b;
int depth;
- fprintf_filtered (outfile, "\nSymtab for file %s\n",
+ fprintf_filtered (outfile, "\nSymtab for file %s",
symtab_to_filename_for_display (symtab));
+ fprintf_filtered (outfile, " at ");
+ gdb_print_host_address (symtab, outfile);
+ fprintf_filtered (outfile, "\n");
+
if (SYMTAB_DIRNAME (symtab) != NULL)
fprintf_filtered (outfile, "Compilation directory is %s\n",
SYMTAB_DIRNAME (symtab));
@@ -371,6 +375,32 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
"\nBlockvector same as owning compunit: %s\n\n",
compunit_filename);
}
+
+ if (symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)))
+ {
+ struct compunit_symtab *cust = SYMTAB_COMPUNIT (symtab);
+
+ if (cust->user)
+ {
+ fprintf_filtered (outfile, "Compunit user: ");
+ gdb_print_host_address (COMPUNIT_FILETABS (cust->user), outfile);
+ fprintf_filtered (outfile, "\n");
+ }
+ if (cust->includes)
+ {
+ struct compunit_symtab *include;
+ for (i = 0; ; ++i)
+ {
+ include = cust->includes[i];
+ if (!include)
+ break;
+ fprintf_filtered (outfile, "Compunit include: ");
+ gdb_print_host_address (COMPUNIT_FILETABS (include), outfile);
+ fprintf_filtered (outfile, "\n");
+ }
+ }
+ }
+
}
static void
@@ -809,6 +839,30 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
" ((struct blockvector *) %s)\n",
host_address_to_string
(COMPUNIT_BLOCKVECTOR (cust)));
+ printf_filtered (" user"
+ " ((struct compunit_symtab *) %s)\n",
+ cust->user
+ ? host_address_to_string (cust->user)
+ : "(null)");
+ if (cust->includes)
+ {
+ struct compunit_symtab *include;
+ int i;
+
+ printf_filtered (" ( includes\n");
+ for (i = 0; ; ++i)
+ {
+ include = cust->includes[i];
+ if (!include)
+ break;
+ const char *addr
+ = host_address_to_string (include);
+ printf_filtered (" (%s %s)\n",
+ "(struct compunit_symtab *)",
+ addr);
+ }
+ printf_filtered (" )\n");
+ }
printed_compunit_symtab_start = 1;
}
next reply other threads:[~2020-03-24 11:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-24 11:22 Tom de Vries [this message]
2020-03-24 17:04 ` Simon Marchi
2020-03-24 22:28 ` Tom de Vries
2020-03-24 22:41 ` Simon Marchi
2020-03-24 22:55 ` Tom de Vries
2020-03-24 23:14 ` Simon Marchi
2020-03-24 23:15 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200324112241.GA23197@delia \
--to=tdevries@suse.de \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox