| abstract
| - my @lines; while () { push @lines, $_; } $lines[0] =~ /^(xdigit:*): /; my $start_addr = hex($1); $lines[-1] =~ /^(xdigit:*): /; my $end_addr = hex($1); printf("%s %s
", $start_addr, $end_addr); my @gas; my %loc_jmp; foreach (@lines) { my ($addr, $op, $line) = $_ =~ /^(xdigit:*): (xdigit:*) (.*)/; $op_n = hex($op); if ( ($op_n & 0x0e000000) == 0x0a000000) {1.
* any branch op 2.
* ff8771c4: ebfe91c5 bl ff81b8e0 <_binary_dump_bin_start+0xb8e0> 3.
* => "BL sub_FF81B8E0
" // <_binary_dump_bin_start+0xb8e0> $line =~ s/ (xdigit:*)/ jump_/; my $goto = uc $1; if ((hex($goto) ge $start_addr) && (hex($goto) le $end_addr)) { $loc_jmp{lc $goto} = 1; $line =~ s/jump_/loc_$goto/; } else { $line =~ s/jump_/sub_$goto/; } $line =~ s/^(.*? )/uc $1/e; # uppercase op push @gas, "$addr $line"; next; } if ($line =~ /^(ldr.*)\[pc, #.*?\((xdigit:+)\)/) {1.
* ff825c38: e51f42f0 ldr r4, [pc, #-752] ; ff825950: (00001cb8) 2.
* => "ldr r4, =0x00001cb8
" $line = "$1 =0x$2"; push @gas, "$addr $line"; next; } if ($line =~ /^[add|sub]+(.*?), pc, #.*?; (xdigit:+): (.*)/) {1.
* ff814db4: b28f00fc addlt r0, pc, #252 ; ff814eb8: (65536d64) *"dmSetup" 2.
* => "ldrlt r0, =0xff814eb8
" // ; (65536d64) *"dmSetup" $line = "ldr$1, =0x$2 ; $3"; push @gas, "$addr $line"; next; } push @gas, "$addr $line"; } 1.
* print Dumper(\@gas); foreach (@gas) { my ($addr, $line) = $_ =~ /^(.*?) (.*)/; if ($loc_jmp{$addr}) { print q|"loc_| . uc ($addr) . qq|:\
"
|; #print "loc_" . uc $addr . ":
"; } $line .= '
"' unless ( $line =~ s|(<.*>)$|\
" // $1| or $line =~ s|(;.*)$|\
" // $1| ); print qq| "$line
|; }
|