X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fdbxread.c;h=165040dd7ce4fd7ecc29204f03b0c5ff72daf382;hb=e008305278cb42a576107cd8aa9f0b182eea1af2;hp=cf35880b509b48735804a9e861ad3d9232037717;hpb=24b21115f522cd0fbe55986cd914a593576294ef;p=binutils-gdb.git diff --git a/gdb/dbxread.c b/gdb/dbxread.c index cf35880b509..165040dd7ce 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -1,5 +1,5 @@ /* Read dbx symbol tables and convert to internal format, for GDB. - Copyright (C) 1986-2021 Free Software Foundation, Inc. + Copyright (C) 1986-2022 Free Software Foundation, Inc. This file is part of GDB. @@ -31,12 +31,8 @@ for real. dbx_psymtab_to_symtab() is the function that does this */ #include "defs.h" -#if defined(__CYGNUSCLIB__) -#include -#include -#endif -#include "gdb_obstack.h" +#include "gdbsupport/gdb_obstack.h" #include #include "symtab.h" #include "breakpoint.h" @@ -1465,23 +1461,33 @@ read_dbx_symtab (minimal_symbol_reader &reader, switch (p[1]) { case 'S': - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_STATIC, - data_sect_index, - psymbol_placement::STATIC, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_STATIC, + data_sect_index, + psymbol_placement::STATIC, + nlist.n_value, psymtab_language, + partial_symtabs, objfile); + else + complaint (_("static `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); continue; case 'G': /* The addresses in these entries are reported to be wrong. See the code that reads 'G's for symtabs. */ - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_STATIC, - data_sect_index, - psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_STATIC, + data_sect_index, + psymbol_placement::GLOBAL, + nlist.n_value, psymtab_language, + partial_symtabs, objfile); + else + complaint (_("global `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); continue; case 'T': @@ -1495,19 +1501,30 @@ read_dbx_symtab (minimal_symbol_reader &reader, || (p == namestring + 1 && namestring[0] != ' ')) { - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), + true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, + 0, psymtab_language, + partial_symtabs, objfile); + else + complaint (_("enum, struct, or union `%*s' appears " + "to be defined outside of all " + "compilation units"), + sym_len, sym_name); if (p[2] == 't') { /* Also a typedef with the same name. */ - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, + 0, psymtab_language, + partial_symtabs, objfile); + else + complaint (_("typedef `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); p += 1; } } @@ -1516,11 +1533,16 @@ read_dbx_symtab (minimal_symbol_reader &reader, case 't': if (p != namestring) /* a name is there, not just :T... */ { - pst->add_psymbol (gdb::string_view (sym_name, sym_len), - true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, - 0, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), + true, VAR_DOMAIN, LOC_TYPEDEF, -1, + psymbol_placement::STATIC, + 0, psymtab_language, + partial_symtabs, objfile); + else + complaint (_("typename `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); } check_enum: /* If this is an enumerated type, we need to @@ -1578,11 +1600,16 @@ read_dbx_symtab (minimal_symbol_reader &reader, ; /* Note that the value doesn't matter for enum constants in psymtabs, just in symtabs. */ - pst->add_psymbol (gdb::string_view (p, q - p), true, - VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, - psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (p, q - p), true, + VAR_DOMAIN, LOC_CONST, -1, + psymbol_placement::STATIC, 0, + psymtab_language, + partial_symtabs, objfile); + else + complaint (_("enum constant `%*s' appears to be defined " + "outside of all compilation units"), + ((int) (q - p)), p); /* Point past the name. */ p = q; /* Skip over the value. */ @@ -1597,23 +1624,24 @@ read_dbx_symtab (minimal_symbol_reader &reader, case 'c': /* Constant, e.g. from "const" in Pascal. */ - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, - psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_CONST, -1, + psymbol_placement::STATIC, 0, + psymtab_language, + partial_symtabs, objfile); + else + complaint (_("constant `%*s' appears to be defined " + "outside of all compilation units"), + sym_len, sym_name); + continue; case 'f': if (! pst) { - int name_len = p - namestring; - char *name = (char *) xmalloc (name_len + 1); - - memcpy (name, namestring, name_len); - name[name_len] = '\0'; - function_outside_compilation_unit_complaint (name); - xfree (name); + std::string name (namestring, (p - namestring)); + function_outside_compilation_unit_complaint (name.c_str ()); } /* Kludges for ELF/STABS with Sun ACC. */ last_function_name = namestring; @@ -1653,12 +1681,13 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst->set_text_low (nlist.n_value); textlow_not_set = 0; } - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::STATIC, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_BLOCK, + SECT_OFF_TEXT (objfile), + psymbol_placement::STATIC, + nlist.n_value, psymtab_language, + partial_symtabs, objfile); continue; /* Global functions were ignored here, but now they @@ -1667,13 +1696,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, case 'F': if (! pst) { - int name_len = p - namestring; - char *name = (char *) xmalloc (name_len + 1); - - memcpy (name, namestring, name_len); - name[name_len] = '\0'; - function_outside_compilation_unit_complaint (name); - xfree (name); + std::string name (namestring, (p - namestring)); + function_outside_compilation_unit_complaint (name.c_str ()); } /* Kludges for ELF/STABS with Sun ACC. */ last_function_name = namestring; @@ -1713,12 +1737,13 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst->set_text_low (nlist.n_value); textlow_not_set = 0; } - pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, - VAR_DOMAIN, LOC_BLOCK, - SECT_OFF_TEXT (objfile), - psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, - partial_symtabs, objfile); + if (pst != nullptr) + pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, + VAR_DOMAIN, LOC_BLOCK, + SECT_OFF_TEXT (objfile), + psymbol_placement::GLOBAL, + nlist.n_value, psymtab_language, + partial_symtabs, objfile); continue; /* Two things show up here (hopefully); static symbols of