#define L_INCR 1
#endif
-#ifdef GDB_TARGET_IS_HPPA
-/* We don't want to use HP-UX's nlists. */
-#define _NLIST_INCLUDED
-#endif
-
#include <obstack.h>
#include <sys/param.h>
#ifndef NO_SYS_FILE
#include "target.h"
#include "gdbcore.h" /* for bfd stuff */
#include "libbfd.h" /* FIXME Secret internal BFD stuff (bfd_read) */
-#ifdef GDB_TARGET_IS_HPPA
-#include "libhppa.h"
-#include "syms.h"
-#else
#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
-#endif
#include "symfile.h"
#include "objfiles.h"
#include "buildsym.h"
if (mainline || objfile->global_psymbols.size == 0 || objfile->static_psymbols.size == 0)
init_psymbol_list (objfile);
-#ifdef GDB_TARGET_IS_HPPA
- symbol_size = obj_dbx_symbol_entry_size (sym_bfd);
-#else
symbol_size = DBX_SYMBOL_SIZE (objfile);
-#endif
symbol_table_offset = DBX_SYMTAB_OFFSET (objfile);
pending_blocks = 0;
int val;
bfd *sym_bfd = objfile->obfd;
char *name = bfd_get_filename (sym_bfd);
- unsigned char size_temp[4];
+ unsigned char size_temp[sizeof(long)];
/* Allocate struct to keep track of the symfile */
objfile->sym_private = (PTR)
xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
-#ifdef GDB_TARGET_IS_HPPA
-#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_dbx_str_filepos (sym_bfd))
-#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_dbx_sym_filepos (sym_bfd))
-#define HP_STRING_TABLE_OFFSET (sym_bfd->origin + obj_hp_str_filepos (sym_bfd))
-#define HP_SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_hp_sym_filepos (sym_bfd))
-#else
#define STRING_TABLE_OFFSET (sym_bfd->origin + obj_str_filepos (sym_bfd))
#define SYMBOL_TABLE_OFFSET (sym_bfd->origin + obj_sym_filepos (sym_bfd))
-#endif
+
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
DBX_SYMFILE_INFO (objfile)->stab_section_info = NULL;
if (!DBX_TEXT_SECT (objfile))
error ("Can't find .text section in symbol file");
-#ifdef GDB_TARGET_IS_HPPA
- HP_SYMCOUNT (objfile) = obj_hp_sym_count (sym_bfd);
- DBX_SYMCOUNT (objfile) = obj_dbx_sym_count (sym_bfd);
-#else
DBX_SYMBOL_SIZE (objfile) = obj_symbol_entry_size (sym_bfd);
DBX_SYMCOUNT (objfile) = bfd_get_symcount (sym_bfd);
-#endif
DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
/* Read the string table and stash it away in the psymbol_obstack. It is
however at least check to see if the size is zero or some negative
value. */
-#ifdef GDB_TARGET_IS_HPPA
- DBX_STRINGTAB_SIZE (objfile) = obj_dbx_stringtab_size (sym_bfd);
- HP_STRINGTAB_SIZE (objfile) = obj_hp_stringtab_size (sym_bfd);
-#else
val = bfd_seek (sym_bfd, STRING_TABLE_OFFSET, L_SET);
if (val < 0)
perror_with_name (name);
perror_with_name (name);
DBX_STRINGTAB_SIZE (objfile) = bfd_h_get_32 (sym_bfd, size_temp);
-#endif
if (DBX_STRINGTAB_SIZE (objfile) <= 0
|| DBX_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
DBX_STRINGTAB (objfile) =
(char *) obstack_alloc (&objfile -> psymbol_obstack,
DBX_STRINGTAB_SIZE (objfile));
-#ifdef GDB_TARGET_IS_HPPA
- if (HP_STRINGTAB_SIZE (objfile) <= 0
- || HP_STRINGTAB_SIZE (objfile) > bfd_get_size (sym_bfd))
- error ("ridiculous string table size (%d bytes).",
- HP_STRINGTAB_SIZE (objfile));
-
- HP_STRINGTAB (objfile) =
- (char *) obstack_alloc (&objfile -> psymbol_obstack,
- HP_STRINGTAB_SIZE (objfile));
-#endif
/* Now read in the string table in one big gulp. */
sym_bfd);
if (val != DBX_STRINGTAB_SIZE (objfile))
perror_with_name (name);
-#ifdef GDB_TARGET_IS_HPPA
- val = bfd_seek (sym_bfd, HP_STRING_TABLE_OFFSET, L_SET);
- if (val < 0)
- perror_with_name (name);
- val = bfd_read (HP_STRINGTAB (objfile), HP_STRINGTAB_SIZE (objfile), 1,
- sym_bfd);
- if (val != HP_STRINGTAB_SIZE (objfile))
- perror_with_name (name);
-#endif
-#ifdef GDB_TARGET_IS_HPPA
- HP_SYMTAB_OFFSET (objfile) = HP_SYMBOL_TABLE_OFFSET;
-#endif
}
/* Perform any local cleanups required when we are done with a particular
symbuf_end = nbytes / symbol_size;
symbuf_idx = 0;
}
-#ifdef GDB_TARGET_IS_HPPA
-/* same as above for the HP symbol table */
-
-static struct symbol_dictionary_record hp_symbuf[4096];
-static int hp_symbuf_idx;
-static int hp_symbuf_end;
-
-static int
-fill_hp_symbuf (sym_bfd)
- bfd *sym_bfd;
-{
- int nbytes = bfd_read ((PTR)hp_symbuf, sizeof (hp_symbuf), 1, sym_bfd);
- if (nbytes <= 0)
- error ("error or end of file reading symbol table");
- hp_symbuf_end = nbytes / sizeof (struct symbol_dictionary_record);
- hp_symbuf_idx = 0;
- return 1;
-}
-#endif
#define SWAP_SYMBOL(symp, abfd) \
{ \
/* Current best guess is that there are approximately a twentieth
of the total symbols (in a debugging file) are global or static
oriented symbols */
-#ifdef GDB_TARGET_IS_HPPA
- objfile -> global_psymbols.size = (DBX_SYMCOUNT (objfile) +
- HP_SYMCOUNT (objfile)) / 10;
- objfile -> static_psymbols.size = (DBX_SYMCOUNT (objfile) +
- HP_SYMCOUNT (objfile)) / 10;
-#else
objfile -> global_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
objfile -> static_psymbols.size = DBX_SYMCOUNT (objfile) / 10;
-#endif
objfile -> global_psymbols.next = objfile -> global_psymbols.list = (struct partial_symbol *)
xmmalloc (objfile -> md, objfile -> global_psymbols.size * sizeof (struct partial_symbol));
objfile -> static_psymbols.next = objfile -> static_psymbols.list = (struct partial_symbol *)
CORE_ADDR last_o_file_start = 0;
struct cleanup *old_chain;
bfd *abfd;
-#ifdef GDB_TARGET_IS_HPPA
- /* HP stuff */
- struct symbol_dictionary_record *hp_bufp;
- int hp_symnum;
- /* A hack: the first text symbol in the debugging library */
- int dbsubc_addr = 0;
-#endif
-
/* End of the text segment of the executable file. */
CORE_ADDR end_of_text_addr;
file_string_table_offset = 0;
next_file_string_table_offset = 0;
-#ifdef GDB_TARGET_IS_HPPA
- stringtab_global = HP_STRINGTAB (objfile);
-#else
stringtab_global = DBX_STRINGTAB (objfile);
-#endif
pst = (struct partial_symtab *) 0;
symbuf_end = symbuf_idx = 0;
next_symbol_text_func = dbx_next_symbol_text;
-#ifdef GDB_TARGET_IS_HPPA
- /* On pa machines, the global symbols are all in the regular HP-UX
- symbol table. Read them in first. */
-
- hp_symbuf_end = hp_symbuf_idx = 0;
- bfd_seek (abfd, HP_SYMTAB_OFFSET (objfile), L_SET);
-
- for (hp_symnum = 0; hp_symnum < HP_SYMCOUNT (objfile); hp_symnum++)
- {
- int dbx_type;
-
- QUIT;
- if (hp_symbuf_idx == hp_symbuf_end)
- fill_hp_symbuf (abfd);
- hp_bufp = &hp_symbuf[hp_symbuf_idx++];
- switch (hp_bufp->symbol_type)
- {
- case ST_SYM_EXT:
- case ST_ARG_EXT:
- continue;
- case ST_CODE:
- case ST_PRI_PROG:
- case ST_SEC_PROG:
- case ST_ENTRY:
- case ST_MILLICODE:
- dbx_type = N_TEXT;
- hp_bufp->symbol_value &= ~3; /* clear out permission bits */
- break;
- case ST_DATA:
- dbx_type = N_DATA;
- break;
-#ifdef KERNELDEBUG
- case ST_ABSOLUTE:
- {
- extern int kernel_debugging;
- if (!kernel_debugging)
- continue;
- dbx_type = N_ABS;
- break;
- }
-#endif
- default:
- continue;
- }
- /* Use the address of dbsubc to finish the last psymtab. */
- if (hp_bufp->symbol_type == ST_CODE &&
- HP_STRINGTAB (objfile)[hp_bufp->name.n_strx] == '_' &&
- STREQ (HP_STRINGTAB (objfile) + hp_bufp->name.n_strx, "_dbsubc"))
- dbsubc_addr = hp_bufp->symbol_value;
- if (hp_bufp->symbol_scope == SS_UNIVERSAL)
- {
- if (hp_bufp->name.n_strx > HP_STRINGTAB_SIZE (objfile))
- error ("Invalid symbol data; bad HP string table offset: %d",
- hp_bufp->name.n_strx);
- /* A hack, but gets the job done. */
- if (STREQ (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
- "$START$"))
- objfile -> ei.entry_file_lowpc = hp_bufp->symbol_value;
- if (STREQ (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
- "_sr4export"))
- objfile -> ei.entry_file_highpc = hp_bufp->symbol_value;
- record_minimal_symbol (hp_bufp->name.n_strx + HP_STRINGTAB (objfile),
- hp_bufp->symbol_value, dbx_type | N_EXT,
- objfile);
- }
- }
- bfd_seek (abfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
-#endif
-
for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
{
/* Get the symbol for this run and pull out some info */
}
/* If there's stuff to be cleaned up, clean it up. */
-#ifndef GDB_TARGET_IS_HPPA
if (DBX_SYMCOUNT (objfile) > 0 /* We have some syms */
/*FIXME, does this have a bug at start address 0? */
&& last_o_file_start
objfile -> ei.entry_file_lowpc = last_o_file_start;
objfile -> ei.entry_file_highpc = bufp->n_value;
}
-#endif
if (pst)
{
-#ifdef GDB_TARGET_IS_HPPA
- end_psymtab (pst, psymtab_include_list, includes_used,
- symnum * symbol_size, dbsubc_addr,
- dependency_list, dependencies_used);
-#else
end_psymtab (pst, psymtab_include_list, includes_used,
symnum * symbol_size, end_of_text_addr,
dependency_list, dependencies_used);
-#endif
}
free_bincl_list (objfile);
buildsym_init ();
old_chain = make_cleanup (really_free_pendings, 0);
file_string_table_offset = FILE_STRING_OFFSET (pst);
-#ifdef GDB_TARGET_IS_HPPA
- symbol_size = obj_dbx_symbol_entry_size (pst->objfile->obfd);
-#else
symbol_size = SYMBOL_SIZE (pst);
-#endif
/* Read in this file's symbols */
bfd_seek (pst->objfile->obfd, SYMBOL_OFFSET (pst), L_SET);
current_objfile = objfile;
subfile_stack = NULL;
-#ifdef GDB_TARGET_IS_HPPA
- stringtab_global = HP_STRINGTAB (objfile);
-#else
stringtab_global = DBX_STRINGTAB (objfile);
-#endif
last_source_file = NULL;
abfd = objfile->obfd;
sanity checks). If so, that one was actually the directory
name, and the current one is the real file name.
Patch things up. */
- if (previous_stab_code == N_SO)
+ if (previous_stab_code == (int) N_SO)
{
patch_subfile_names (current_subfile, name);
break; /* Ignore repeated SOs */
dbx_symfile_read (objfile, section_offsets, 0);
}
\f
+/* Scan and build partial symbols for a PA symbol file.
+ This PA file has already been processed to get its minimal symbols.
+
+ OBJFILE is the object file we are reading symbols from.
+ ADDR is the address relative to which the symbols are (e.g.
+ the base address of the text segment).
+ MAINLINE is true if we are reading the main symbol
+ table (as opposed to a shared lib or dynamically loaded file).
+
+ */
+
+void
+pastab_build_psymtabs (objfile, section_offsets, mainline)
+ struct objfile *objfile;
+ struct section_offsets *section_offsets;
+ int mainline;
+{
+ free_header_files ();
+ init_header_files ();
+
+ /* In a PA file, we've already installed the minimal symbols that came
+ from the PA (non-stab) symbol table, so always act like an
+ incremental load here. */
+
+ dbx_symfile_read (objfile, section_offsets, mainline);
+}
+\f
/* Parse the user's idea of an offset for dynamic linking, into our idea
of how to represent it for fast symbol reading. */
-struct section_offsets *
+static struct section_offsets *
dbx_symfile_offsets (objfile, addr)
struct objfile *objfile;
CORE_ADDR addr;
NULL /* next: pointer to next struct sym_fns */
};
-/* This is probably a mistake. FIXME. Why can't the HP's use an ordinary
- file format name with an -hppa suffix? */
-static struct sym_fns hppa_sym_fns =
-{
- "hppa", /* sym_name: name or name prefix of BFD target type */
- 4, /* sym_namelen: number of significant sym_name chars */
- dbx_new_init, /* sym_new_init: init anything gbl to entire symtab */
- dbx_symfile_init, /* sym_init: read initial info, setup for sym_read() */
- dbx_symfile_read, /* sym_read: read a symbol file into symtab */
- dbx_symfile_finish, /* sym_finish: finished with file, cleanup */
- dbx_symfile_offsets, /* sym_offsets: parse user's offsets to internal form */
- NULL /* next: pointer to next struct sym_fns */
-};
-
void
_initialize_dbxread ()
{
add_symtab_fns(&sunos_sym_fns);
add_symtab_fns(&aout_sym_fns);
add_symtab_fns(&bout_sym_fns);
- add_symtab_fns(&hppa_sym_fns);
}