|
@@ -4,9 +4,9 @@ use strict;
|
4
|
4
|
use warnings;
|
5
|
5
|
|
6
|
6
|
# Sort the symbol table portion of the output of objdump -ht by
|
7
|
|
-# section, then by symbol value. Used to enhance the linker maps
|
8
|
|
-# produced by "make bin/%.map" by also showing the values of all
|
9
|
|
-# non-global symbols.
|
|
7
|
+# section, then by symbol value, then by size. Used to enhance the
|
|
8
|
+# linker maps produced by "make bin/%.map" by also showing the values
|
|
9
|
+# of all non-global symbols.
|
10
|
10
|
|
11
|
11
|
my %section_idx = ( "*ABS*" => "." );
|
12
|
12
|
my %lines;
|
|
@@ -17,14 +17,16 @@ while ( <> ) {
|
17
|
17
|
print;
|
18
|
18
|
( my $index, my $section ) = ( $1, $2 );
|
19
|
19
|
$section_idx{$section} = sprintf ( "%02d", $index );
|
20
|
|
- } elsif ( /^([0-9a-fA-F]+)\s.*?\s([\.\*]\S+)\s/ ) {
|
|
20
|
+ } elsif ( /^([0-9a-fA-F]+)\s.*?\s([\.\*]\S+)\s+([0-9a-fA-F]+)\s/ ) {
|
21
|
21
|
# It's a symbol line - store it in the hash, indexed by
|
22
|
|
- # "<section index>.<value>"
|
23
|
|
- ( my $value, my $section ) = ( $1, $2 );
|
|
22
|
+ # "<section index>:<value>:<size>"
|
|
23
|
+ ( my $value, my $section, my $size ) = ( $1, $2, $3 );
|
24
|
24
|
die "Unrecognised section \"$section\"\n"
|
25
|
25
|
unless exists $section_idx{$section};
|
26
|
26
|
my $section_idx = $section_idx{$section};
|
27
|
|
- $lines{${section_idx}.":".${value}} = $_;
|
|
27
|
+ my $key = $section_idx.":".$value.":".$size;
|
|
28
|
+ $lines{$key} ||= '';
|
|
29
|
+ $lines{$key} .= $_;
|
28
|
30
|
} else {
|
29
|
31
|
# It's a generic header line: just print it.
|
30
|
32
|
print;
|