From 584d0cdac2b1fee77adb587052decfce12077469 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 17 Mar 2023 16:37:15 -0600 Subject: Use unrelocated_addr in partial symbol tables This changes partial symbol tables to use unrelocated_addr for the text_high and text_low members. This revealed some latent bugs in ctfread.c, which are fixed here. --- gdb/dbxread.c | 60 +++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 34 insertions(+), 26 deletions(-) (limited to 'gdb/dbxread.c') diff --git a/gdb/dbxread.c b/gdb/dbxread.c index e5366cc..1ae527e 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -296,7 +296,7 @@ static void add_old_header_file (const char *, int); static void add_this_object_header_file (int); static legacy_psymtab *start_psymtab (psymtab_storage *, struct objfile *, - const char *, CORE_ADDR, int); + const char *, unrelocated_addr, int); /* Free up old header file tables. */ @@ -1125,16 +1125,18 @@ read_dbx_symtab (minimal_symbol_reader &reader, || (namestring[(nsl = strlen (namestring)) - 1] == 'o' && namestring[nsl - 2] == '.')) { + unrelocated_addr unrel_val = unrelocated_addr (nlist.n_value); + if (past_first_source_file && pst /* The gould NP1 uses low values for .o and -l symbols which are not the address. */ - && nlist.n_value >= pst->raw_text_low ()) + && unrel_val >= pst->raw_text_low ()) { dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - nlist.n_value > pst->raw_text_high () - ? nlist.n_value : pst->raw_text_high (), + unrel_val > pst->raw_text_high () + ? unrel_val : pst->raw_text_high (), dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1246,11 +1248,12 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst) { + unrelocated_addr unrel_value = unrelocated_addr (valu); dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (valu > pst->raw_text_high () - ? valu : pst->raw_text_high ()), + (unrel_value > pst->raw_text_high () + ? unrel_value : pst->raw_text_high ()), dependency_list, dependencies_used, prev_textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1291,7 +1294,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (!pst) { pst = start_psymtab (partial_symtabs, objfile, - namestring, valu, + namestring, + unrelocated_addr (valu), first_so_symnum * symbol_size); pst->dirname = dirname_nso; dirname_nso = NULL; @@ -1416,13 +1420,14 @@ read_dbx_symtab (minimal_symbol_reader &reader, /* See if this is an end of function stab. */ if (pst && nlist.n_type == N_FUN && *namestring == '\000') { - CORE_ADDR valu; + unrelocated_addr valu; /* It's value is the size (in bytes) of the function for function relative stabs, or the address of the function's end for old style stabs. */ - valu = nlist.n_value + last_function_start; - if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ()) + valu = unrelocated_addr (nlist.n_value + last_function_start); + if (pst->raw_text_high () == unrelocated_addr (0) + || valu > pst->raw_text_high ()) pst->set_text_high (valu); break; } @@ -1673,7 +1678,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } /* End kludge. */ @@ -1688,10 +1693,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, the partial symbol table. */ if (pst && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () + || (unrelocated_addr (nlist.n_value) + < pst->raw_text_low () && (nlist.n_value != 0)))) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } if (pst != nullptr) @@ -1729,7 +1735,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } /* End kludge. */ @@ -1744,10 +1750,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, the partial symbol table. */ if (pst && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () + || (unrelocated_addr (nlist.n_value) + < pst->raw_text_low () && (nlist.n_value != 0)))) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } if (pst != nullptr) @@ -1871,7 +1878,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (CORE_ADDR) 0, dependency_list, + (unrelocated_addr) 0, dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; includes_used = 0; @@ -1928,11 +1935,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, { /* Don't set high text address of PST lower than it already is. */ - CORE_ADDR text_end = - (lowest_text_address == (CORE_ADDR) -1 - ? text_addr - : lowest_text_address) - + text_size; + unrelocated_addr text_end + = unrelocated_addr ((lowest_text_address == (CORE_ADDR) -1 + ? text_addr + : lowest_text_address) + + text_size); dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, @@ -1952,7 +1959,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, static legacy_psymtab * start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile, - const char *filename, CORE_ADDR textlow, int ldsymoff) + const char *filename, unrelocated_addr textlow, int ldsymoff) { legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs, objfile->per_bfd, textlow); @@ -1983,7 +1990,7 @@ legacy_psymtab * dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, legacy_psymtab *pst, const char **include_list, int num_includes, - int capping_symbol_offset, CORE_ADDR capping_text, + int capping_symbol_offset, unrelocated_addr capping_text, legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set) @@ -2037,8 +2044,9 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, } if (minsym.minsym) - pst->set_text_high (minsym.minsym->value_raw_address () - + minsym.minsym->size ()); + pst->set_text_high + (unrelocated_addr (minsym.minsym->value_raw_address () + + minsym.minsym->size ())); last_function_name = NULL; } -- cgit v1.1