From: Jim Kingdon Date: Sun, 16 Apr 1995 00:53:31 +0000 (+0000) Subject: * xcoffread.c (xcoff_sym_fns): Revise comment about merging this X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=e2adc41a31cd16a5e8044b0a98b8d1818a6a69cb;p=deliverable%2Fbinutils-gdb.git * xcoffread.c (xcoff_sym_fns): Revise comment about merging this with coffread.c. * breakpoint.c (fixup_breakpoints): Removed. * rs6000-nat.c (vmap_symtab): Don't call fixup_breakpoints. (vmap_ldinfo, xcoff_relocate_core): Call breakpoint_re_set. * coffread.c (coff_symfile_offsets): Allocate SECT_OFF_MAX sections, not just SECT_OFF_MAX-1. * rs6000-nat.c (vmap_symtab), xcoffread.c: Re-do section offsets to be indexed by SECT_OFF_* instead of xcoff section numbers. * objfiles.c, remote.c: Remove comments regarding SECT_OFF_*. * symtab.h: Revise comment about block_line_section. * rs6000-nat.c (vmap_symtab): Don't relocate objfile->sections. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8816458e4b..dc6986cc38 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +Fri Apr 14 12:10:24 1995 Jim Kingdon + + * xcoffread.c (xcoff_sym_fns): Revise comment about merging this + with coffread.c. + + * breakpoint.c (fixup_breakpoints): Removed. + * rs6000-nat.c (vmap_symtab): Don't call fixup_breakpoints. + (vmap_ldinfo, xcoff_relocate_core): Call breakpoint_re_set. + + * coffread.c (coff_symfile_offsets): Allocate SECT_OFF_MAX + sections, not just SECT_OFF_MAX-1. + + * rs6000-nat.c (vmap_symtab), xcoffread.c: Re-do section offsets + to be indexed by SECT_OFF_* instead of xcoff section numbers. + * objfiles.c, remote.c: Remove comments regarding SECT_OFF_*. + * symtab.h: Revise comment about block_line_section. + * rs6000-nat.c (vmap_symtab): Don't relocate objfile->sections. + Sat Apr 15 14:15:14 1995 Stan Shebs * mpw-make.in (init.c): Don't try to do symbolic {o} in sed diff --git a/gdb/objfiles.c b/gdb/objfiles.c index c73716c441..caa595c04d 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -545,10 +545,6 @@ objfile_relocate (objfile, new_offsets) ALL_OBJFILE_PSYMTABS (objfile, p) { - /* FIXME: specific to symbol readers which use gdb-stabs.h. - We can only get away with it since objfile_relocate is only - used on XCOFF, which lacks psymtabs, and for gdb-stabs.h - targets. */ p->textlow += ANOFFSET (delta, SECT_OFF_TEXT); p->texthigh += ANOFFSET (delta, SECT_OFF_TEXT); } diff --git a/gdb/rs6000-nat.c b/gdb/rs6000-nat.c index 6b94052085..042f7ee75a 100644 --- a/gdb/rs6000-nat.c +++ b/gdb/rs6000-nat.c @@ -26,6 +26,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "objfiles.h" #include "libbfd.h" /* For bfd_cache_lookup (FIXME) */ #include "bfd.h" +#include "gdb-stabs.h" #include #include @@ -285,9 +286,6 @@ vmap_symtab (vp) register struct vmap *vp; { register struct objfile *objfile; - asection *textsec; - asection *datasec; - asection *bsssec; CORE_ADDR text_delta; CORE_ADDR data_delta; CORE_ADDR bss_delta; @@ -312,48 +310,19 @@ vmap_symtab (vp) for (i = 0; i < objfile->num_sections; ++i) ANOFFSET (new_offsets, i) = ANOFFSET (objfile->section_offsets, i); - textsec = bfd_get_section_by_name (vp->bfd, ".text"); text_delta = - vp->tstart - ANOFFSET (objfile->section_offsets, textsec->target_index); - ANOFFSET (new_offsets, textsec->target_index) = vp->tstart; + vp->tstart - ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT); + ANOFFSET (new_offsets, SECT_OFF_TEXT) = vp->tstart; - datasec = bfd_get_section_by_name (vp->bfd, ".data"); data_delta = - vp->dstart - ANOFFSET (objfile->section_offsets, datasec->target_index); - ANOFFSET (new_offsets, datasec->target_index) = vp->dstart; + vp->dstart - ANOFFSET (objfile->section_offsets, SECT_OFF_DATA); + ANOFFSET (new_offsets, SECT_OFF_DATA) = vp->dstart; - bsssec = bfd_get_section_by_name (vp->bfd, ".bss"); bss_delta = - vp->dstart - ANOFFSET (objfile->section_offsets, bsssec->target_index); - ANOFFSET (new_offsets, bsssec->target_index) = vp->dstart; + vp->dstart - ANOFFSET (objfile->section_offsets, SECT_OFF_BSS); + ANOFFSET (new_offsets, SECT_OFF_BSS) = vp->dstart; objfile_relocate (objfile, new_offsets); - - { - struct obj_section *s; - for (s = objfile->sections; s < objfile->sections_end; ++s) - { - if (s->the_bfd_section->target_index == textsec->target_index) - { - s->addr += text_delta; - s->endaddr += text_delta; - } - else if (s->the_bfd_section->target_index == datasec->target_index) - { - s->addr += data_delta; - s->endaddr += data_delta; - } - else if (s->the_bfd_section->target_index == bsssec->target_index) - { - s->addr += bss_delta; - s->endaddr += bss_delta; - } - } - } - - if (text_delta != 0) - /* breakpoints need to be relocated as well. */ - fixup_breakpoints (0, TEXT_SEGMENT_BASE, text_delta); } /* Add symbols for an objfile. */ @@ -568,6 +537,7 @@ symbols to the proper address).\n", gdb_stderr); free_objfile (symfile_objfile); symfile_objfile = NULL; } + breakpoint_re_set (); } /* As well as symbol tables, exec_sections need relocation. After @@ -786,5 +756,6 @@ xcoff_relocate_core (target) (CORE_ADDR)ldip->ldinfo_dataorg); } while (ldip->ldinfo_next != 0); vmap_exec (); + breakpoint_re_set (); do_cleanups (old); } diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index c727642ccb..ae02f438d2 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -214,7 +214,6 @@ static void add_stab_to_list PARAMS ((char *, struct pending_stabs **)); -#ifdef STATIC_NODEBUG_VARS /* Return the section_offsets* that CS points to. */ static int cs_to_section PARAMS ((struct coff_symbol *, struct objfile *)); @@ -256,7 +255,6 @@ cs_to_section (cs, objfile) bfd_map_over_sections (objfile->obfd, find_targ_sec, &args); return off; } -#endif /* STATIC_NODEBUG_VARS */ /* add a given stab string into given stab vector. */ @@ -1252,8 +1250,7 @@ read_xcoff_symtab (objfile, nsyms) { if (last_source_file) { - end_symtab (cur_src_end_addr, 1, 0, objfile, - textsec->target_index); + end_symtab (cur_src_end_addr, 1, 0, objfile, SECT_OFF_TEXT); end_stabs (); } @@ -1333,7 +1330,7 @@ read_xcoff_symtab (objfile, nsyms) complete_symtab (filestring, file_start_addr); cur_src_end_addr = file_end_addr; end_symtab (file_end_addr, 1, 0, objfile, - textsec->target_index); + SECT_OFF_TEXT); end_stabs (); start_stabs (); /* Give all csects for this source file the same @@ -1357,7 +1354,7 @@ read_xcoff_symtab (objfile, nsyms) { last_csect_name = cs->c_name; last_csect_val = cs->c_value; - last_csect_sec = cs->c_secnum; + last_csect_sec = cs_to_section (cs, objfile); } } misc_func_recorded = 0; @@ -1400,9 +1397,10 @@ read_xcoff_symtab (objfile, nsyms) case XMC_PR: /* a function entry point. */ function_entry_point: - RECORD_MINIMAL_SYMBOL (cs->c_name, cs->c_value, mst_text, - symname_alloced, cs->c_secnum, - objfile); + RECORD_MINIMAL_SYMBOL + (cs->c_name, cs->c_value, mst_text, + symname_alloced, cs_to_section (cs, objfile), + objfile); fcn_line_offset = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr; fcn_start_addr = cs->c_value; @@ -1518,7 +1516,7 @@ read_xcoff_symtab (objfile, nsyms) RECORD_MINIMAL_SYMBOL (cs->c_name, cs->c_value, mst_solib_trampoline, - symname_alloced, cs->c_secnum, objfile); + symname_alloced, cs_to_section (cs, objfile), objfile); continue; case XMC_DS: @@ -1575,7 +1573,7 @@ read_xcoff_symtab (objfile, nsyms) complete_symtab (filestring, file_start_addr); cur_src_end_addr = file_end_addr; - end_symtab (file_end_addr, 1, 0, objfile, textsec->target_index); + end_symtab (file_end_addr, 1, 0, objfile, SECT_OFF_TEXT); end_stabs (); /* XCOFF, according to the AIX 3.2 documentation, puts the filename @@ -1621,7 +1619,7 @@ read_xcoff_symtab (objfile, nsyms) new->name = define_symbol (fcn_cs_saved.c_value, fcn_stab_saved.c_name, 0, 0, objfile); if (new->name != NULL) - SYMBOL_SECTION (new->name) = cs->c_secnum; + SYMBOL_SECTION (new->name) = cs_to_section (cs, objfile); } else if (STREQ (cs->c_name, ".ef")) { @@ -1656,10 +1654,12 @@ read_xcoff_symtab (objfile, nsyms) /* Begin static block. */ { struct internal_syment symbol; + struct coff_symbol csymbol; read_symbol (&symbol, cs->c_value); static_block_base = symbol.n_value; - static_block_section = symbol.n_scnum; + csymbol.c_secnum = symbol.n_scnum; + static_block_section = cs_to_section (&csymbol, objfile); } break; @@ -1721,7 +1721,7 @@ read_xcoff_symtab (objfile, nsyms) break; } RECORD_MINIMAL_SYMBOL (cs->c_name, cs->c_value, ms_type, - symname_alloced, cs->c_secnum, objfile); + symname_alloced, sec, objfile); } #endif /* STATIC_NODEBUG_VARS */ break; @@ -1774,7 +1774,7 @@ read_xcoff_symtab (objfile, nsyms) if (last_source_file) { - end_symtab (cur_src_end_addr, 1, 0, objfile, textsec->target_index); + end_symtab (cur_src_end_addr, 1, 0, objfile, SECT_OFF_TEXT); end_stabs (); } @@ -1827,7 +1827,7 @@ process_xcoff_symbol (cs, objfile) /* default assumptions */ SYMBOL_VALUE (sym) = cs->c_value; SYMBOL_NAMESPACE (sym) = VAR_NAMESPACE; - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); if (ISFCN (cs->c_type)) { @@ -1886,7 +1886,7 @@ process_xcoff_symbol (cs, objfile) sym = define_symbol (cs->c_value, cs->c_name, 0, 0, objfile); if (sym != NULL) { - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); } return sym; @@ -1917,14 +1917,14 @@ process_xcoff_symbol (cs, objfile) sym = define_symbol (cs->c_value, cs->c_name, 0, N_LSYM, objfile); if (sym != NULL) { - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); } return sym; case C_AUTO: SYMBOL_CLASS (sym) = LOC_LOCAL; SYMBOL_NAME (sym) = SYMNAME_ALLOC (name, symname_alloced); - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); SYMBOL_DUP (sym, sym2); add_symbol_to_list (sym2, &local_symbols); break; @@ -1932,7 +1932,7 @@ process_xcoff_symbol (cs, objfile) case C_EXT: SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_NAME (sym) = SYMNAME_ALLOC (name, symname_alloced); - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); SYMBOL_DUP (sym, sym2); add_symbol_to_list (sym2, &global_symbols); break; @@ -1940,7 +1940,7 @@ process_xcoff_symbol (cs, objfile) case C_STAT: SYMBOL_CLASS (sym) = LOC_STATIC; SYMBOL_NAME (sym) = SYMNAME_ALLOC (name, symname_alloced); - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); SYMBOL_DUP (sym, sym2); add_symbol_to_list (sym2, within_function ? &local_symbols : &file_symbols); @@ -1952,7 +1952,7 @@ process_xcoff_symbol (cs, objfile) { sym = define_symbol (cs->c_value, cs->c_name, 0, 0, objfile); if (sym != NULL) - SYMBOL_SECTION (sym) = cs->c_secnum; + SYMBOL_SECTION (sym) = cs_to_section (cs, objfile); return sym; } else @@ -2372,22 +2372,7 @@ xcoff_symfile_read (objfile, section_offset, mainline) do_cleanups (back_to); } -/* XCOFF-specific parsing routine for section offsets. */ - -static int largest_section; - -static void -note_one_section (abfd, asect, ptr) - bfd *abfd; - asection *asect; - PTR ptr; -{ - if (asect->target_index > largest_section) - largest_section = asect->target_index; -} - -static -struct section_offsets * +static struct section_offsets * xcoff_symfile_offsets (objfile, addr) struct objfile *objfile; CORE_ADDR addr; @@ -2395,14 +2380,12 @@ xcoff_symfile_offsets (objfile, addr) struct section_offsets *section_offsets; int i; - largest_section = 0; - bfd_map_over_sections (objfile->obfd, note_one_section, NULL); - objfile->num_sections = largest_section + 1; + objfile->num_sections = SECT_OFF_MAX; section_offsets = (struct section_offsets *) obstack_alloc (&objfile -> psymbol_obstack, sizeof (struct section_offsets) - + sizeof (section_offsets->offsets) * (objfile->num_sections)); + + sizeof (section_offsets->offsets) * objfile->num_sections); /* syms_from_objfile kindly subtracts from addr the bfd_section_vma of the .text section. This strikes me as wrong--whether the @@ -2412,9 +2395,9 @@ xcoff_symfile_offsets (objfile, addr) handle any section but .text sensibly), so just ignore the addr parameter and use 0. That matches the fact that xcoff_symfile_read ignores the section_offsets). */ - for (i = 0; i < objfile->num_sections; i++) + for (i = 0; i < objfile->num_sections; ++i) ANOFFSET (section_offsets, i) = 0; - + return section_offsets; } @@ -2424,10 +2407,14 @@ static struct sym_fns xcoff_sym_fns = { /* Because the bfd uses coff_flavour, we need to specially kludge - the flavour. FIXME: coff and xcoff and fundamentally similar - except for debug format, and we should see if we can merge this - file with coffread.c. For example, the extra storage classes - used for stabs could presumably be recognized in any COFF file. */ + the flavour. It is possible that coff and xcoff should be merged as + they do have fundamental similarities (for example, the extra storage + classes used for stabs could presumably be recognized in any COFF file). + However, in addition to obvious things like all the csect hair, there are + some subtler differences between xcoffread.c and coffread.c, notably + the fact that coffread.c has no need to read in all the symbols, but + xcoffread.c reads all the symbols and does in fact randomly access them + (in C_BSTAT and B_BINCL processing). */ (enum bfd_flavour)-1,