diff --git a/src/util/sortobjdump.pl b/src/util/sortobjdump.pl index 7257161c..8ad7314b 100755 --- a/src/util/sortobjdump.pl +++ b/src/util/sortobjdump.pl @@ -17,14 +17,18 @@ while ( <> ) { print; ( my $index, my $section ) = ( $1, $2 ); $section_idx{$section} = sprintf ( "%02d", $index ); - } elsif ( /^([0-9a-fA-F]+)\s.*?\s([\.\*]\S+)\s+([0-9a-fA-F]+)\s/ ) { + } elsif ( /^([0-9a-fA-F]+)\s.*?\s([\.\*]\S+)\s+([0-9a-fA-F]+)\s+(\S+)/ ) { # It's a symbol line - store it in the hash, indexed by - # "
::" - ( my $value, my $section, my $size ) = ( $1, $2, $3 ); + # ":::". is "0" if + # the symbol name is of the form xxx_end, "1" otherwise; this is + # done so that table end markers show up before any other symbols + # with the same value. + ( my $value, my $section, my $size, my $name ) = ( $1, $2, $3, $4 ); die "Unrecognised section \"$section\"\n" unless exists $section_idx{$section}; my $section_idx = $section_idx{$section}; - my $key = $section_idx.":".$value.":".$size; + my $end = ( $name =~ /_end$/ ) ? "0" : "1"; + my $key = $section_idx.":".$value.":".$size.":".$end; $lines{$key} ||= ''; $lines{$key} .= $_; } else {