X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fxcoffread.c;h=d0fa90e49fb6b670fd1f49fbc5656a14488c853d;hb=6a053cb1ff643cec3349d7f2f47ae5573f82d613;hp=bc4877389b0f1ce7e0c84388298cdb1c2df39180;hpb=39ef2f6256737db92f5d60fa201fe0b301bb8100;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index bc4877389b..d0fa90e49f 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1,5 +1,5 @@ /* Read AIX xcoff symbol tables and convert to internal format, for GDB. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. Derived from coffread.c, dbxread.c, and a lot of hacking. Contributed by IBM Corporation. @@ -864,7 +864,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, addr = (int_lnno.l_lnno ? int_lnno.l_addr.l_paddr : read_symbol_nvalue (int_lnno.l_addr.l_symndx)); - addr += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile)); + addr += objfile->section_offsets[SECT_OFF_TEXT (objfile)]; if (addr < startaddr || (endaddr && addr >= endaddr)) return; @@ -1232,8 +1232,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) } file_start_addr = - cs->c_value + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + cs->c_value + objfile->section_offsets[SECT_OFF_TEXT (objfile)]; file_end_addr = file_start_addr + CSECT_LEN (&main_aux); if (cs->c_name && (cs->c_name[0] == '.' || cs->c_name[0] == '@')) @@ -1355,8 +1354,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) case C_FCN: if (strcmp (cs->c_name, ".bf") == 0) { - CORE_ADDR off = ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)); + CORE_ADDR off = objfile->section_offsets[SECT_OFF_TEXT (objfile)]; bfd_coff_swap_aux_in (abfd, raw_auxptr, cs->c_type, cs->c_sclass, 0, cs->c_naux, &main_aux); @@ -1400,8 +1398,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) NULL, cstk.start_addr, (fcn_cs_saved.c_value + fcn_aux_saved.x_sym.x_misc.x_fsize - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->section_offsets[SECT_OFF_TEXT (objfile)])); within_function = 0; } break; @@ -1468,8 +1465,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) depth++; newobj = push_context (depth, (cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->section_offsets[SECT_OFF_TEXT (objfile)])); } else if (strcmp (cs->c_name, ".eb") == 0) { @@ -1491,8 +1487,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) cstk.old_blocks, NULL, cstk.start_addr, (cs->c_value - + ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile)))); + + objfile->section_offsets[SECT_OFF_TEXT (objfile)])); } *get_local_symbols () = cstk.locals; } @@ -1522,7 +1517,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst) } #define SYMBOL_DUP(SYMBOL1, SYMBOL2) \ - (SYMBOL2) = XOBNEW (&objfile->objfile_obstack, struct symbol); \ + (SYMBOL2) = new (&objfile->objfile_obstack) symbol (); \ *(SYMBOL2) = *(SYMBOL1); @@ -1554,7 +1549,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) else { sec = secnum_to_section (cs->c_secnum, objfile); - off = ANOFFSET (objfile->section_offsets, sec); + off = objfile->section_offsets[sec]; } name = cs->c_name; @@ -1574,7 +1569,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) will be patched with the type from its stab entry later on in patch_block_stabs (), unless the file was compiled without -g. */ - SYMBOL_SET_LINKAGE_NAME (sym, SYMNAME_ALLOC (name, symname_alloced)); + sym->set_linkage_name (SYMNAME_ALLOC (name, symname_alloced)); SYMBOL_TYPE (sym) = objfile_type (objfile)->nodebug_text_symbol; SYMBOL_ACLASS_INDEX (sym) = LOC_BLOCK; @@ -1657,8 +1652,7 @@ process_xcoff_symbol (struct coff_symbol *cs, struct objfile *objfile) if (*pp == 'V' && !within_function) *pp = 'S'; sym = define_symbol ((cs->c_value - + ANOFFSET (objfile->section_offsets, - static_block_section)), + + objfile->section_offsets[static_block_section]), cs->c_name, 0, 0, objfile); if (sym != NULL) { @@ -2634,8 +2628,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, namestring = gdbarch_static_transform_name (gdbarch, namestring); - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_STATIC, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::STATIC, symbol.n_value, @@ -2645,8 +2640,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, case 'G': /* The addresses in these entries are reported to be wrong. See the code that reads 'G's for symtabs. */ - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_STATIC, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::GLOBAL, symbol.n_value, @@ -2664,15 +2660,17 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, || (p == namestring + 1 && namestring[0] != ' ')) { - add_psymbol_to_list (namestring, p - namestring, true, - STRUCT_DOMAIN, LOC_TYPEDEF, -1, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, 0, psymtab_language, objfile); if (p[2] == 't') { /* Also a typedef with the same name. */ - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_TYPEDEF, -1, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, 0, psymtab_language, objfile); p += 1; @@ -2683,8 +2681,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, case 't': if (p != namestring) /* a name is there, not just :T... */ { - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_TYPEDEF, -1, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, 0, psymtab_language, objfile); } @@ -2745,7 +2744,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, ; /* Note that the value doesn't matter for enum constants in psymtabs, just in symtabs. */ - add_psymbol_to_list (p, q - p, true, + add_psymbol_to_list (gdb::string_view (p, q - p), true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, 0, psymtab_language, objfile); @@ -2763,8 +2762,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, case 'c': /* Constant, e.g. from "const" in Pascal. */ - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_CONST, -1, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, 0, psymtab_language, objfile); continue; @@ -2780,8 +2780,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, function_outside_compilation_unit_complaint (name); xfree (name); } - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_BLOCK, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::STATIC, symbol.n_value, @@ -2810,8 +2811,9 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, if (startswith (namestring, "@FIX")) continue; - add_psymbol_to_list (namestring, p - namestring, true, - VAR_DOMAIN, LOC_BLOCK, + add_psymbol_to_list (gdb::string_view (namestring, + p - namestring), + true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::GLOBAL, symbol.n_value, @@ -3016,7 +3018,7 @@ xcoff_symfile_offsets (struct objfile *objfile, us to test whether the associated section exists or not, and then access it quickly (without searching it again). */ - if (objfile->num_sections == 0) + if (objfile->section_offsets.empty ()) return; /* Is that even possible? Better safe than sorry. */ first_section_name = bfd_section_name (objfile->sections[0].the_bfd_section);