* gdbint.texinfo (gdbarch_cannot_fetch_register): Don't mention
[binutils-gdb.git] / gdb / mdebugread.c
index c997ccd188dfd7228747e0741bf844c777c2db23..054a8391ce193d3146c1192e395a66af74a88d25 100644 (file)
@@ -279,7 +279,7 @@ static void psymtab_to_symtab_1 (struct partial_symtab *, char *);
 
 static void add_block (struct block *, struct symtab *);
 
-static void add_symbol (struct symbol *, struct block *);
+static void add_symbol (struct symbol *, struct symtab *, struct block *);
 
 static int add_line (struct linetable *, int, CORE_ADDR, int);
 
@@ -626,7 +626,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
          /* It is a FORTRAN common block.  At least for SGI Fortran the
             address is not in the symbol; we need to fix it later in
             scan_file_globals.  */
-         int bucket = hashname (DEPRECATED_SYMBOL_NAME (s));
+         int bucket = hashname (SYMBOL_LINKAGE_NAME (s));
          SYMBOL_VALUE_CHAIN (s) = global_sym_chain[bucket];
          global_sym_chain[bucket] = s;
        }
@@ -649,7 +649,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
     data:                      /* Common code for symbols describing data */
       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
       SYMBOL_CLASS (s) = class;
-      add_symbol (s, b);
+      add_symbol (s, top_stack->cur_st, b);
 
       /* Type could be missing if file is compiled without debugging info.  */
       if (SC_IS_UNDEF (sh->sc)
@@ -671,11 +671,12 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
       s = new_symbol (name);
 
       SYMBOL_DOMAIN (s) = VAR_DOMAIN;
+      SYMBOL_IS_ARGUMENT (s) = 1;
       switch (sh->sc)
        {
        case scRegister:
          /* Pass by value in register.  */
-         SYMBOL_CLASS (s) = LOC_REGPARM;
+         SYMBOL_CLASS (s) = LOC_REGISTER;
          svalue = gdbarch_ecoff_reg_to_regnum (current_gdbarch, svalue);
          break;
        case scVar:
@@ -694,7 +695,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
        }
       SYMBOL_VALUE (s) = svalue;
       SYMBOL_TYPE (s) = parse_type (cur_fd, ax, sh->index, 0, bigend, name);
-      add_symbol (s, top_stack->cur_block);
+      add_symbol (s, top_stack->cur_st, top_stack->cur_block);
       break;
 
     case stLabel:              /* label, goes into current block */
@@ -703,7 +704,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
       SYMBOL_CLASS (s) = LOC_LABEL;    /* but not misused */
       SYMBOL_VALUE_ADDRESS (s) = (CORE_ADDR) sh->value;
       SYMBOL_TYPE (s) = mdebug_type_int;
-      add_symbol (s, top_stack->cur_block);
+      add_symbol (s, top_stack->cur_st, top_stack->cur_block);
       break;
 
     case stProc:               /* Procedure, usually goes into global block */
@@ -780,7 +781,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
          else if (sh->value == top_stack->procadr)
            b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
        }
-      add_symbol (s, b);
+      add_symbol (s, top_stack->cur_st, b);
 
       /* Make a type for the procedure itself */
       SYMBOL_TYPE (s) = lookup_function_type (t);
@@ -788,7 +789,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
       /* All functions in C++ have prototypes.  For C we don't have enough
          information in the debug info.  */
       if (SYMBOL_LANGUAGE (s) == language_cplus)
-       TYPE_FLAGS (SYMBOL_TYPE (s)) |= TYPE_FLAG_PROTOTYPED;
+       TYPE_PROTOTYPED (SYMBOL_TYPE (s)) = 1;
 
       /* Create and enter a new lexical context */
       b = new_block (FUNCTION_BLOCK);
@@ -1053,33 +1054,32 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
                if (tsym.st != stMember)
                  break;
 
-               FIELD_BITPOS (*f) = tsym.value;
+               SET_FIELD_BITPOS (*f, tsym.value);
                FIELD_TYPE (*f) = t;
                FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
                FIELD_BITSIZE (*f) = 0;
-               FIELD_STATIC_KIND (*f) = 0;
 
                enum_sym = ((struct symbol *)
                            obstack_alloc (&current_objfile->objfile_obstack,
                                           sizeof (struct symbol)));
                memset (enum_sym, 0, sizeof (struct symbol));
-               DEPRECATED_SYMBOL_NAME (enum_sym) =
-                 obsavestring (f->name, strlen (f->name),
-                               &current_objfile->objfile_obstack);
+               SYMBOL_SET_LINKAGE_NAME
+                 (enum_sym, obsavestring (f->name, strlen (f->name),
+                                          &current_objfile->objfile_obstack));
                SYMBOL_CLASS (enum_sym) = LOC_CONST;
                SYMBOL_TYPE (enum_sym) = t;
                SYMBOL_DOMAIN (enum_sym) = VAR_DOMAIN;
                SYMBOL_VALUE (enum_sym) = tsym.value;
                if (SYMBOL_VALUE (enum_sym) < 0)
                  unsigned_enum = 0;
-               add_symbol (enum_sym, top_stack->cur_block);
+               add_symbol (enum_sym, top_stack->cur_st, top_stack->cur_block);
 
                /* Skip the stMembers that we've handled. */
                count++;
                f++;
              }
            if (unsigned_enum)
-             TYPE_FLAGS (t) |= TYPE_FLAG_UNSIGNED;
+             TYPE_UNSIGNED (t) = 1;
          }
        /* make this the current type */
        top_stack->cur_type = t;
@@ -1093,7 +1093,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
           do not create a symbol for it either.  */
        if (TYPE_NFIELDS (t) == 0)
          {
-           TYPE_FLAGS (t) |= TYPE_FLAG_STUB;
+           TYPE_STUB (t) = 1;
            break;
          }
 
@@ -1102,7 +1102,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
        SYMBOL_CLASS (s) = LOC_TYPEDEF;
        SYMBOL_VALUE (s) = 0;
        SYMBOL_TYPE (s) = t;
-       add_symbol (s, top_stack->cur_block);
+       add_symbol (s, top_stack->cur_st, top_stack->cur_block);
        break;
 
        /* End of local variables shared by struct, union, enum, and
@@ -1164,7 +1164,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
          SYMBOL_VALUE (s) = (long) e;
          e->numargs = top_stack->numargs;
          e->pdr.framereg = -1;
-         add_symbol (s, top_stack->cur_block);
+         add_symbol (s, top_stack->cur_st, top_stack->cur_block);
 
          /* f77 emits proc-level with address bounds==[0,0],
             So look for such child blocks, and patch them.  */
@@ -1201,18 +1201,11 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
                      if (iparams == nparams)
                        break;
 
-                     switch (SYMBOL_CLASS (sym))
+                     if (SYMBOL_IS_ARGUMENT (sym))
                        {
-                       case LOC_ARG:
-                       case LOC_REF_ARG:
-                       case LOC_REGPARM:
-                       case LOC_REGPARM_ADDR:
                          TYPE_FIELD_TYPE (ftype, iparams) = SYMBOL_TYPE (sym);
                          TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
                          iparams++;
-                         break;
-                       default:
-                         break;
                        }
                    }
                }
@@ -1247,11 +1240,10 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
     case stMember:             /* member of struct or union */
       f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
       FIELD_NAME (*f) = name;
-      FIELD_BITPOS (*f) = sh->value;
+      SET_FIELD_BITPOS (*f, sh->value);
       bitsize = 0;
       FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
       FIELD_BITSIZE (*f) = bitsize;
-      FIELD_STATIC_KIND (*f) = 0;
       break;
 
     case stIndirect:           /* forward declaration on Irix5 */
@@ -1303,7 +1295,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
       SYMBOL_CLASS (s) = LOC_TYPEDEF;
       SYMBOL_BLOCK_VALUE (s) = top_stack->cur_block;
       SYMBOL_TYPE (s) = t;
-      add_symbol (s, top_stack->cur_block);
+      add_symbol (s, top_stack->cur_st, top_stack->cur_block);
 
       /* Incomplete definitions of structs should not get a name.  */
       if (TYPE_NAME (SYMBOL_TYPE (s)) == NULL
@@ -1334,7 +1326,7 @@ parse_symbol (SYMR *sh, union aux_ext *ax, char *ext_sh, int bigend,
                 for anything except pointers or functions.  */
            }
          else
-           TYPE_NAME (SYMBOL_TYPE (s)) = DEPRECATED_SYMBOL_NAME (s);
+           TYPE_NAME (SYMBOL_TYPE (s)) = SYMBOL_LINKAGE_NAME (s);
        }
       break;
 
@@ -1652,11 +1644,11 @@ parse_type (int fd, union aux_ext *ax, unsigned int aux_index, int *bs,
                          TYPE_ALLOC (tp, 2 * sizeof (struct field)));
       TYPE_FIELD_NAME (tp, 0) = obsavestring ("Low", strlen ("Low"),
                                            &current_objfile->objfile_obstack);
