X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcoffread.c;h=8b1f040f95f4fa157536fb2ee2504d88fad73239;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=60efb59b1a341a89bae56ffde667aa9669efc1fa;hpb=6a053cb1ff643cec3349d7f2f47ae5573f82d613;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/coffread.c b/gdb/coffread.c index 60efb59b1a..8b1f040f95 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -753,7 +753,7 @@ coff_symtab_read (minimal_symbol_reader &reader, long symtab_offset, unsigned int nsyms, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct context_stack *newobj = nullptr; struct coff_symbol coff_symbol; struct coff_symbol *cs = &coff_symbol; @@ -920,7 +920,7 @@ coff_symtab_read (minimal_symbol_reader &reader, if (in_source_file) complete_symtab (filestring, (cs->c_value - + objfile->section_offsets[SECT_OFF_TEXT (objfile)]), + + objfile->text_section_offset ()), main_aux.x_scn.x_scnlen); in_source_file = 0; } @@ -1113,7 +1113,7 @@ coff_symtab_read (minimal_symbol_reader &reader, NULL, cstk.start_addr, fcn_cs_saved.c_value + fcn_aux_saved.x_sym.x_misc.x_fsize - + objfile->section_offsets[SECT_OFF_TEXT (objfile)]); + + objfile->text_section_offset ()); within_function = 0; } break; @@ -1122,7 +1122,7 @@ coff_symtab_read (minimal_symbol_reader &reader, if (strcmp (cs->c_name, ".bb") == 0) { tmpaddr = cs->c_value; - tmpaddr += objfile->section_offsets[SECT_OFF_TEXT (objfile)]; + tmpaddr += objfile->text_section_offset (); push_context (++depth, tmpaddr); } else if (strcmp (cs->c_name, ".eb") == 0) @@ -1145,9 +1145,7 @@ coff_symtab_read (minimal_symbol_reader &reader, } if (*get_local_symbols () && !outermost_context_p ()) { - tmpaddr - = (cs->c_value - + objfile->section_offsets[SECT_OFF_TEXT (objfile)]); + tmpaddr = cs->c_value + objfile->text_section_offset (); /* Make a block for the local symbols within. */ finish_block (0, cstk.old_blocks, NULL, cstk.start_addr, tmpaddr); @@ -1404,7 +1402,7 @@ static void enter_linenos (long file_offset, int first_line, int last_line, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); char *rawptr; struct internal_lineno lptr; @@ -1439,7 +1437,7 @@ enter_linenos (long file_offset, int first_line, if (L_LNNO32 (&lptr) && L_LNNO32 (&lptr) <= last_line) { CORE_ADDR addr = lptr.l_addr.l_paddr; - addr += objfile->section_offsets[SECT_OFF_TEXT (objfile)]; + addr += objfile->text_section_offset (); record_line (get_current_subfile (), first_line + L_LNNO32 (&lptr), gdbarch_addr_bits_remove (gdbarch, addr)); @@ -1454,24 +1452,21 @@ patch_type (struct type *type, struct type *real_type) { struct type *target = TYPE_TARGET_TYPE (type); struct type *real_target = TYPE_TARGET_TYPE (real_type); - int field_size = TYPE_NFIELDS (real_target) * sizeof (struct field); + int field_size = real_target->num_fields () * sizeof (struct field); TYPE_LENGTH (target) = TYPE_LENGTH (real_target); - TYPE_NFIELDS (target) = TYPE_NFIELDS (real_target); - TYPE_FIELDS (target) = (struct field *) TYPE_ALLOC (target, - field_size); + target->set_num_fields (real_target->num_fields ()); - memcpy (TYPE_FIELDS (target), - TYPE_FIELDS (real_target), - field_size); + field *fields = (struct field *) TYPE_ALLOC (target, field_size); + memcpy (fields, real_target->fields (), field_size); + target->set_fields (fields); - if (TYPE_NAME (real_target)) + if (real_target->name ()) { /* The previous copy of TYPE_NAME is allocated by process_coff_symbol. */ - if (TYPE_NAME (target)) - xfree ((char*) TYPE_NAME (target)); - TYPE_NAME (target) = xstrdup (TYPE_NAME (real_target)); + xfree ((char *) target->name ()); + target->set_name (xstrdup (real_target->name ())); } } @@ -1496,7 +1491,7 @@ patch_opaque_types (struct symtab *s) from different files with the same name. */ if (SYMBOL_CLASS (real_sym) == LOC_TYPEDEF && SYMBOL_DOMAIN (real_sym) == VAR_DOMAIN - && TYPE_CODE (SYMBOL_TYPE (real_sym)) == TYPE_CODE_PTR + && SYMBOL_TYPE (real_sym)->code () == TYPE_CODE_PTR && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (real_sym))) != 0) { const char *name = real_sym->linkage_name (); @@ -1558,7 +1553,7 @@ process_coff_symbol (struct coff_symbol *cs, union internal_auxent *aux, struct objfile *objfile) { - struct symbol *sym = allocate_symbol (objfile); + struct symbol *sym = new (&objfile->objfile_obstack) symbol; char *name; name = cs->c_name; @@ -1574,7 +1569,7 @@ process_coff_symbol (struct coff_symbol *cs, if (ISFCN (cs->c_type)) { - SYMBOL_VALUE (sym) += objfile->section_offsets[SECT_OFF_TEXT (objfile)]; + SYMBOL_VALUE (sym) += objfile->text_section_offset (); SYMBOL_TYPE (sym) = lookup_function_type (decode_function_type (cs, cs->c_type, aux, objfile)); @@ -1660,10 +1655,10 @@ process_coff_symbol (struct coff_symbol *cs, SYMBOL_DOMAIN (sym) = VAR_DOMAIN; /* If type has no name, give it one. */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) + if (SYMBOL_TYPE (sym)->name () == 0) { - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR - || TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_FUNC) + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR + || SYMBOL_TYPE (sym)->code () == TYPE_CODE_FUNC) { /* If we are giving a name to a type such as "pointer to foo" or "function returning foo", we @@ -1686,8 +1681,7 @@ process_coff_symbol (struct coff_symbol *cs, ; } else - TYPE_NAME (SYMBOL_TYPE (sym)) = - xstrdup (sym->linkage_name ()); + SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ())); } /* Keep track of any type which points to empty structured @@ -1696,10 +1690,10 @@ process_coff_symbol (struct coff_symbol *cs, not an empty structured type, though; the forward references work themselves out via the magic of coff_lookup_type. */ - if (TYPE_CODE (SYMBOL_TYPE (sym)) == TYPE_CODE_PTR + if (SYMBOL_TYPE (sym)->code () == TYPE_CODE_PTR && TYPE_LENGTH (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) == 0 - && TYPE_CODE (TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))) - != TYPE_CODE_UNDEF) + && TYPE_TARGET_TYPE (SYMBOL_TYPE (sym))->code () + != TYPE_CODE_UNDEF) { int i = hashname (sym->linkage_name ()); @@ -1718,11 +1712,11 @@ process_coff_symbol (struct coff_symbol *cs, /* Some compilers try to be helpful by inventing "fake" names for anonymous enums, structures, and unions, like "~0fake" or ".0fake". Thanks, but no thanks... */ - if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0) + if (SYMBOL_TYPE (sym)->name () == 0) if (sym->linkage_name () != NULL && *sym->linkage_name () != '~' && *sym->linkage_name () != '.') - TYPE_NAME (SYMBOL_TYPE (sym)) = xstrdup (sym->linkage_name ()); + SYMBOL_TYPE (sym)->set_name (xstrdup (sym->linkage_name ())); add_symbol_to_list (sym, get_file_symbols ()); break; @@ -1836,7 +1830,7 @@ decode_base_type (struct coff_symbol *cs, union internal_auxent *aux, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct type *type; switch (c_type) @@ -1882,12 +1876,12 @@ decode_base_type (struct coff_symbol *cs, { /* Anonymous structure type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_CODE (type) = TYPE_CODE_STRUCT; - TYPE_NAME (type) = NULL; + type->set_code (TYPE_CODE_STRUCT); + type->set_name (NULL); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1903,11 +1897,11 @@ decode_base_type (struct coff_symbol *cs, { /* Anonymous union type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_NAME (type) = NULL; + type->set_name (NULL); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1916,7 +1910,7 @@ decode_base_type (struct coff_symbol *cs, aux->x_sym.x_fcnary.x_fcn.x_endndx.l, objfile); } - TYPE_CODE (type) = TYPE_CODE_UNION; + type->set_code (TYPE_CODE_UNION); return type; case T_ENUM: @@ -1924,11 +1918,11 @@ decode_base_type (struct coff_symbol *cs, { /* Anonymous enum type. */ type = coff_alloc_type (cs->c_symnum); - TYPE_CODE (type) = TYPE_CODE_ENUM; - TYPE_NAME (type) = NULL; + type->set_code (TYPE_CODE_ENUM); + type->set_name (NULL); TYPE_LENGTH (type) = 0; - TYPE_FIELDS (type) = 0; - TYPE_NFIELDS (type) = 0; + type->set_fields (nullptr); + type->set_num_fields (0); } else { @@ -1992,7 +1986,7 @@ coff_read_struct_type (int index, int length, int lastsym, int done = 0; type = coff_alloc_type (index); - TYPE_CODE (type) = TYPE_CODE_STRUCT; + type->set_code (TYPE_CODE_STRUCT); INIT_CPLUS_SPECIFIC (type); TYPE_LENGTH (type) = length; @@ -2044,14 +2038,14 @@ coff_read_struct_type (int index, int length, int lastsym, } /* Now create the vector of fields, and record how big it is. */ - TYPE_NFIELDS (type) = nfields; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nfields); + type->set_num_fields (nfields); + type->set_fields + ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nfields)); /* Copy the saved-up fields into the field vector. */ for (n = nfields; list; list = list->next) - TYPE_FIELD (type, --n) = list->field; + type->field (--n) = list->field; return type; } @@ -2064,7 +2058,7 @@ static struct type * coff_read_enum_type (int index, int length, int lastsym, struct objfile *objfile) { - struct gdbarch *gdbarch = get_objfile_arch (objfile); + struct gdbarch *gdbarch = objfile->arch (); struct symbol *sym; struct type *type; int nsyms = 0; @@ -2097,7 +2091,7 @@ coff_read_enum_type (int index, int length, int lastsym, switch (ms->c_sclass) { case C_MOE: - sym = allocate_symbol (objfile); + sym = new (&objfile->objfile_obstack) symbol; name = obstack_strdup (&objfile->objfile_obstack, name); sym->set_linkage_name (name); @@ -2123,10 +2117,10 @@ coff_read_enum_type (int index, int length, int lastsym, TYPE_LENGTH (type) = length; else /* Assume ints. */ TYPE_LENGTH (type) = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT; - TYPE_CODE (type) = TYPE_CODE_ENUM; - TYPE_NFIELDS (type) = nsyms; - TYPE_FIELDS (type) = (struct field *) - TYPE_ALLOC (type, sizeof (struct field) * nsyms); + type->set_code (TYPE_CODE_ENUM); + type->set_num_fields (nsyms); + type->set_fields + ((struct field *) TYPE_ALLOC (type, sizeof (struct field) * nsyms)); /* Find the symbols for the values and put them into the type. The symbols can be found in the symlist that we put them on @@ -2148,7 +2142,7 @@ coff_read_enum_type (int index, int length, int lastsym, SYMBOL_TYPE (xsym) = type; TYPE_FIELD_NAME (type, n) = xsym->linkage_name (); - SET_FIELD_ENUMVAL (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym)); + SET_FIELD_ENUMVAL (type->field (n), SYMBOL_VALUE (xsym)); if (SYMBOL_VALUE (xsym) < 0) unsigned_enum = 0; TYPE_FIELD_BITSIZE (type, n) = 0; @@ -2188,8 +2182,9 @@ static const struct sym_fns coff_sym_fns = &psym_functions }; +void _initialize_coffread (); void -_initialize_coffread (void) +_initialize_coffread () { add_symtab_fns (bfd_target_coff_flavour, &coff_sym_fns);