* 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:
Jim Kingdon 1994-01-18 03:42:30 +00:00
parent 80edc7cb3c
commit af8b790667
3 changed files with 34 additions and 29 deletions

View file

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

View file

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

View file

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