* osfsolib.c, remote-sim.c, remote.c, solib.c, xcoffexec.c,
xcoffsolib.h: Use 'abfd' for bfd variables instead of 'bfd'. Sun cc doesn't like variable names that match their typedef'd type.
This commit is contained in:
parent
22d33fb2f5
commit
a71c0593c6
|
@ -1,3 +1,9 @@
|
||||||
|
Fri Oct 8 15:54:06 1993 Fred Fish (fnf@deneb.cygnus.com)
|
||||||
|
|
||||||
|
* osfsolib.c, remote-sim.c, remote.c, solib.c, xcoffexec.c,
|
||||||
|
xcoffsolib.h: Use 'abfd' for bfd variables instead of 'bfd'.
|
||||||
|
Sun cc doesn't like variable names that match their typedef'd type.
|
||||||
|
|
||||||
Fri Oct 8 14:56:21 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
Fri Oct 8 14:56:21 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||||
|
|
||||||
* inflow.c: Remove unused includes of sys/param.h, etc.
|
* inflow.c: Remove unused includes of sys/param.h, etc.
|
||||||
|
|
|
@ -96,7 +96,7 @@ struct so_list {
|
||||||
struct section_table *sections;
|
struct section_table *sections;
|
||||||
struct section_table *sections_end;
|
struct section_table *sections_end;
|
||||||
struct section_table *textsection;
|
struct section_table *textsection;
|
||||||
bfd *bfd;
|
bfd *abfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct so_list *so_list_head; /* List of known shared objects */
|
static struct so_list *so_list_head; /* List of known shared objects */
|
||||||
|
@ -195,7 +195,7 @@ solib_map_sections (so)
|
||||||
scratch_pathname, bfd_errmsg (bfd_error));
|
scratch_pathname, bfd_errmsg (bfd_error));
|
||||||
}
|
}
|
||||||
/* Leave bfd open, core_xfer_memory and "info files" need it. */
|
/* Leave bfd open, core_xfer_memory and "info files" need it. */
|
||||||
so -> bfd = abfd;
|
so -> abfd = abfd;
|
||||||
abfd -> cacheable = true;
|
abfd -> cacheable = true;
|
||||||
|
|
||||||
if (!bfd_check_format (abfd, bfd_object))
|
if (!bfd_check_format (abfd, bfd_object))
|
||||||
|
@ -670,10 +670,10 @@ clear_solib()
|
||||||
{
|
{
|
||||||
free ((PTR)so_list_head -> sections);
|
free ((PTR)so_list_head -> sections);
|
||||||
}
|
}
|
||||||
if (so_list_head -> bfd)
|
if (so_list_head -> abfd)
|
||||||
{
|
{
|
||||||
bfd_filename = bfd_get_filename (so_list_head -> bfd);
|
bfd_filename = bfd_get_filename (so_list_head -> abfd);
|
||||||
bfd_close (so_list_head -> bfd);
|
bfd_close (so_list_head -> abfd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* This happens for the executable on SVR4. */
|
/* This happens for the executable on SVR4. */
|
||||||
|
|
|
@ -165,7 +165,7 @@ gdbsim_load (prog, fromtty)
|
||||||
* This is a utility routine that sim_load() can call to do the work.
|
* This is a utility routine that sim_load() can call to do the work.
|
||||||
* The result is 0 for success, non-zero for failure.
|
* The result is 0 for success, non-zero for failure.
|
||||||
*
|
*
|
||||||
* Eg: int sim_load (bfd *bfd, char *prog) { return sim_load_standard (bfd); }
|
* Eg: int sim_load (bfd *abfd, char *prog) { return sim_load_standard (abfd); }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sim_load_standard (abfd)
|
sim_load_standard (abfd)
|
||||||
|
|
97
gdb/solib.c
97
gdb/solib.c
|
@ -42,6 +42,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include "frame.h"
|
#include "frame.h"
|
||||||
#include "regex.h"
|
#include "regex.h"
|
||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
|
#include "language.h"
|
||||||
|
|
||||||
#define MAX_PATH_SIZE 256 /* FIXME: Should be dynamic */
|
#define MAX_PATH_SIZE 256 /* FIXME: Should be dynamic */
|
||||||
|
|
||||||
|
@ -57,6 +58,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#define BKPT_AT_SYMBOL 1
|
#define BKPT_AT_SYMBOL 1
|
||||||
|
|
||||||
|
#if defined (BKPT_AT_SYMBOL) && defined (SVR4_SHARED_LIBS)
|
||||||
static char *bkpt_names[] = {
|
static char *bkpt_names[] = {
|
||||||
#ifdef SOLIB_BKPT_NAME
|
#ifdef SOLIB_BKPT_NAME
|
||||||
SOLIB_BKPT_NAME, /* Prefer configured name if it exists. */
|
SOLIB_BKPT_NAME, /* Prefer configured name if it exists. */
|
||||||
|
@ -65,6 +67,7 @@ static char *bkpt_names[] = {
|
||||||
"main",
|
"main",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* local data declarations */
|
/* local data declarations */
|
||||||
|
|
||||||
|
@ -103,7 +106,7 @@ struct so_list {
|
||||||
struct section_table *sections;
|
struct section_table *sections;
|
||||||
struct section_table *sections_end;
|
struct section_table *sections_end;
|
||||||
struct section_table *textsection;
|
struct section_table *textsection;
|
||||||
bfd *bfd;
|
bfd *abfd;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct so_list *so_list_head; /* List of known shared objects */
|
static struct so_list *so_list_head; /* List of known shared objects */
|
||||||
|
@ -212,9 +215,9 @@ solib_map_sections (so)
|
||||||
{
|
{
|
||||||
perror_with_name (filename);
|
perror_with_name (filename);
|
||||||
}
|
}
|
||||||
/* Leave scratch_pathname allocated. bfd->name will point to it. */
|
/* Leave scratch_pathname allocated. abfd->name will point to it. */
|
||||||
|
|
||||||
abfd = bfd_fdopenr (scratch_pathname, NULL, scratch_chan);
|
abfd = bfd_fdopenr (scratch_pathname, gnutarget, scratch_chan);
|
||||||
if (!abfd)
|
if (!abfd)
|
||||||
{
|
{
|
||||||
close (scratch_chan);
|
close (scratch_chan);
|
||||||
|
@ -222,7 +225,7 @@ solib_map_sections (so)
|
||||||
scratch_pathname, bfd_errmsg (bfd_error));
|
scratch_pathname, bfd_errmsg (bfd_error));
|
||||||
}
|
}
|
||||||
/* Leave bfd open, core_xfer_memory and "info files" need it. */
|
/* Leave bfd open, core_xfer_memory and "info files" need it. */
|
||||||
so -> bfd = abfd;
|
so -> abfd = abfd;
|
||||||
abfd -> cacheable = true;
|
abfd -> cacheable = true;
|
||||||
|
|
||||||
if (!bfd_check_format (abfd, bfd_object))
|
if (!bfd_check_format (abfd, bfd_object))
|
||||||
|
@ -259,37 +262,16 @@ solib_map_sections (so)
|
||||||
|
|
||||||
#ifndef SVR4_SHARED_LIBS
|
#ifndef SVR4_SHARED_LIBS
|
||||||
|
|
||||||
/* This routine can be a real performance hog. According to some gprof data
|
/* In GDB 4.9 this routine was a real performance hog. According to
|
||||||
which mtranle@paris.IntelliCorp.COM (Minh Tran-Le) sent, almost all the
|
some gprof data which mtranle@paris.IntelliCorp.COM (Minh Tran-Le)
|
||||||
time spend in solib_add (up to 20 minutes with 35 shared libraries) is
|
sent, almost all the time spend in solib_add (up to 20 minutes with
|
||||||
spent here, with 5/6 in lookup_minimal_symbol and 1/6 in read_memory.
|
35 shared libraries) was spent here, with 5/6 in
|
||||||
|
lookup_minimal_symbol and 1/6 in read_memory.
|
||||||
|
|
||||||
Possible solutions:
|
To fix this, we moved the call to special_symbol_handling out of the
|
||||||
|
loop in solib_add, so this only gets called once, rather than once
|
||||||
* Hash the minimal symbols.
|
for every shared library, and also removed the call to lookup_minimal_symbol
|
||||||
|
in this routine. */
|
||||||
* Just record the name of the minimal symbol and lazily patch the
|
|
||||||
addresses.
|
|
||||||
|
|
||||||
* Tell everyone to switch to Solaris2.
|
|
||||||
|
|
||||||
(1) Move the call to special_symbol_handling out of the find_solib
|
|
||||||
loop in solib_add. This will call it once, rather than 35 times, when
|
|
||||||
you have 35 shared libraries. It's in the loop to pass the current
|
|
||||||
solib's objfile so the symbols are added to that objfile's minsym.
|
|
||||||
But since the symbols are in common (BSS), it doesn't really matter
|
|
||||||
which objfile's minsyms they are added to, I think.
|
|
||||||
|
|
||||||
(2) Indeed, it might be best to create an objfile just for common minsyms,
|
|
||||||
thus not needing any objfile argument to solib_add_common_symbols.
|
|
||||||
|
|
||||||
(3) Remove the call to lookup_minimal_symbol from
|
|
||||||
solib_add_common_symbols. If a symbol appears multiple times in the
|
|
||||||
minsyms, we probably cope, more or less. Note that if we had an
|
|
||||||
objfile for just minsyms, install_minimal_symbols would automatically
|
|
||||||
remove duplicates caused by running solib_add_common_symbols several
|
|
||||||
times.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
solib_add_common_symbols (rtc_symp, objfile)
|
solib_add_common_symbols (rtc_symp, objfile)
|
||||||
|
@ -330,10 +312,16 @@ solib_add_common_symbols (rtc_symp, objfile)
|
||||||
name++;
|
name++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* I think this is unnecessary, GDB can probably deal with
|
||||||
|
duplicate minimal symbols, more or less. And the duplication
|
||||||
|
which used to happen because this was called for each shared
|
||||||
|
library is gone now that we are just called once. */
|
||||||
/* FIXME: Do we really want to exclude symbols which happen
|
/* FIXME: Do we really want to exclude symbols which happen
|
||||||
to match symbols for other locations in the inferior's
|
to match symbols for other locations in the inferior's
|
||||||
address space, even when they are in different linkage units? */
|
address space, even when they are in different linkage units? */
|
||||||
if (lookup_minimal_symbol (name, (struct objfile *) NULL) == NULL)
|
if (lookup_minimal_symbol (name, (struct objfile *) NULL) == NULL)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
name = obsavestring (name, strlen (name),
|
name = obsavestring (name, strlen (name),
|
||||||
&objfile -> symbol_obstack);
|
&objfile -> symbol_obstack);
|
||||||
|
@ -463,7 +451,7 @@ look_for_base (fd, baseaddr)
|
||||||
we have no way currently to find the filename. Don't gripe about
|
we have no way currently to find the filename. Don't gripe about
|
||||||
any problems we might have, just fail. */
|
any problems we might have, just fail. */
|
||||||
|
|
||||||
if ((interp_bfd = bfd_fdopenr ("unnamed", NULL, fd)) == NULL)
|
if ((interp_bfd = bfd_fdopenr ("unnamed", gnutarget, fd)) == NULL)
|
||||||
{
|
{
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -771,6 +759,10 @@ solib_add (arg_string, from_tty, target)
|
||||||
struct target_ops *target;
|
struct target_ops *target;
|
||||||
{
|
{
|
||||||
register struct so_list *so = NULL; /* link map state variable */
|
register struct so_list *so = NULL; /* link map state variable */
|
||||||
|
|
||||||
|
/* Last shared library that we read. */
|
||||||
|
struct so_list *so_last = NULL;
|
||||||
|
|
||||||
char *re_err;
|
char *re_err;
|
||||||
int count;
|
int count;
|
||||||
int old;
|
int old;
|
||||||
|
@ -801,7 +793,7 @@ solib_add (arg_string, from_tty, target)
|
||||||
"Error while reading shared library symbols:\n",
|
"Error while reading shared library symbols:\n",
|
||||||
RETURN_MASK_ALL))
|
RETURN_MASK_ALL))
|
||||||
{
|
{
|
||||||
special_symbol_handling (so);
|
so_last = so;
|
||||||
so -> symbols_loaded = 1;
|
so -> symbols_loaded = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -829,14 +821,14 @@ solib_add (arg_string, from_tty, target)
|
||||||
{
|
{
|
||||||
old = target -> to_sections_end - target -> to_sections;
|
old = target -> to_sections_end - target -> to_sections;
|
||||||
target -> to_sections = (struct section_table *)
|
target -> to_sections = (struct section_table *)
|
||||||
realloc ((char *)target -> to_sections,
|
xrealloc ((char *)target -> to_sections,
|
||||||
(sizeof (struct section_table)) * (count + old));
|
(sizeof (struct section_table)) * (count + old));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
old = 0;
|
old = 0;
|
||||||
target -> to_sections = (struct section_table *)
|
target -> to_sections = (struct section_table *)
|
||||||
malloc ((sizeof (struct section_table)) * count);
|
xmalloc ((sizeof (struct section_table)) * count);
|
||||||
}
|
}
|
||||||
target -> to_sections_end = target -> to_sections + (count + old);
|
target -> to_sections_end = target -> to_sections + (count + old);
|
||||||
|
|
||||||
|
@ -854,6 +846,19 @@ solib_add (arg_string, from_tty, target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Calling this once at the end means that we put all the minimal
|
||||||
|
symbols for commons into the objfile for the last shared library.
|
||||||
|
Since they are in common, this should not be a problem. If we
|
||||||
|
delete the objfile with the minimal symbols, we can put all the
|
||||||
|
symbols into a new objfile (and will on the next call to solib_add).
|
||||||
|
|
||||||
|
An alternate approach would be to create an objfile just for
|
||||||
|
common minsyms, thus not needing any objfile argument to
|
||||||
|
solib_add_common_symbols. */
|
||||||
|
|
||||||
|
if (so_last)
|
||||||
|
special_symbol_handling (so_last);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -895,8 +900,12 @@ info_sharedlibrary_command (ignore, from_tty)
|
||||||
"Shared Object Library");
|
"Shared Object Library");
|
||||||
header_done++;
|
header_done++;
|
||||||
}
|
}
|
||||||
printf ("%-12s", local_hex_string_custom ((int) LM_ADDR (so), "08"));
|
printf ("%-12s",
|
||||||
printf ("%-12s", local_hex_string_custom (so -> lmend, "08"));
|
local_hex_string_custom ((unsigned long) LM_ADDR (so),
|
||||||
|
"08l"));
|
||||||
|
printf ("%-12s",
|
||||||
|
local_hex_string_custom ((unsigned long) so -> lmend,
|
||||||
|
"08l"));
|
||||||
printf ("%-12s", so -> symbols_loaded ? "Yes" : "No");
|
printf ("%-12s", so -> symbols_loaded ? "Yes" : "No");
|
||||||
printf ("%s\n", so -> so_name);
|
printf ("%s\n", so -> so_name);
|
||||||
}
|
}
|
||||||
|
@ -965,10 +974,10 @@ clear_solib()
|
||||||
{
|
{
|
||||||
free ((PTR)so_list_head -> sections);
|
free ((PTR)so_list_head -> sections);
|
||||||
}
|
}
|
||||||
if (so_list_head -> bfd)
|
if (so_list_head -> abfd)
|
||||||
{
|
{
|
||||||
bfd_filename = bfd_get_filename (so_list_head -> bfd);
|
bfd_filename = bfd_get_filename (so_list_head -> abfd);
|
||||||
bfd_close (so_list_head -> bfd);
|
bfd_close (so_list_head -> abfd);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* This happens for the executable on SVR4. */
|
/* This happens for the executable on SVR4. */
|
||||||
|
@ -1259,7 +1268,7 @@ solib_create_inferior_hook()
|
||||||
stop_signal = 0;
|
stop_signal = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
target_resume (0, stop_signal);
|
target_resume (inferior_pid, 0, stop_signal);
|
||||||
wait_for_inferior ();
|
wait_for_inferior ();
|
||||||
}
|
}
|
||||||
while (stop_signal != SIGTRAP);
|
while (stop_signal != SIGTRAP);
|
||||||
|
|
|
@ -410,7 +410,7 @@ static struct vmap *
|
||||||
add_vmap(ldi)
|
add_vmap(ldi)
|
||||||
register struct ld_info *ldi;
|
register struct ld_info *ldi;
|
||||||
{
|
{
|
||||||
bfd *bfd, *last;
|
bfd *abfd, *last;
|
||||||
register char *mem, *objname;
|
register char *mem, *objname;
|
||||||
struct objfile *obj;
|
struct objfile *obj;
|
||||||
struct vmap *vp;
|
struct vmap *vp;
|
||||||
|
@ -426,32 +426,32 @@ add_vmap(ldi)
|
||||||
if (ldi->ldinfo_fd < 0)
|
if (ldi->ldinfo_fd < 0)
|
||||||
/* Note that this opens it once for every member; a possible
|
/* Note that this opens it once for every member; a possible
|
||||||
enhancement would be to only open it once for every object. */
|
enhancement would be to only open it once for every object. */
|
||||||
bfd = bfd_openr (objname, gnutarget);
|
abfd = bfd_openr (objname, gnutarget);
|
||||||
else
|
else
|
||||||
bfd = bfd_fdopenr(objname, gnutarget, ldi->ldinfo_fd);
|
abfd = bfd_fdopenr(objname, gnutarget, ldi->ldinfo_fd);
|
||||||
if (!bfd)
|
if (!abfd)
|
||||||
error("Could not open `%s' as an executable file: %s",
|
error("Could not open `%s' as an executable file: %s",
|
||||||
objname, bfd_errmsg(bfd_error));
|
objname, bfd_errmsg(bfd_error));
|
||||||
|
|
||||||
|
|
||||||
/* make sure we have an object file */
|
/* make sure we have an object file */
|
||||||
|
|
||||||
if (bfd_check_format(bfd, bfd_object))
|
if (bfd_check_format(abfd, bfd_object))
|
||||||
vp = map_vmap (bfd, 0);
|
vp = map_vmap (abfd, 0);
|
||||||
|
|
||||||
else if (bfd_check_format(bfd, bfd_archive)) {
|
else if (bfd_check_format(abfd, bfd_archive)) {
|
||||||
last = 0;
|
last = 0;
|
||||||
/*
|
/*
|
||||||
* FIXME??? am I tossing BFDs? bfd?
|
* FIXME??? am I tossing BFDs? bfd?
|
||||||
*/
|
*/
|
||||||
while (last = bfd_openr_next_archived_file(bfd, last))
|
while (last = bfd_openr_next_archived_file(abfd, last))
|
||||||
if (STREQ(mem, last->filename))
|
if (STREQ(mem, last->filename))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!last) {
|
if (!last) {
|
||||||
bfd_close(bfd);
|
bfd_close(abfd);
|
||||||
/* FIXME -- should be error */
|
/* FIXME -- should be error */
|
||||||
warning("\"%s\": member \"%s\" missing.", bfd->filename, mem);
|
warning("\"%s\": member \"%s\" missing.", abfd->filename, mem);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,16 +460,16 @@ add_vmap(ldi)
|
||||||
goto obj_err;
|
goto obj_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
vp = map_vmap (last, bfd);
|
vp = map_vmap (last, abfd);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
obj_err:
|
obj_err:
|
||||||
bfd_close(bfd);
|
bfd_close(abfd);
|
||||||
error ("\"%s\": not in executable format: %s.",
|
error ("\"%s\": not in executable format: %s.",
|
||||||
objname, bfd_errmsg(bfd_error));
|
objname, bfd_errmsg(bfd_error));
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
obj = allocate_objfile (vp->bfd, 0);
|
obj = allocate_objfile (vp->abfd, 0);
|
||||||
vp->objfile = obj;
|
vp->objfile = obj;
|
||||||
|
|
||||||
#ifndef SOLIB_SYMBOLS_MANUAL
|
#ifndef SOLIB_SYMBOLS_MANUAL
|
||||||
|
@ -591,7 +591,7 @@ retry:
|
||||||
|| (memb[0] && !STREQ(memb, vp->member)))
|
|| (memb[0] && !STREQ(memb, vp->member)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
io = bfd_cache_lookup(vp->bfd); /* totally opaque! */
|
io = bfd_cache_lookup(vp->abfd); /* totally opaque! */
|
||||||
if (!io)
|
if (!io)
|
||||||
fatal("cannot find BFD's iostream for %s", vp->name);
|
fatal("cannot find BFD's iostream for %s", vp->name);
|
||||||
|
|
||||||
|
@ -695,7 +695,7 @@ xfer_memory (memaddr, myaddr, len, write, target)
|
||||||
if (p->endaddr >= memend)
|
if (p->endaddr >= memend)
|
||||||
{
|
{
|
||||||
/* Entire transfer is within this section. */
|
/* Entire transfer is within this section. */
|
||||||
res = xfer_fn (p->bfd, p->sec_ptr, myaddr, memaddr - p->addr, len);
|
res = xfer_fn (p->abfd, p->sec_ptr, myaddr, memaddr - p->addr, len);
|
||||||
return (res != false)? len: 0;
|
return (res != false)? len: 0;
|
||||||
}
|
}
|
||||||
else if (p->endaddr <= memaddr)
|
else if (p->endaddr <= memaddr)
|
||||||
|
@ -707,7 +707,7 @@ xfer_memory (memaddr, myaddr, len, write, target)
|
||||||
{
|
{
|
||||||
/* This section overlaps the transfer. Just do half. */
|
/* This section overlaps the transfer. Just do half. */
|
||||||
len = p->endaddr - memaddr;
|
len = p->endaddr - memaddr;
|
||||||
res = xfer_fn (p->bfd, p->sec_ptr, myaddr, memaddr - p->addr, len);
|
res = xfer_fn (p->abfd, p->sec_ptr, myaddr, memaddr - p->addr, len);
|
||||||
return (res != false)? len: 0;
|
return (res != false)? len: 0;
|
||||||
}
|
}
|
||||||
else if (p->addr < nextsectaddr)
|
else if (p->addr < nextsectaddr)
|
||||||
|
@ -739,9 +739,9 @@ print_section_info (t, abfd)
|
||||||
if (info_verbose)
|
if (info_verbose)
|
||||||
printf_filtered (" @ %s",
|
printf_filtered (" @ %s",
|
||||||
local_hex_string_custom ((unsigned long) p->sec_ptr->filepos, "08l"));
|
local_hex_string_custom ((unsigned long) p->sec_ptr->filepos, "08l"));
|
||||||
printf_filtered (" is %s", bfd_section_name (p->bfd, p->sec_ptr));
|
printf_filtered (" is %s", bfd_section_name (p->abfd, p->sec_ptr));
|
||||||
if (p->bfd != abfd) {
|
if (p->abfd != abfd) {
|
||||||
printf_filtered (" in %s", bfd_get_filename (p->bfd));
|
printf_filtered (" in %s", bfd_get_filename (p->abfd));
|
||||||
}
|
}
|
||||||
printf_filtered ("\n");
|
printf_filtered ("\n");
|
||||||
}
|
}
|
||||||
|
@ -808,8 +808,8 @@ char *args;
|
||||||
|
|
||||||
for (vp = vmap; vp; vp = vp->nxt) {
|
for (vp = vmap; vp; vp = vp->nxt) {
|
||||||
if (!strncmp(secname
|
if (!strncmp(secname
|
||||||
, bfd_section_name(vp->bfd, vp->sex), seclen)
|
, bfd_section_name(vp->abfd, vp->sex), seclen)
|
||||||
&& bfd_section_name(vp->bfd, vp->sex)[seclen] == '\0') {
|
&& bfd_section_name(vp->abfd, vp->sex)[seclen] == '\0') {
|
||||||
offset = secaddr - vp->tstart;
|
offset = secaddr - vp->tstart;
|
||||||
vp->tstart += offset;
|
vp->tstart += offset;
|
||||||
vp->tend += offset;
|
vp->tend += offset;
|
||||||
|
@ -1001,16 +1001,16 @@ bfd_err:
|
||||||
So for text sections, bfd_section_vma tends to be 0x200,
|
So for text sections, bfd_section_vma tends to be 0x200,
|
||||||
and if vp->tstart is 0xd0002000, then the first byte of
|
and if vp->tstart is 0xd0002000, then the first byte of
|
||||||
the text section on disk corresponds to address 0xd0002200. */
|
the text section on disk corresponds to address 0xd0002200. */
|
||||||
stp->bfd = vp->bfd;
|
stp->abfd = vp->abfd;
|
||||||
stp->sec_ptr = bfd_get_section_by_name (stp->bfd, ".text");
|
stp->sec_ptr = bfd_get_section_by_name (stp->abfd, ".text");
|
||||||
stp->addr = bfd_section_vma (stp->bfd, stp->sec_ptr) + vp->tstart;
|
stp->addr = bfd_section_vma (stp->abfd, stp->sec_ptr) + vp->tstart;
|
||||||
stp->endaddr = bfd_section_vma (stp->bfd, stp->sec_ptr) + vp->tend;
|
stp->endaddr = bfd_section_vma (stp->abfd, stp->sec_ptr) + vp->tend;
|
||||||
stp++;
|
stp++;
|
||||||
|
|
||||||
stp->bfd = vp->bfd;
|
stp->abfd = vp->abfd;
|
||||||
stp->sec_ptr = bfd_get_section_by_name (stp->bfd, ".data");
|
stp->sec_ptr = bfd_get_section_by_name (stp->abfd, ".data");
|
||||||
stp->addr = bfd_section_vma (stp->bfd, stp->sec_ptr) + vp->dstart;
|
stp->addr = bfd_section_vma (stp->abfd, stp->sec_ptr) + vp->dstart;
|
||||||
stp->endaddr = bfd_section_vma (stp->bfd, stp->sec_ptr) + vp->dend;
|
stp->endaddr = bfd_section_vma (stp->abfd, stp->sec_ptr) + vp->dend;
|
||||||
}
|
}
|
||||||
|
|
||||||
vmap_symtab (vp);
|
vmap_symtab (vp);
|
||||||
|
|
|
@ -28,7 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
struct vmap {
|
struct vmap {
|
||||||
struct vmap *nxt; /* ^ to next in chain */
|
struct vmap *nxt; /* ^ to next in chain */
|
||||||
bfd *bfd; /* BFD for mappable object library */
|
bfd *abfd; /* BFD for mappable object library */
|
||||||
char *name; /* ^ to object file name */
|
char *name; /* ^ to object file name */
|
||||||
char *member; /* ^ to member name */
|
char *member; /* ^ to member name */
|
||||||
CORE_ADDR tstart; /* virtual addr where member is mapped */
|
CORE_ADDR tstart; /* virtual addr where member is mapped */
|
||||||
|
|
Loading…
Reference in New Issue