]>
git.ipfire.org Git - ipfire-2.x.git/blob - src/hwinfo/scripts/mci
9 die "usage: mci data_file binary\n" unless -f
($list);
14 if(/^;\s*(.+?)\s*$/) {
16 $i[0] = sprintf "%-24s", $i[0];
17 $i[1] = addr2line
$i[1];
18 print "; ", join("\t", @i), "\n";
23 die "oops, format error" if @i > 3;
26 if($i[0] =~ /^>(\S+)/) {
29 elsif($i[0] =~ /<(\S+)/) {
34 die "oops, strange data (line $.)\n"
38 die "oops, format error"
45 $size = @i == 2 ?
undef : $i[2];
48 if(exists $mem{$addr}) {
50 $y = addr2line
${$mem{$addr}}[1];
51 print "malloc oops (line $.): mem $addr; old: $y, size ${$mem{$addr}}[0]; new: $x, size $size\n";
53 $mem{$addr} = [ $size, $func, @funcs ];
57 if(!exists $mem{$addr}) {
60 for $f ($func, @funcs) {
61 $xx .= "<-" unless $first;
65 print "free oops (line $.): $addr ($xx) [last free: line $lfree{$addr}]\n";
68 $lfree{$addr} .= " $.";
73 for (sort keys %mem) {
74 $total += oct(${$mem{$_}}[0]);
77 # $x = `addr2line -s -e $bin ${$mem{$_}}[1]`;
79 # $x = $x =~ /\?{2}/ ? undef : "$x ";
80 $x = addr2line
${$mem{$_}}[1];
82 print "$_\t${$mem{$_}}[0]\t";
84 for $f (@
{$mem{$_}}[1..$#{$mem{$_}}]) {
85 print "<-" unless $first;
92 printf "total: %u bytes in %u blocks\n", $total, $cnt;
99 return $_[0] unless $bin;
101 $y = sprintf "0x%x", oct($_[0]) + $ofs;
103 return $addr_cache{$y} if exists $addr_cache{$y};
105 $x = `addr2line -s -e $bin $y`;
107 $x = $x =~ /\?{2}/ ?
$_[0] : $x;
109 $addr_cache{$y} = $x;