Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH][gdb] Print user/includes fields for maint commands
@ 2020-03-24 11:22 Tom de Vries
  2020-03-24 17:04 ` Simon Marchi
  0 siblings, 1 reply; 7+ messages in thread
From: Tom de Vries @ 2020-03-24 11:22 UTC (permalink / raw)
  To: gdb-patches

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;
 		      }
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-03-24 23:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-24 11:22 [PATCH][gdb] Print user/includes fields for maint commands Tom de Vries
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox