* xcoffread.c (read_xcoff_symtab, case C_FILE): Accept the name
from either the symbol name or the auxent. * coffread.c, symfile.h (coff_getfilename): Renamed from getfilename, no longer static.
This commit is contained in:
parent
80edc7cb3c
commit
af8b790667
3 changed files with 34 additions and 29 deletions
|
@ -1,3 +1,10 @@
|
|||
Mon Jan 17 22:00:15 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||
|
||||
* xcoffread.c (read_xcoff_symtab, case C_FILE): Accept the name
|
||||
from either the symbol name or the auxent.
|
||||
* coffread.c, symfile.h (coff_getfilename): Renamed from getfilename,
|
||||
no longer static.
|
||||
|
||||
Mon Jan 17 13:35:01 1994 Fred Fish (fnf@cygnus.com)
|
||||
|
||||
* Makefile.in (ALLPARAM): Change irix5.h to nm-irix5.h.
|
||||
|
|
|
@ -76,13 +76,10 @@ struct coff_symfile_info {
|
|||
static CORE_ADDR cur_src_start_addr;
|
||||
static CORE_ADDR cur_src_end_addr;
|
||||
|
||||
/* Core address of the end of the first object file. */
|
||||
static CORE_ADDR first_object_file_end;
|
||||
|
||||
/* The addresses of the symbol table stream and number of symbols
|
||||
of the object file we are reading (as copied into core). */
|
||||
|
||||
static FILE *nlist_stream_global;
|
||||
static GDB_FILE *nlist_stream_global;
|
||||
static int nlist_nsyms_global;
|
||||
|
||||
/* Vector of line number information. */
|
||||
|
@ -224,9 +221,6 @@ free_linetab PARAMS ((void));
|
|||
static int
|
||||
init_lineno PARAMS ((int, long, int));
|
||||
|
||||
static char *
|
||||
getfilename PARAMS ((union internal_auxent *));
|
||||
|
||||
static char *
|
||||
getsymname PARAMS ((struct internal_syment *));
|
||||
|
||||
|
@ -258,8 +252,8 @@ coff_symfile_read PARAMS ((struct objfile *, struct section_offsets *, int));
|
|||
static void
|
||||
coff_symfile_finish PARAMS ((struct objfile *));
|
||||
|
||||
static void
|
||||
record_minimal_symbol PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type));
|
||||
static void record_minimal_symbol
|
||||
PARAMS ((char *, CORE_ADDR, enum minimal_symbol_type, struct objfile *));
|
||||
|
||||
static void
|
||||
coff_end_symtab PARAMS ((struct objfile *));
|
||||
|
@ -484,15 +478,17 @@ coff_end_symtab (objfile)
|
|||
}
|
||||
|
||||
static void
|
||||
record_minimal_symbol (name, address, type)
|
||||
record_minimal_symbol (name, address, type, objfile)
|
||||
char *name;
|
||||
CORE_ADDR address;
|
||||
enum minimal_symbol_type type;
|
||||
struct objfile *objfile;
|
||||
{
|
||||
/* We don't want TDESC entry points in the minimal symbol table */
|
||||
if (name[0] == '@') return;
|
||||
|
||||
prim_record_minimal_symbol (savestring (name, strlen (name)), address, type);
|
||||
prim_record_minimal_symbol (savestring (name, strlen (name)), address, type,
|
||||
objfile);
|
||||
}
|
||||
|
||||
/* coff_symfile_init ()
|
||||
|
@ -610,7 +606,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
|
|||
symfile_bfd = abfd; /* Kludge for swap routines */
|
||||
|
||||
/* WARNING WILL ROBINSON! ACCESSING BFD-PRIVATE DATA HERE! FIXME! */
|
||||
desc = fileno ((FILE *)(abfd->iostream)); /* File descriptor */
|
||||
desc = fileno ((GDB_FILE *)(abfd->iostream)); /* File descriptor */
|
||||
num_symbols = bfd_get_symcount (abfd); /* How many syms */
|
||||
symtab_offset = cdata->sym_filepos; /* Symbol table file offset */
|
||||
stringtab_offset = symtab_offset + /* String table file offset */
|
||||
|
@ -682,7 +678,7 @@ coff_symfile_read (objfile, section_offsets, mainline)
|
|||
{
|
||||
/* FIXME: dubious. Why can't we use something normal like
|
||||
bfd_get_section_contents? */
|
||||
fseek ((FILE *) abfd->iostream, abfd->where, 0);
|
||||
fseek ((GDB_FILE *) abfd->iostream, abfd->where, 0);
|
||||
|
||||
stabsize = bfd_section_size (abfd, info->stabsect);
|
||||
stabstrsize = bfd_section_size (abfd, info->stabstrsect);
|
||||
|
@ -730,7 +726,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
int nsyms;
|
||||
struct objfile *objfile;
|
||||
{
|
||||
FILE *stream;
|
||||
GDB_FILE *stream;
|
||||
register struct context_stack *new;
|
||||
struct coff_symbol coff_symbol;
|
||||
register struct coff_symbol *cs = &coff_symbol;
|
||||
|
@ -743,7 +739,6 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
|
||||
/* A .file is open. */
|
||||
int in_source_file = 0;
|
||||
int num_object_files = 0;
|
||||
int next_file_symnum = -1;
|
||||
|
||||
/* Name of the current file. */
|
||||
|
@ -814,7 +809,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
coff_end_symtab (objfile);
|
||||
|
||||
coff_start_symtab ();
|
||||
complete_symtab ("_globals_", 0, first_object_file_end);
|
||||
complete_symtab ("_globals_", 0, 0);
|
||||
/* done with all files, everything from here on out is globals */
|
||||
}
|
||||
|
||||
|
@ -827,7 +822,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
if (ISFCN (cs->c_type) && cs->c_sclass != C_TPDEF)
|
||||
{
|
||||
/* Record all functions -- external and static -- in minsyms. */
|
||||
record_minimal_symbol (cs->c_name, cs->c_value, mst_text);
|
||||
record_minimal_symbol (cs->c_name, cs->c_value, mst_text, objfile);
|
||||
|
||||
fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr;
|
||||
fcn_start_addr = cs->c_value;
|
||||
|
@ -856,7 +851,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
*/
|
||||
next_file_symnum = cs->c_value;
|
||||
if (cs->c_naux > 0)
|
||||
filestring = getfilename (&main_aux);
|
||||
filestring = coff_getfilename (&main_aux);
|
||||
else
|
||||
filestring = "";
|
||||
|
||||
|
@ -877,11 +872,6 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
if (STREQ (cs->c_name, ".text")) {
|
||||
/* FIXME: don't wire in ".text" as section name
|
||||
or symbol name! */
|
||||
if (++num_object_files == 1) {
|
||||
/* last address of startup file */
|
||||
first_object_file_end = cs->c_value +
|
||||
main_aux.x_scn.x_scnlen;
|
||||
}
|
||||
/* Check for in_source_file deals with case of
|
||||
a file with debugging symbols
|
||||
followed by a later file with no symbols. */
|
||||
|
@ -922,11 +912,11 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
|
|||
But why are absolute syms recorded as functions, anyway? */
|
||||
if (cs->c_secnum <= text_bfd_scnum+1) {/* text or abs */
|
||||
record_minimal_symbol (cs->c_name, cs->c_value,
|
||||
mst_text);
|
||||
mst_text, objfile);
|
||||
break;
|
||||
} else {
|
||||
record_minimal_symbol (cs->c_name, cs->c_value,
|
||||
mst_data);
|
||||
mst_data, objfile);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1214,7 +1204,7 @@ getsymname (symbol_entry)
|
|||
is only good for temporary use. */
|
||||
|
||||
static char *
|
||||
getfilename (aux_entry)
|
||||
coff_getfilename (aux_entry)
|
||||
union internal_auxent *aux_entry;
|
||||
{
|
||||
static char buffer[BUFSIZ];
|
||||
|
|
|
@ -1381,15 +1381,23 @@ function_entry_point:
|
|||
cur_src_end_addr = file_end_addr;
|
||||
end_symtab (file_end_addr, 1, 0, objfile, textsec->target_index);
|
||||
end_stabs ();
|
||||
|
||||
/* XCOFF, according to the AIX 3.2 documentation, puts the filename
|
||||
in cs->c_name. But xlc 1.3.0.2 has decided to do things the
|
||||
standard COFF way and put it in the auxent. We use the auxent if
|
||||
there is one, otherwise use the name. Simple enough. */
|
||||
if (cs->c_naux > 0)
|
||||
filestring = coff_getfilename (&main_aux);
|
||||
else
|
||||
filestring = cs->c_name;
|
||||
|
||||
start_stabs ();
|
||||
start_symtab (cs->c_name, (char *)NULL, (CORE_ADDR)0);
|
||||
start_symtab (filestring, (char *)NULL, (CORE_ADDR)0);
|
||||
last_csect_name = 0;
|
||||
|
||||
/* reset file start and end addresses. A compilation unit with no text
|
||||
(only data) should have zero file boundaries. */
|
||||
file_start_addr = file_end_addr = 0;
|
||||
|
||||
filestring = cs->c_name;
|
||||
break;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue