* breakpoint.c, breakpoint.h (breakpoint_init_inferior): New function
[deliverable/binutils-gdb.git] / gdb / symtab.c
index 9765e0bbae7ef6d35865f50b574528faabc50ac0..b5906a65224f1a2f71373e38c30e422d9c19bdde 100644 (file)
@@ -258,13 +258,13 @@ gdb_mangle_name (type, i, j)
   char *field_name = TYPE_FN_FIELDLIST_NAME (type, i);
   char *physname = TYPE_FN_FIELD_PHYSNAME (f, j);
   char *newname = type_name_no_tag (type);
-  int is_constructor = newname != NULL && STREQ (field_name, newname);
-  int is_destructor = is_constructor && DESTRUCTOR_PREFIX_P (physname);
+  int is_constructor = (physname[0]=='_' && physname[1]=='_');
+  int is_destructor = DESTRUCTOR_PREFIX_P (physname);
   /* Need a new type prefix.  */
   char *const_prefix = method->is_const ? "C" : "";
   char *volatile_prefix = method->is_volatile ? "V" : "";
   char buf[20];
-#ifndef GCC_MANGLE_BUG
+#ifdef GCC_MANGLE_BUG
   int len = newname == NULL ? 0 : strlen (newname);
 
   if (is_destructor)
@@ -305,9 +305,10 @@ gdb_mangle_name (type, i, j)
   strcat (mangled_name, buf);
   /* If the class doesn't have a name, i.e. newname NULL, then we just
      mangle it using 0 for the length of the class.  Thus it gets mangled
-     as something starting with `::' rather than `classname::'.  */
+     as something starting with `::' rather than `classname::'. */ 
   if (newname != NULL)
     strcat (mangled_name, newname);
+
 #else
   char *opname;
 
@@ -382,7 +383,7 @@ find_pc_psymbol (psymtab, pc)
      struct partial_symtab *psymtab;
      CORE_ADDR pc;
 {
-  struct partial_symbol *best, *p;
+  struct partial_symbol *best = NULL, *p;
   CORE_ADDR best_pc;
   
   if (!psymtab)
@@ -430,7 +431,7 @@ lookup_symbol (name, block, namespace, is_a_field_of_this, symtab)
      struct symtab **symtab;
 {
   register struct symbol *sym;
-  register struct symtab *s;
+  register struct symtab *s = NULL;
   register struct partial_symtab *ps;
   struct blockvector *bv;
   register struct objfile *objfile;
@@ -972,7 +973,8 @@ find_pc_symtab (pc)
           will cause a core dump), but maybe we can successfully
           continue, so let's not.  */
        warning ("\
-(Internal error: pc 0x%x in read in psymtab, but not in symtab.)\n", pc);
+(Internal error: pc 0x%lx in read in psymtab, but not in symtab.)\n",
+                (unsigned long) pc);
       s = PSYMTAB_TO_SYMTAB (ps);
     }
   return (s);
@@ -991,15 +993,7 @@ find_pc_symtab (pc)
    code in the middle of a subroutine.  To properly find the end of a line's PC
    range, we must search all symtabs associated with this compilation unit, and
    find the one whose first PC is closer than that of the next line in this
-   symtab.
-
-   FIXME:  We used to complain here about zero length or negative length line
-   tables, but there are two problems with this: (1) some symtabs may not have
-   any line numbers due to gcc -g1 compilation, and (2) this function is called
-   during single stepping, when we don't own the terminal and thus can't
-   produce any output.  One solution might be to implement a mechanism whereby
-   complaints can be queued until we regain control of the terminal.  -fnf
- */
+   symtab.  */
 
 /* If it's worth the effort, we could be using a binary search.  */
 
@@ -1065,8 +1059,12 @@ find_pc_line (pc, notcurrent)
       if (!l)
         continue;
       len = l->nitems;
-      if (len <= 0)              /* See FIXME above. */
+      if (len <= 0)
        {
+         /* I think len can be zero if the symtab lacks line numbers
+            (e.g. gcc -g1).  (Either that or the LINETABLE is NULL;
+            I'm not sure which, and maybe it depends on the symbol
+            reader).  */
          continue;
        }
 
@@ -2589,8 +2587,8 @@ list_symbols (regexp, class, bpt)
                              printf_filtered ("\nNon-debugging symbols:\n");
                              found_in_file = 1;
                            }
-                         printf_filtered ("    %08x  %s\n",
-                                          SYMBOL_VALUE_ADDRESS (msymbol),
+                         printf_filtered ("    %08lx  %s\n",
+                                          (unsigned long) SYMBOL_VALUE_ADDRESS (msymbol),
                                           SYMBOL_SOURCE_NAME (msymbol));
                        }
                    }
@@ -2666,11 +2664,15 @@ static char **return_val;
 
 #define COMPLETION_LIST_ADD_SYMBOL(symbol, sym_text, len, text, word) \
   do { \
-    completion_list_add_name (SYMBOL_NAME (symbol), (sym_text), (len), \
-                             (text), (word)); \
     if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) \
+      /* Put only the mangled name on the list.  */ \
+      /* Advantage:  "b foo<TAB>" completes to "b foo(int, int)" */ \
+      /* Disadvantage:  "b foo__i<TAB>" doesn't complete.  */ \
       completion_list_add_name \
        (SYMBOL_DEMANGLED_NAME (symbol), (sym_text), (len), (text), (word)); \
+    else \
+      completion_list_add_name \
+       (SYMBOL_NAME (symbol), (sym_text), (len), (text), (word)); \
   } while (0)
 
 /*  Test to see if the symbol specified by SYMNAME (which is already
@@ -2771,7 +2773,7 @@ make_symbol_completion_list (text, word)
   {
     char *p;
     char quote_found;
-    char *quote_pos;
+    char *quote_pos = NULL;
 
     /* First see if this is a quoted string.  */
     quote_found = '\0';
This page took 0.027536 seconds and 4 git commands to generate.