* 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:
Fred Fish 1993-10-08 23:04:45 +00:00
parent 22d33fb2f5
commit a71c0593c6
6 changed files with 95 additions and 80 deletions

View File

@ -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.

View File

@ -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. */

View File

@ -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)

View File

@ -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);

View File

@ -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);

View File

@ -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 */