#!/usr/bin/perl
|
#!/usr/bin/perl
|
|
|
$OBJDUMP=$ARGV[0];
|
$OBJDUMP=$ARGV[0];
|
|
|
sub swapdata {
|
sub swapdata {
|
local ($num) = @_;
|
local ($num) = @_;
|
|
|
return substr($num, 6, 2).substr($num, 4, 2).substr ($num, 2, 2).substr ($num, 0, 2);
|
return substr($num, 6, 2).substr($num, 4, 2).substr ($num, 2, 2).substr ($num, 0, 2);
|
}
|
}
|
|
|
open (DATA, $OBJDUMP.' --full-contents --section=.data getconsdata.o | grep \'^ 00\' |') ||
|
open (DATA, $OBJDUMP.' --full-contents --section=.data getconsdata.o | grep \'^ 00\' |') ||
|
die ('Cant objdump!');
|
die ('Cant objdump!');
|
#print "phase 1\n";
|
#print "phase 1\n";
|
while () {
|
while () {
|
($addr, $data0, $data1, $data2, $data3) = split (' ');
|
($addr, $data0, $data1, $data2, $data3) = split (' ');
|
# print "$addr, $data0, $data1, $data2, $data3\n";
|
# print "$addr, $data0, $data1, $data2, $data3\n";
|
$dat[hex($addr)] = hex(&swapdata($data0));
|
$dat[hex($addr)] = hex(&swapdata($data0));
|
$dat[hex($addr)+4] = hex(&swapdata($data1));
|
$dat[hex($addr)+4] = hex(&swapdata($data1));
|
$dat[hex($addr)+8] = hex(&swapdata($data2));
|
$dat[hex($addr)+8] = hex(&swapdata($data2));
|
$dat[hex($addr)+12] = hex(&swapdata($data3));
|
$dat[hex($addr)+12] = hex(&swapdata($data3));
|
}
|
}
|
close (DATA);
|
close (DATA);
|
|
|
# print "phase 2\n";
|
# print "phase 2\n";
|
open (DATA, $OBJDUMP.' --syms getconsdata.o | grep \' O .data\' |') ||
|
open (DATA, $OBJDUMP.' --syms getconsdata.o | grep \' O .data\' |') ||
|
die ('Cant objdump!');
|
die ('Cant objdump!');
|
while () {
|
while () {
|
($addr, $flag1, $flag2, $sect, $size, $name) = split (' ');
|
($addr, $flag1, $flag2, $sect, $size, $name) = split (' ');
|
# print "$addr, $flag1, $flag2, $sect, $size, $name\n";
|
# print "$addr, $flag1, $flag2, $sect, $size, $name\n";
|
$nam[hex($addr)] = $name;
|
$nam[hex($addr)] = $name;
|
}
|
}
|
close (DATA);
|
close (DATA);
|
|
|
# print "phase 3\n";
|
# print "phase 3\n";
|
print "/*\n * *** THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! ***\n */\n";
|
print "/*\n * *** THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! ***\n */\n";
|
for ($i = 0; $i < hex($addr)+12; $i ++) {
|
for ($i = 0; $i < hex($addr)+12; $i ++) {
|
print "unsigned long $nam[$i] = $dat[$i];\n" if $dat[$i];
|
print "unsigned long $nam[$i] = $dat[$i];\n" if $dat[$i];
|
print "#define __HAS_$nam[$i]\n" if $dat[$i];
|
print "#define __HAS_$nam[$i]\n" if $dat[$i];
|
}
|
}
|
|
|