@ -806,7 +806,11 @@ get_relocs (bfd *abfd, asection *sec, void *dataarg)
/* Print a single symbol. */
static void
print_symbol ( bfd * abfd , asymbol * sym , bfd_vma ssize , bfd * archive_bfd )
print_symbol ( bfd * abfd ,
asymbol * sym ,
bfd_vma ssize ,
bfd * archive_bfd ,
bfd_boolean is_synthetic )
{
symbol_info syminfo ;
struct extended_symbol_info info ;
@ -816,12 +820,12 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
format - > print_symbol_filename ( archive_bfd , abfd ) ;
bfd_get_symbol_info ( abfd , sym , & syminfo ) ;
info . sinfo = & syminfo ;
info . ssize = ssize ;
if ( bfd_get_flavour ( abfd ) = = bfd_target_elf_flavour )
info . elfinfo = ( elf_symbol_type * ) sym ;
else
info . elfinfo = NULL ;
/* Synthetic symbols do not have a full elf_symbol_type set of data available. */
info . elfinfo = is_synthetic ? NULL : elf_symbol_from ( abfd , sym ) ;
format - > print_symbol_info ( & info , abfd ) ;
if ( line_numbers )
@ -941,12 +945,17 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd)
/* Print the symbols when sorting by size. */
static void
print_size_symbols ( bfd * abfd , bfd_boolean is_dynamic ,
struct size_sym * symsizes , long symcount ,
bfd * archive_bfd )
print_size_symbols ( bfd * abfd ,
bfd_boolean is_dynamic ,
struct size_sym * symsizes ,
long symcount ,
long synth_count ,
bfd * archive_bfd )
{
asymbol * store ;
struct size_sym * from , * fromend ;
struct size_sym * from ;
struct size_sym * fromend ;
struct size_sym * fromsynth ;
store = bfd_make_empty_symbol ( abfd ) ;
if ( store = = NULL )
@ -954,6 +963,8 @@ print_size_symbols (bfd *abfd, bfd_boolean is_dynamic,
from = symsizes ;
fromend = from + symcount ;
fromsynth = symsizes + ( symcount - synth_count ) ;
for ( ; from < fromend ; from + + )
{
asymbol * sym ;
@ -962,20 +973,34 @@ print_size_symbols (bfd *abfd, bfd_boolean is_dynamic,
if ( sym = = NULL )
bfd_fatal ( bfd_get_filename ( abfd ) ) ;
print_symbol ( abfd , sym , from - > size , archive_bfd ) ;
print_symbol ( abfd , sym , from - > size , archive_bfd , from > = fromsynth ) ;
}
}
/* Print the symbols. If ARCHIVE_BFD is non-NULL, it is the archive
containing ABFD . */
/* Print the symbols of ABFD that are held in MINISYMS.
If ARCHIVE_BFD is non - NULL , it is the archive containing ABFD .
SYMCOUNT is the number of symbols in MINISYMS and SYNTH_COUNT
is the number of these that are synthetic . Synthetic symbols ,
if any are present , always come at the end of the MINISYMS .
SIZE is the size of a symbol in MINISYMS . */
static void
print_symbols ( bfd * abfd , bfd_boolean is_dynamic , void * minisyms , long symcount ,
unsigned int size , bfd * archive_bfd )
print_symbols ( bfd * abfd ,
bfd_boolean is_dynamic ,
void * minisyms ,
long symcount ,
long synth_count ,
unsigned int size ,
bfd * archive_bfd )
{
asymbol * store ;
bfd_byte * from , * fromend ;
bfd_byte * from ;
bfd_byte * fromend ;
bfd_byte * fromsynth ;
store = bfd_make_empty_symbol ( abfd ) ;
if ( store = = NULL )
@ -983,6 +1008,8 @@ print_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms, long symcount,
from = ( bfd_byte * ) minisyms ;
fromend = from + symcount * size ;
fromsynth = ( bfd_byte * ) minisyms + ( ( symcount - synth_count ) * size ) ;
for ( ; from < fromend ; from + = size )
{
asymbol * sym ;
@ -991,7 +1018,7 @@ print_symbols (bfd *abfd, bfd_boolean is_dynamic, void *minisyms, long symcount,
if ( sym = = NULL )
bfd_fatal ( bfd_get_filename ( abfd ) ) ;
print_symbol ( abfd , sym , ( bfd_vma ) 0 , archive_bfd ) ;
print_symbol ( abfd , sym , ( bfd_vma ) 0 , archive_bfd , from > = fromsynth ) ;
}
}
@ -1001,6 +1028,7 @@ static void
display_rel_file ( bfd * abfd , bfd * archive_bfd )
{
long symcount ;
long synth_count = 0 ;
void * minisyms ;
unsigned int size ;
struct size_sym * symsizes ;
@ -1031,11 +1059,10 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
non_fatal ( _ ( " %s: no symbols " ) , bfd_get_filename ( abfd ) ) ;
return ;
}
if ( show_synthetic & & size = = sizeof ( asymbol * ) )
{
asymbol * synthsyms ;
long synth_count ;
asymbol * * static_syms = NULL ;
asymbol * * dyn_syms = NULL ;
long static_count = 0 ;
@ -1061,6 +1088,7 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
bfd_fatal ( bfd_get_filename ( abfd ) ) ;
}
}
synth_count = bfd_get_synthetic_symtab ( abfd , static_count , static_syms ,
dyn_count , dyn_syms , & synthsyms ) ;
if ( synth_count > 0 )
@ -1106,9 +1134,9 @@ display_rel_file (bfd *abfd, bfd *archive_bfd)
}
if ( ! sort_by_size )
print_symbols ( abfd , dynamic , minisyms , symcount , size , archive_bfd ) ;
print_symbols ( abfd , dynamic , minisyms , symcount , synth_count , s ize , archive_bfd ) ;
else
print_size_symbols ( abfd , dynamic , symsizes , symcount , archive_bfd ) ;
print_size_symbols ( abfd , dynamic , symsizes , symcount , synth_count , archive_bfd ) ;
free ( minisyms ) ;
free ( symsizes ) ;
@ -1181,6 +1209,8 @@ display_archive (bfd *file)
bfd_close ( last_arfile ) ;
lineno_cache_bfd = NULL ;
lineno_cache_rel_bfd = NULL ;
if ( arfile = = last_arfile )
return ;
}
last_arfile = arfile ;
}
@ -1434,7 +1464,6 @@ print_symbol_info_bsd (struct extended_symbol_info *info, bfd *abfd)
print_value ( abfd , SYM_SIZE ( info ) ) ;
else
print_value ( abfd , SYM_VALUE ( info ) ) ;
if ( print_size & & SYM_SIZE ( info ) )
{
printf ( " " ) ;