aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog16
-rw-r--r--gdb/hp-psymtab-read.c151
-rw-r--r--gdb/somread.c5
3 files changed, 96 insertions, 76 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1a05de8..3dd0e2b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -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
diff --git a/gdb/hp-psymtab-read.c b/gdb/hp-psymtab-read.c
index 80c3073..0e5a7b6 100644
--- a/gdb/hp-psymtab-read.c
+++ b/gdb/hp-psymtab-read.c
@@ -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);
-
- discard_cleanups (old_chain);
+ /* 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);
/* 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. */
diff --git a/gdb/somread.c b/gdb/somread.c
index 5f0d0c7..19e3ff1 100644
--- a/gdb/somread.c
+++ b/gdb/somread.c
@@ -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);