mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 12:39:59 +00:00
Tue Feb 2 17:36:29 1999 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
* hp-psymtab-read.c (do_pxdb): New function. Check whether the file needs to be processed by pxdb (an HP debug info massaging tool), if so call it. (hpread_build_psymtabs): Initialize scan_start to 0 and simplify flow of control. * somread.c (som_symfile_read): Add call to do_pxdb (), in hp-psymtab-read.c. * symfile.c (symbol_file_add): Remove ifdef'ed out HPUX specific code. (symfile_bfd_open): Remove HPUXHPPA ifdef'ed code. Code is now in hp-psymtab-read.c.
This commit is contained in:
parent
8ad50a7304
commit
85a85d8a14
@ -1,3 +1,19 @@
|
||||
Tue Feb 2 17:36:29 1999 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
|
||||
|
||||
* hp-psymtab-read.c (do_pxdb): New function. Check whether the
|
||||
file needs to be processed by pxdb (an HP debug info massaging
|
||||
tool), if so call it.
|
||||
(hpread_build_psymtabs): Initialize scan_start to 0 and
|
||||
simplify flow of control.
|
||||
|
||||
* somread.c (som_symfile_read): Add call to do_pxdb (),
|
||||
in hp-psymtab-read.c.
|
||||
|
||||
* symfile.c (symbol_file_add): Remove ifdef'ed out HPUX specific
|
||||
code.
|
||||
(symfile_bfd_open): Remove HPUXHPPA ifdef'ed code. Code is now
|
||||
in hp-psymtab-read.c.
|
||||
|
||||
1999-02-02 Martin Hunt <hunt@cygnus.com>
|
||||
|
||||
* printcmd.c (print_scalar_formatted): Use strcat to concat all
|
||||
|
@ -30,7 +30,7 @@
|
||||
/* #define DUMPING 1 */
|
||||
|
||||
/* To use the quick look-up tables, uncomment this define. */
|
||||
#define QUICK_LOOK_UP 0
|
||||
#define QUICK_LOOK_UP 1
|
||||
|
||||
/* To call PXDB to process un-processed files, uncomment this define. */
|
||||
#define USE_PXDB 1
|
||||
@ -40,6 +40,9 @@
|
||||
void hpread_symfile_init
|
||||
PARAMS ((struct objfile *));
|
||||
|
||||
void
|
||||
do_pxdb PARAMS ((bfd *));
|
||||
|
||||
void hpread_build_psymtabs
|
||||
PARAMS ((struct objfile *, struct section_offsets *, int));
|
||||
|
||||
@ -276,17 +279,38 @@ hpread_pxdb_needed (sym_bfd)
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef QUICK_LOOK_UP
|
||||
/* Check whether the file needs to be preprocessed by pxdb.
|
||||
If so, call pxdb. */
|
||||
|
||||
void
|
||||
do_pxdb (sym_bfd)
|
||||
bfd *sym_bfd;
|
||||
{
|
||||
/* The following code is HP-specific. The "right" way of
|
||||
doing this is unknown, but we bet would involve a target-
|
||||
specific pre-file-load check using a generic mechanism. */
|
||||
|
||||
/* This code will not be executed if the file is not in SOM
|
||||
format (i.e. if compiled with gcc) */
|
||||
if (hpread_pxdb_needed (sym_bfd))
|
||||
{
|
||||
/*This file has not been pre-processed. Preprocess now */
|
||||
|
||||
if (hpread_call_pxdb (sym_bfd->filename))
|
||||
{
|
||||
/* The call above has changed the on-disk file,
|
||||
we can close the file anyway, because the
|
||||
symbols will be reread in when the target is run */
|
||||
bfd_close (sym_bfd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* This flag can be set to zero to use the old
|
||||
style psymtab (build from a scan of the LNTT)
|
||||
or to one to try to use the quick look-up
|
||||
tables. */
|
||||
int psym_new_style = 1;
|
||||
|
||||
|
||||
#ifdef QUICK_LOOK_UP
|
||||
|
||||
/* Code to handle quick lookup-tables follows */
|
||||
/* Code to handle quick lookup-tables follows. */
|
||||
|
||||
|
||||
/* Some useful macros */
|
||||
@ -1630,7 +1654,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||
struct cleanup *old_chain;
|
||||
|
||||
int hp_symnum, symcount, i;
|
||||
int scan_start;
|
||||
int scan_start = 0;
|
||||
|
||||
union dnttentry *dn_bufp;
|
||||
unsigned long valu;
|
||||
@ -1684,44 +1708,38 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||
anyway, but it turns out to be not so easy. So this could
|
||||
actually be commented out, but I leave it in, just in case
|
||||
we decide to add support for non-pxdb-ed stuff in the future. */
|
||||
bfd *abfd;
|
||||
abfd = symfile_bfd_open (objfile->name);
|
||||
if (!hpread_pxdb_needed (abfd))
|
||||
{
|
||||
if (psym_new_style)
|
||||
{
|
||||
PXDB_header pxdb_header;
|
||||
int found_modules_in_program;
|
||||
PXDB_header pxdb_header;
|
||||
int found_modules_in_program;
|
||||
|
||||
if (hpread_get_header (objfile, &pxdb_header))
|
||||
{
|
||||
/* Build a minimal table. No types, no global variables,
|
||||
no include files.... */
|
||||
if (hpread_get_header (objfile, &pxdb_header))
|
||||
{
|
||||
/* Build a minimal table. No types, no global variables,
|
||||
no include files.... */
|
||||
#ifdef DUMPING
|
||||
if (dumping)
|
||||
printf ("\nNew method for %s\n", objfile->name);
|
||||
if (dumping)
|
||||
printf ("\nNew method for %s\n", objfile->name);
|
||||
#endif
|
||||
|
||||
/* elz: quick_traverse returns true if it found
|
||||
some modules in the main source file, other
|
||||
than those in end.c
|
||||
In C and C++, all the files have MODULES entries
|
||||
in the LNTT, and the quick table traverse is all
|
||||
based on finding these MODULES entries. Without
|
||||
those it cannot work.
|
||||
It happens that F77 programs don't have MODULES
|
||||
so the quick traverse gets confused. F90 programs
|
||||
have modules, and the quick method still works.
|
||||
So, if modules (other than those in end.c) are
|
||||
not found we give up on the quick table stuff,
|
||||
and fall back on the slower method */
|
||||
found_modules_in_program = hpread_quick_traverse (objfile,
|
||||
section_offsets,
|
||||
GNTT (objfile),
|
||||
VT (objfile),
|
||||
&pxdb_header);
|
||||
/* elz: quick_traverse returns true if it found
|
||||
some modules in the main source file, other
|
||||
than those in end.c
|
||||
In C and C++, all the files have MODULES entries
|
||||
in the LNTT, and the quick table traverse is all
|
||||
based on finding these MODULES entries. Without
|
||||
those it cannot work.
|
||||
It happens that F77 programs don't have MODULES
|
||||
so the quick traverse gets confused. F90 programs
|
||||
have modules, and the quick method still works.
|
||||
So, if modules (other than those in end.c) are
|
||||
not found we give up on the quick table stuff,
|
||||
and fall back on the slower method */
|
||||
found_modules_in_program = hpread_quick_traverse (objfile,
|
||||
section_offsets,
|
||||
GNTT (objfile),
|
||||
VT (objfile),
|
||||
&pxdb_header);
|
||||
|
||||
discard_cleanups (old_chain);
|
||||
discard_cleanups (old_chain);
|
||||
|
||||
/* Set up to scan the global section of the LNTT.
|
||||
|
||||
@ -1733,41 +1751,21 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||
with just one global record, there's no way to
|
||||
tell other than by looking at the record, so that's
|
||||
done below. */
|
||||
if (found_modules_in_program)
|
||||
scan_start = pxdb_header.globals;
|
||||
else
|
||||
scan_start = 0;
|
||||
}
|
||||
|
||||
if (found_modules_in_program)
|
||||
scan_start = pxdb_header.globals;
|
||||
}
|
||||
#ifdef DUMPING
|
||||
else
|
||||
{
|
||||
if (dumping)
|
||||
printf ("\nGoing on to old method for %s\n", objfile->name);
|
||||
}
|
||||
#endif
|
||||
|
||||
} /* End of new method code */
|
||||
} /* end of if pxdb exists */
|
||||
/* elz: if pxdb does not exists on the system, then scan the whole debug info
|
||||
Actually this will never be reached because we error out in case there
|
||||
is no pxdb on the system. It turns out that the debug info cannot be
|
||||
handled the same way as after bxdb has been run, and gdb gets very
|
||||
very confused. Ileave this in anyway, in case one day we want to
|
||||
support non pxdb-ed files. */
|
||||
else
|
||||
scan_start = 0;
|
||||
|
||||
bfd_close (abfd); /* close the bfd we opened to check for pxdb */
|
||||
|
||||
} /* end of ifdef QUICK_LOOK_UP */
|
||||
#else
|
||||
scan_start = 0; /* if we don't want quick lookup tables start
|
||||
from the beginning */
|
||||
{
|
||||
if (dumping)
|
||||
printf ("\nGoing on to old method for %s\n", objfile->name);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif /* QUICK_LOOK_UP */
|
||||
|
||||
/* Make two passes, one over the GNTT symbols, the other for the
|
||||
LNTT symbols.
|
||||
/* Make two passes, one over the GNTT symbols, the other for the
|
||||
LNTT symbols.
|
||||
|
||||
JB comment: above isn't true--they only make one pass, over
|
||||
the LNTT. */
|
||||
@ -1809,7 +1807,7 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||
ignore it and be done! */
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
#endif /* QUICK_LOOK_UP */
|
||||
|
||||
/* A source file of some kind. Note this may simply
|
||||
be an included file. */
|
||||
@ -1997,7 +1995,8 @@ hpread_build_psymtabs (objfile, section_offsets, mainline)
|
||||
ignore it and be done! */
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
#endif /* QUICK_LOOK_UP */
|
||||
|
||||
/* Scope block begin/end. We only care about function
|
||||
and file blocks right now. */
|
||||
|
||||
|
@ -65,6 +65,9 @@ hpread_symfile_finish PARAMS ((struct objfile *));
|
||||
extern void
|
||||
hpread_symfile_init PARAMS ((struct objfile *));
|
||||
|
||||
extern void
|
||||
do_pxdb PARAMS ((bfd *));
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
@ -360,6 +363,8 @@ som_symfile_read (objfile, section_offsets, mainline)
|
||||
bfd *abfd = objfile->obfd;
|
||||
struct cleanup *back_to;
|
||||
|
||||
do_pxdb (symfile_bfd_open (objfile->name));
|
||||
|
||||
init_minimal_symbol_collection ();
|
||||
back_to = make_cleanup (discard_minimal_symbols, 0);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user