* libcoff.h (obj_raw_syment_coun): New macro.

* coffgen.c (coff_get_normalized_symtab):  Initialize
	raw_syment_count.
	* coffgen.c (coff_find_nearest_line):  Numerous little fixes.
This commit is contained in:
Per Bothner 1993-02-23 06:50:49 +00:00
parent c2a0f1cb8e
commit 85fe7cfff3
3 changed files with 26 additions and 13 deletions

View File

@ -1,3 +1,10 @@
Mon Feb 22 18:40:06 1993 Per Bothner (bothner@rtl.cygnus.com)
* libcoff.h (obj_raw_syment_coun): New macro.
* coffgen.c (coff_get_normalized_symtab): Initialize
raw_syment_count.
* coffgen.c (coff_find_nearest_line): Numerous little fixes.
Mon Feb 22 15:03:07 1993 Ian Lance Taylor (ian@cygnus.com)
* coff-mips.c (ecoff_set_symbol_info): stBlock symbols are always

View File

@ -1,5 +1,5 @@
/* Support for the generic parts of COFF, for BFD.
Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@ -1223,6 +1223,7 @@ bfd *abfd)
}
obj_raw_syments(abfd) = internal;
obj_raw_syment_count(abfd) = internal_ptr - internal;
return (internal);
} /* coff_get_normalized_symtab() */
@ -1403,14 +1404,14 @@ DEFUN(coff_find_nearest_line,(abfd,
static asection *cache_section;
static bfd_vma cache_offset;
static unsigned int cache_i;
static alent *cache_l;
static CONST char *cache_function;
static unsigned int line_base = 0;
unsigned int i = 0;
coff_data_type *cof = coff_data(abfd);
/* Run through the raw syments if available */
combined_entry_type *p;
alent *l;
unsigned int line_base = 0;
*filename_ptr = 0;
@ -1444,17 +1445,19 @@ DEFUN(coff_find_nearest_line,(abfd,
section == cache_section &&
offset >= cache_offset) {
i = cache_i;
l = cache_l;
*functionname_ptr = cache_function;
}
else {
i = 0;
l = section->lineno;
}
l = &section->lineno[i];
for (; i < section->lineno_count; i++) {
if (l->line_number == 0) {
/* Get the symbol this line number points at */
coff_symbol_type *coff = (coff_symbol_type *) (l->u.sym);
if (coff->symbol.value > offset)
break;
*functionname_ptr = coff->symbol.name;
if (coff->native) {
combined_entry_type *s = coff->native;
@ -1468,13 +1471,14 @@ DEFUN(coff_find_nearest_line,(abfd,
*/
union internal_auxent *a = &((s + 1)->u.auxent);
line_base = a->x_sym.x_misc.x_lnsz.x_lnno;
*line_ptr = line_base;
}
}
}
else {
if (l->u.offset > offset)
break;
*line_ptr = l->line_number + line_base + 1;
*line_ptr = l->line_number + line_base - 1;
}
l++;
}
@ -1483,7 +1487,7 @@ DEFUN(coff_find_nearest_line,(abfd,
cache_section = section;
cache_offset = offset;
cache_i = i;
cache_l = l;
cache_function = *functionname_ptr;
return true;
}

View File

@ -1,5 +1,5 @@
/* BFD COFF object file private structure.
Copyright (C) 1990-1991 Free Software Foundation, Inc.
Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define obj_relocbase(bfd) (coff_data(bfd)->relocbase)
#define obj_raw_syments(bfd) (coff_data(bfd)->raw_syments)
#define obj_raw_syment_count(bfd) (coff_data(bfd)->raw_syment_count)
#define obj_convert(bfd) (coff_data(bfd)->conversion_table)
#define obj_conv_table_size(bfd) (coff_data(bfd)->conv_table_size)
#if CFILE_STUFF
@ -78,7 +79,7 @@ extern bfd_target *coff_object_p PARAMS ((bfd *));
extern struct sec *coff_section_from_bfd_index PARAMS ((bfd *, int));
extern unsigned int coff_get_symtab_upper_bound PARAMS ((bfd *));
extern unsigned int coff_get_symtab PARAMS ((bfd *, asymbol **));
extern void coff_count_linenumbers PARAMS ((bfd *));
extern int coff_count_linenumbers PARAMS ((bfd *));
extern struct coff_symbol_struct *coff_symbol_from PARAMS ((bfd *, asymbol *));
extern void coff_renumber_symbols PARAMS ((bfd *));
extern void coff_mangle_symbols PARAMS ((bfd *));
@ -234,7 +235,8 @@ typedef struct
PTR internal_filehdr));
PTR (*_bfd_coff_mkobject_hook) PARAMS ((
bfd *abfd,
PTR internal_filehdr));
PTR internal_filehdr,
PTR internal_aouthdr));
flagword (*_bfd_styp_to_sec_flags_hook) PARAMS ((
bfd *abfd,
PTR internal_scnhdr));
@ -312,8 +314,8 @@ typedef struct
#define bfd_coff_set_arch_mach_hook(abfd, filehdr)\
((coff_backend_info (abfd)->_bfd_coff_set_arch_mach_hook) (abfd, filehdr))
#define bfd_coff_mkobject_hook(abfd, filehdr)\
((coff_backend_info (abfd)->_bfd_coff_mkobject_hook) (abfd, filehdr))
#define bfd_coff_mkobject_hook(abfd, filehdr, aouthdr)\
((coff_backend_info (abfd)->_bfd_coff_mkobject_hook) (abfd, filehdr, aouthdr))
#define bfd_coff_styp_to_sec_flags_hook(abfd, scnhdr)\
((coff_backend_info (abfd)->_bfd_styp_to_sec_flags_hook) (abfd, scnhdr))