* objfiles.c (objfile_relocate): When relocating ->sections, use
objfile not symfile_objfile. * symtab.h, minsyms.c (minsyms_sort): New function. * objfiles.c (objfile_relocate): Call it. * remote-vx.c (vx_add_symbols): Call breakpoint_re_set. * objfiles.c, objfiles.h (objfile_to_front): New function. * remote-vx.c (vx_add_symbols): Call it. * coffread.c (coff_symtab_read): Handle common symbols the same way that partial-stab.h does.
This commit is contained in:
parent
459877ea9d
commit
3a47045432
6 changed files with 95 additions and 7 deletions
|
@ -1,3 +1,24 @@
|
||||||
|
Wed Oct 19 11:32:15 1994 Jim Kingdon <kingdon@cygnus.com>
|
||||||
|
|
||||||
|
* objfiles.c (objfile_relocate): When relocating ->sections, use
|
||||||
|
objfile not symfile_objfile.
|
||||||
|
|
||||||
|
* symtab.h, minsyms.c (minsyms_sort): New function.
|
||||||
|
* objfiles.c (objfile_relocate): Call it.
|
||||||
|
|
||||||
|
* remote-vx.c (vx_add_symbols): Call breakpoint_re_set.
|
||||||
|
|
||||||
|
* objfiles.c, objfiles.h (objfile_to_front): New function.
|
||||||
|
* remote-vx.c (vx_add_symbols): Call it.
|
||||||
|
|
||||||
|
* coffread.c (coff_symtab_read): Handle common symbols the same
|
||||||
|
way that partial-stab.h does.
|
||||||
|
|
||||||
|
Wed Oct 19 21:06:12 1994 Rob Savoye (rob@cirdan.cygnus.com)
|
||||||
|
|
||||||
|
* hppa-tdep.c: Remove include files a.out.h, ioctl.h, and
|
||||||
|
machine/psl.h. These are host files.
|
||||||
|
|
||||||
Wed Oct 19 15:13:51 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
Wed Oct 19 15:13:51 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||||
|
|
||||||
* objfiles.h (struct objfile): Fix comment--minimal_symbol_count
|
* objfiles.h (struct objfile): Fix comment--minimal_symbol_count
|
||||||
|
|
|
@ -38,6 +38,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include "gdb-stabs.h"
|
#include "gdb-stabs.h"
|
||||||
#include "stabsread.h"
|
#include "stabsread.h"
|
||||||
#include "complaints.h"
|
#include "complaints.h"
|
||||||
|
#include "target.h"
|
||||||
|
|
||||||
struct coff_symfile_info {
|
struct coff_symfile_info {
|
||||||
file_ptr min_lineno_offset; /* Where in file lowest line#s are */
|
file_ptr min_lineno_offset; /* Where in file lowest line#s are */
|
||||||
|
@ -908,10 +909,29 @@ coff_symtab_read (symtab_offset, nsyms, section_offsets, objfile)
|
||||||
|
|
||||||
/* FIXME: should use mst_abs, and not relocate, if absolute. */
|
/* FIXME: should use mst_abs, and not relocate, if absolute. */
|
||||||
enum minimal_symbol_type ms_type;
|
enum minimal_symbol_type ms_type;
|
||||||
int sec = cs_to_section (cs, objfile);
|
int sec;
|
||||||
tmpaddr = cs->c_value;
|
|
||||||
if (cs->c_sclass != C_STAT)
|
if (cs->c_secnum == N_UNDEF)
|
||||||
tmpaddr += ANOFFSET (section_offsets, sec);
|
{
|
||||||
|
/* This is a common symbol. See if the target
|
||||||
|
environment knows where it has been relocated to. */
|
||||||
|
CORE_ADDR reladdr;
|
||||||
|
if (target_lookup_symbol (cs->c_name, &reladdr))
|
||||||
|
{
|
||||||
|
/* Error in lookup; ignore symbol. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tmpaddr = reladdr;
|
||||||
|
sec = SECT_OFF_BSS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sec = cs_to_section (cs, objfile);
|
||||||
|
tmpaddr = cs->c_value;
|
||||||
|
if (cs->c_sclass != C_STAT)
|
||||||
|
tmpaddr += ANOFFSET (section_offsets, sec);
|
||||||
|
}
|
||||||
|
|
||||||
switch (sec)
|
switch (sec)
|
||||||
{
|
{
|
||||||
case SECT_OFF_TEXT:
|
case SECT_OFF_TEXT:
|
||||||
|
|
|
@ -601,6 +601,16 @@ install_minimal_symbols (objfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sort all the minimal symbols in OBJFILE. */
|
||||||
|
|
||||||
|
void
|
||||||
|
msymbols_sort (objfile)
|
||||||
|
struct objfile *objfile;
|
||||||
|
{
|
||||||
|
qsort (objfile->msymbols, objfile->minimal_symbol_count,
|
||||||
|
sizeof (struct minimal_symbol), compare_minimal_symbols);
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if PC is in a shared library trampoline code stub.
|
/* Check if PC is in a shared library trampoline code stub.
|
||||||
Return minimal symbol for the trampoline entry or NULL if PC is not
|
Return minimal symbol for the trampoline entry or NULL if PC is not
|
||||||
in a trampoline code stub. */
|
in a trampoline code stub. */
|
||||||
|
|
|
@ -273,6 +273,27 @@ allocate_objfile (abfd, mapped)
|
||||||
return (objfile);
|
return (objfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Put OBJFILE at the front of the list. */
|
||||||
|
|
||||||
|
void
|
||||||
|
objfile_to_front (objfile)
|
||||||
|
struct objfile *objfile;
|
||||||
|
{
|
||||||
|
struct objfile **objp;
|
||||||
|
for (objp = &object_files; *objp != NULL; objp = &((*objp)->next))
|
||||||
|
{
|
||||||
|
if (*objp == objfile)
|
||||||
|
{
|
||||||
|
/* Unhook it from where it is. */
|
||||||
|
*objp = objfile->next;
|
||||||
|
/* Put it in the front. */
|
||||||
|
objfile->next = object_files;
|
||||||
|
object_files = objfile;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Unlink OBJFILE from the list of known objfiles, if it is found in the
|
/* Unlink OBJFILE from the list of known objfiles, if it is found in the
|
||||||
list.
|
list.
|
||||||
|
|
||||||
|
@ -551,6 +572,9 @@ objfile_relocate (objfile, new_offsets)
|
||||||
if (SYMBOL_SECTION (msym) >= 0)
|
if (SYMBOL_SECTION (msym) >= 0)
|
||||||
SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
|
SYMBOL_VALUE_ADDRESS (msym) += ANOFFSET (delta, SYMBOL_SECTION (msym));
|
||||||
}
|
}
|
||||||
|
/* Relocating different sections by different amounts may cause the symbols
|
||||||
|
to be out of order. */
|
||||||
|
msymbols_sort (objfile);
|
||||||
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -562,10 +586,10 @@ objfile_relocate (objfile, new_offsets)
|
||||||
struct obj_section *s;
|
struct obj_section *s;
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
|
|
||||||
abfd = symfile_objfile->obfd;
|
abfd = objfile->obfd;
|
||||||
|
|
||||||
for (s = symfile_objfile->sections;
|
for (s = objfile->sections;
|
||||||
s < symfile_objfile->sections_end; ++s)
|
s < objfile->sections_end; ++s)
|
||||||
{
|
{
|
||||||
flagword flags;
|
flagword flags;
|
||||||
|
|
||||||
|
|
|
@ -384,6 +384,8 @@ allocate_objfile PARAMS ((bfd *, int));
|
||||||
extern int
|
extern int
|
||||||
build_objfile_section_table PARAMS ((struct objfile *));
|
build_objfile_section_table PARAMS ((struct objfile *));
|
||||||
|
|
||||||
|
extern void objfile_to_front PARAMS ((struct objfile *));
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
unlink_objfile PARAMS ((struct objfile *));
|
unlink_objfile PARAMS ((struct objfile *));
|
||||||
|
|
||||||
|
|
|
@ -669,7 +669,15 @@ vx_add_symbols (name, from_tty, text_addr, data_addr, bss_addr)
|
||||||
struct objfile *objfile;
|
struct objfile *objfile;
|
||||||
struct find_sect_args ss;
|
struct find_sect_args ss;
|
||||||
|
|
||||||
|
/* It might be nice to suppress the breakpoint_re_set which happens here
|
||||||
|
because we are going to do one again after the objfile_relocate. */
|
||||||
objfile = symbol_file_add (name, from_tty, 0, 0, 0, 0);
|
objfile = symbol_file_add (name, from_tty, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
/* This is a (slightly cheesy) way of superceding the old symbols. A less
|
||||||
|
cheesy way would be to find the objfile with the same name and
|
||||||
|
free_objfile it. */
|
||||||
|
objfile_to_front (objfile);
|
||||||
|
|
||||||
offs = (struct section_offsets *)
|
offs = (struct section_offsets *)
|
||||||
alloca (sizeof (struct section_offsets)
|
alloca (sizeof (struct section_offsets)
|
||||||
+ objfile->num_sections * sizeof (offs->offsets));
|
+ objfile->num_sections * sizeof (offs->offsets));
|
||||||
|
@ -687,6 +695,9 @@ vx_add_symbols (name, from_tty, text_addr, data_addr, bss_addr)
|
||||||
ANOFFSET (offs, SECT_OFF_DATA) = data_addr - ss.data_start;
|
ANOFFSET (offs, SECT_OFF_DATA) = data_addr - ss.data_start;
|
||||||
ANOFFSET (offs, SECT_OFF_BSS) = bss_addr - ss.bss_start;
|
ANOFFSET (offs, SECT_OFF_BSS) = bss_addr - ss.bss_start;
|
||||||
objfile_relocate (objfile, offs);
|
objfile_relocate (objfile, offs);
|
||||||
|
|
||||||
|
/* Need to do this *after* things are relocated. */
|
||||||
|
breakpoint_re_set ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function allows the addition of incrementally linked object files. */
|
/* This function allows the addition of incrementally linked object files. */
|
||||||
|
|
Loading…
Reference in a new issue