diff options
author | Stu Grossman <grossman@cygnus> | 1994-03-21 19:57:38 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1994-03-21 19:57:38 +0000 |
commit | 72bba93b85e2e8c887df447c4237d0e7c21d07d8 (patch) | |
tree | 9f5fb008f8a97b4b4acd26c64fd1802442d63b36 /gdb/objfiles.c | |
parent | 4fd5eed484d95b5a5647a0bba76533ba66cb57a3 (diff) | |
download | gdb-72bba93b85e2e8c887df447c4237d0e7c21d07d8.zip gdb-72bba93b85e2e8c887df447c4237d0e7c21d07d8.tar.gz gdb-72bba93b85e2e8c887df447c4237d0e7c21d07d8.tar.bz2 |
Mon Mar 21 11:02:51 1994 Stu Grossman (grossman at cygnus.com)
* alpha-tdep.c: Gobs of changes (many imported from mips-tdep) to
improve remote debugging efficiency. Also fixed problems with
doing function calls for programs with no entry points.
* infcmd.c (run_stack_dummy): Use CALL_DUMMY_ADDRESS instead of
entry_point_address.
* inferior.h (PC_IN_CALL_DUMMY): ditto.
* mdebugread.c (parse_symbol, parse_procedure, parse_external,
parse_lines): Pass section_offsets info to these routines so that
we can relocate symbol table entries upon readin.
* (psymtab_to_symtab_1): Set symtab->primary to tell
objfile_relocate to do relocations for our symbols.
* (ecoff_relocate_efi): New routine to relocate adr field of PDRs
(which hang off of the symbol table).
* Use prim_record_minimal_symbols_and_info instead of
prim_record_minimal_symbols to supply section info to make minimal
symbol relocations work.
* minsyms.c (prim_record_minimal_symbols_and_info): If section is
-1, try to deduce it from ms_type.
* objfiles.c (objfile_relocate): Use ALL_OBJFILE_SYMTABS where
appropriate. Handle relocation of MIPS_EFI symbols special. Also,
add code to relocate objfile->sections data structure.
* remote.c (get_offsets): Use new protocol message to acquire
section offsets from the target.
* (remote_wait): Get rid of relocation stuff. That's all handled
by objfile_relocate now.
* config/alpha/alpha-nw.mt (TM_FILE): Use tm-alphanw.h.
* config/alpha/tm-alpha.h: Define CALL_DUMMY_ADDRESS, and
VM_MIN_ADDRESS.
* config/alpha/tm-alphanw.h: DECR_PC_AFTER_BREAK=0, VM_MIN_ADDRESS=0.
Diffstat (limited to 'gdb/objfiles.c')
-rw-r--r-- | gdb/objfiles.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 6c6dfc2..4f0dfd6 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -450,7 +450,7 @@ objfile_relocate (objfile, new_offsets) { struct symtab *s; - for (s = objfile->symtabs; s; s = s->next) + ALL_OBJFILE_SYMTABS (objfile, s) { struct linetable *l; struct blockvector *bv; @@ -492,6 +492,15 @@ objfile_relocate (objfile, new_offsets) SYMBOL_VALUE_ADDRESS (sym) += ANOFFSET (delta, SYMBOL_SECTION (sym)); } +#ifdef MIPS_EFI_SYMBOL_NAME + /* Relocate Extra Function Info for ecoff. */ + + else + if (SYMBOL_CLASS (sym) == LOC_CONST + && SYMBOL_NAMESPACE (sym) == LABEL_NAMESPACE + && STRCMP (SYMBOL_NAME (sym), MIPS_EFI_SYMBOL_NAME) == 0) + ecoff_relocate_efi (sym, ANOFFSET (delta, s->block_line_section)); +#endif } } } @@ -538,6 +547,37 @@ objfile_relocate (objfile, new_offsets) for (i = 0; i < objfile->num_sections; ++i) ANOFFSET (objfile->section_offsets, i) = ANOFFSET (new_offsets, i); } + + { + struct obj_section *s; + bfd *abfd; + + abfd = symfile_objfile->obfd; + + for (s = symfile_objfile->sections; + s < symfile_objfile->sections_end; ++s) + { + flagword flags; + + flags = bfd_get_section_flags (abfd, s->the_bfd_section); + + if (flags & SEC_CODE) + { + s->addr += ANOFFSET (delta, SECT_OFF_TEXT); + s->endaddr += ANOFFSET (delta, SECT_OFF_TEXT); + } + else if (flags & (SEC_DATA | SEC_LOAD)) + { + s->addr += ANOFFSET (delta, SECT_OFF_DATA); + s->endaddr += ANOFFSET (delta, SECT_OFF_DATA); + } + else if (flags & SEC_ALLOC) + { + s->addr += ANOFFSET (delta, SECT_OFF_BSS); + s->endaddr += ANOFFSET (delta, SECT_OFF_BSS); + } + } + } } /* Many places in gdb want to test just to see if we have any partial |