-      TYPE_FIELD_BITPOS (tp, 0) = AUX_GET_DNLOW (bigend, ax);
+      TYPE_LOW_BOUND (tp) = AUX_GET_DNLOW (bigend, ax);
       ax++;
       TYPE_FIELD_NAME (tp, 1) = obsavestring ("High", strlen ("High"),
                                            &current_objfile->objfile_obstack);
-      TYPE_FIELD_BITPOS (tp, 1) = AUX_GET_DNHIGH (bigend, ax);
+      TYPE_HIGH_BOUND (tp) = AUX_GET_DNHIGH (bigend, ax);
       ax++;
     }
 
@@ -1783,12 +1775,9 @@ upgrade_type (int fd, struct type **tpp, int tq, union aux_ext *ax, int bigend,
          ignore the erroneous bitsize from the auxiliary entry safely.
          dbx seems to ignore it too.  */
 
-      /* TYPE_FLAG_TARGET_STUB now takes care of the zero TYPE_LENGTH
-         problem.  */
+      /* TYPE_TARGET_STUB now takes care of the zero TYPE_LENGTH problem.  */
       if (TYPE_LENGTH (*tpp) == 0)
-       {
-         TYPE_FLAGS (t) |= TYPE_FLAG_TARGET_STUB;
-       }
+       TYPE_TARGET_STUB (t) = 1;
 
       *tpp = t;
       return 4 + off;
@@ -1910,7 +1899,7 @@ parse_procedure (PDR *pr, struct symtab *search_symtab,
       SYMBOL_CLASS (s) = LOC_BLOCK;
       /* Donno its type, hope int is ok */
       SYMBOL_TYPE (s) = lookup_function_type (mdebug_type_int);
-      add_symbol (s, top_stack->cur_block);
+      add_symbol (s, top_stack->cur_st, top_stack->cur_block);
       /* Wont have symbols for this one */
       b = new_block (2);
       SYMBOL_BLOCK_VALUE (s) = b;
@@ -2217,7 +2206,7 @@ record_minimal_symbol (const char *name, const CORE_ADDR address,
         bfd_section = NULL;
     }
 
-  prim_record_minimal_symbol_and_info (name, address, ms_type, NULL,
+  prim_record_minimal_symbol_and_info (name, address, ms_type,
                                        section, bfd_section, objfile);
 }
 
@@ -3346,7 +3335,7 @@ parse_partial_symbols (struct objfile *objfile)
 
                case stStaticProc:
                  prim_record_minimal_symbol_and_info (name, sh.value,
-                                                      mst_file_text, NULL,
+                                                      mst_file_text,
                                                       SECT_OFF_TEXT (objfile), NULL,
                                                       objfile);
 
@@ -3432,13 +3421,13 @@ parse_partial_symbols (struct objfile *objfile)
                case stStatic:  /* Variable */
                  if (SC_IS_DATA (sh.sc))
                    prim_record_minimal_symbol_and_info (name, sh.value,
-                                                        mst_file_data, NULL,
+                                                        mst_file_data,
                                                         SECT_OFF_DATA (objfile),
                                                         NULL,
                                                         objfile);
                  else
                    prim_record_minimal_symbol_and_info (name, sh.value,
-                                                        mst_file_bss, NULL,
+                                                        mst_file_bss,
                                                         SECT_OFF_BSS (objfile),
                                                         NULL,
                                                         objfile);
@@ -4423,10 +4412,10 @@ mylookup_symbol (char *name, struct block *block,
   inc = name[0];
   ALL_BLOCK_SYMBOLS (block, iter, sym)
     {
-      if (DEPRECATED_SYMBOL_NAME (sym)[0] == inc
+      if (SYMBOL_LINKAGE_NAME (sym)[0] == inc
          && SYMBOL_DOMAIN (sym) == domain
          && SYMBOL_CLASS (sym) == class
-         && strcmp (DEPRECATED_SYMBOL_NAME (sym), name) == 0)
+         && strcmp (SYMBOL_LINKAGE_NAME (sym), name) == 0)
        return sym;
     }
 
@@ -4440,8 +4429,9 @@ mylookup_symbol (char *name, struct block *block,
 /* Add a new symbol S to a block B.  */
 
 static void
-add_symbol (struct symbol *s, struct block *b)
+add_symbol (struct symbol *s, struct symtab *symtab, struct block *b)
 {
+  SYMBOL_SYMTAB (s) = symtab;
   dict_add_symbol (BLOCK_DICT (b), s);
 }