Thu Jan 20 15:04:24 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
authorJim Kingdon <jkingdon@engr.sgi.com>
Fri, 21 Jan 1994 17:43:32 +0000 (17:43 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Fri, 21 Jan 1994 17:43:32 +0000 (17:43 +0000)
* printcmd.c (print_address_symbolic):  Unconditionally use msymbol
if we did not find a symbol.

gdb/ChangeLog
gdb/printcmd.c

index 514f578..dbb6114 100644 (file)
@@ -1,3 +1,8 @@
+Thu Jan 20 15:04:24 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * printcmd.c (print_address_symbolic):  Unconditionally use msymbol
+       if we did not find a symbol.
+
 Fri Jan 21 08:20:18 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)
 
        * infptrace.c (child_xfer_memory): Only use if CHILD_XFER_MEMORY
index 48bc4fc..95259fb 100644 (file)
@@ -519,14 +519,22 @@ print_address_symbolic (addr, stream, do_demangle, leadin)
   struct minimal_symbol *msymbol;
   struct symbol *symbol;
   struct symtab *symtab = 0;
-  CORE_ADDR name_location;
+  CORE_ADDR name_location = 0;
   char *name;
 
   /* First try to find the address in the symbol table, then
      in the minsyms.  Take the closest one.  */
 
-  symbol = fast_symbolic_addr? 0: 
-          find_addr_symbol (addr, &symtab, &name_location);
+  if (fast_symbolic_addr)
+    {
+      /* This is defective in the sense that it only finds text symbols.  */
+      symbol = find_pc_function (addr);
+      if (symbol)
+       name_location = BLOCK_START (SYMBOL_BLOCK_VALUE (symbol));
+    }
+  else
+    find_addr_symbol (addr, &symtab, &name_location);
+
   if (symbol)
     {
       if (do_demangle)
@@ -538,7 +546,7 @@ print_address_symbolic (addr, stream, do_demangle, leadin)
   msymbol = lookup_minimal_symbol_by_pc (addr);
   if (msymbol != NULL)
     {
-      if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location)
+      if (SYMBOL_VALUE_ADDRESS (msymbol) > name_location || symbol == NULL)
        {
          /* The msymbol is closer to the address than the symbol;
             use the msymbol instead.  */
@@ -551,6 +559,8 @@ print_address_symbolic (addr, stream, do_demangle, leadin)
            name = SYMBOL_LINKAGE_NAME (msymbol);
        }
     }
+  if (symbol == NULL && msymbol == NULL)
+    return;
 
   /* If the nearest symbol is too far away, don't print anything symbolic.  */