@ -142,6 +142,7 @@ void
core_init ( aout_name )
const char * aout_name ;
{
int core_sym_bytes ;
core_bfd = bfd_openr ( aout_name , 0 ) ;
if ( ! core_bfd )
@ -172,15 +173,15 @@ core_init (aout_name)
/* Read core's symbol table. */
/* This will probably give us more than we need, but that's ok. */
core_num_sym s = bfd_get_symtab_upper_bound ( core_bfd ) ;
if ( core_num_sym s < 0 )
core_sym_byte s = bfd_get_symtab_upper_bound ( core_bfd ) ;
if ( core_sym_byte s < 0 )
{
fprintf ( stderr , " %s: %s: %s \n " , whoami , aout_name ,
bfd_errmsg ( bfd_get_error ( ) ) ) ;
done ( 1 ) ;
}
core_syms = ( asymbol * * ) xmalloc ( core_num_sym s ) ;
core_syms = ( asymbol * * ) xmalloc ( core_sym_byte s ) ;
core_num_syms = bfd_canonicalize_symtab ( core_bfd , core_syms ) ;
if ( core_num_syms < 0 )
@ -405,8 +406,7 @@ get_src_info (addr, filename, name, line_num)
One symbol per function is entered . */
void
core_create_function_syms ( cbfd )
bfd * cbfd ATTRIBUTE_UNUSED ;
core_create_function_syms ( )
{
bfd_vma min_vma = ~ ( bfd_vma ) 0 ;
bfd_vma max_vma = 0 ;
@ -592,13 +592,11 @@ core_create_function_syms (cbfd)
One symbol per line of source code is entered . */
void
core_create_line_syms ( cbfd )
bfd * cbfd ;
core_create_line_syms ( )
{
char * prev_name , * prev_filename ;
unsigned int prev_name_len , prev_filename_len ;
bfd_vma vma , min_vma = ~ ( bfd_vma ) 0 , max_vma = 0 ;
bfd_vma offset ;
Sym * prev , dummy , * sentinel , * sym ;
const char * filename ;
int prev_line_num ;
@ -607,9 +605,9 @@ core_create_line_syms (cbfd)
/* Create symbols for functions as usual. This is necessary in
cases where parts of a program were not compiled with - g . For
those parts we still want to get info at the function level . */
core_create_function_syms ( cbfd ) ;
core_create_function_syms ( ) ;
/* Pass 1 - counter number of symbols. */
/* Pass 1: count the number of symbols. */
/* To find all line information, walk through all possible
text - space addresses ( one by one ! ) and get the debugging
@ -617,7 +615,7 @@ core_create_line_syms (cbfd)
it is time to create a new symbol .
Of course , this is rather slow and it would be better if
bfd would provide an iterator for enumerating all line infos . */
BFD would provide an iterator for enumerating all line infos . */
prev_name_len = PATH_MAX ;
prev_filename_len = PATH_MAX ;
prev_name = xmalloc ( prev_name_len ) ;
@ -625,12 +623,11 @@ core_create_line_syms (cbfd)
ltab . len = 0 ;
prev_line_num = 0 ;
for ( offset = 0 ; offset < core_text_sect - > _raw_size ; offset + = min_insn_size )
bfd_vma vma_high = core_text_sect - > vma + core_text_sect - > _raw_size ;
for ( vma = core_text_sect - > vma ; vma < vma_high ; vma + = min_insn_size )
{
unsigned int len ;
vma = core_text_sect - > vma + offset ;
if ( ! get_src_info ( vma , & filename , & dummy . name , & dummy . line_num )
| | ( prev_line_num = = dummy . line_num
& & prev_name ! = NULL
@ -693,12 +690,11 @@ core_create_line_syms (cbfd)
lot cleaner now . */
prev = 0 ;
for ( offset = 0 ; offset < core_text_sect - > _raw_size ; offset + = min_insn_size )
for ( vma = core_text_sect - > vma ; vma < vma_high ; vma + = min_insn_size )
{
sym_init ( ltab . limit ) ;
if ( ! get_src_info ( core_text_sect - > vma + offset , & filename ,
& ltab . limit - > name , & ltab . limit - > line_num )
if ( ! get_src_info ( vma , & filename , & ltab . limit - > name , & ltab . limit - > line_num )
| | ( prev & & prev - > line_num = = ltab . limit - > line_num
& & strcmp ( prev - > name , ltab . limit - > name ) = = 0
& & strcmp ( prev - > file - > name , filename ) = = 0 ) )
@ -708,7 +704,7 @@ core_create_line_syms (cbfd)
ltab . limit - > name = xstrdup ( ltab . limit - > name ) ;
ltab . limit - > file = source_file_lookup_path ( filename ) ;
ltab . limit - > addr = core_text_sect - > vma + offset ;
ltab . limit - > addr = vma ;
/* Set is_static based on the enclosing function, using either:
1 ) the previous symbol , if it ' s from the same function , or