mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
scripts: add x86 64 bit support to the markup_oops.pl script
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
parent
c19ef7fd8e
commit
11df65c3c6
1 changed files with 55 additions and 4 deletions
|
@ -1,4 +1,4 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl
|
||||||
|
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ my $filename = $vmlinux_name;
|
||||||
my $target = "0";
|
my $target = "0";
|
||||||
my $function;
|
my $function;
|
||||||
my $module = "";
|
my $module = "";
|
||||||
my $func_offset;
|
my $func_offset = 0;
|
||||||
my $vmaoffset = 0;
|
my $vmaoffset = 0;
|
||||||
|
|
||||||
my %regs;
|
my %regs;
|
||||||
|
@ -49,6 +49,39 @@ sub parse_x86_regs
|
||||||
$regs{"%edi"} = $2;
|
$regs{"%edi"} = $2;
|
||||||
$regs{"%esp"} = $4;
|
$regs{"%esp"} = $4;
|
||||||
}
|
}
|
||||||
|
if ($line =~ /RAX: ([0-9a-f]+) RBX: ([0-9a-f]+) RCX: ([0-9a-f]+)/) {
|
||||||
|
$regs{"%eax"} = $1;
|
||||||
|
$regs{"%ebx"} = $2;
|
||||||
|
$regs{"%ecx"} = $3;
|
||||||
|
}
|
||||||
|
if ($line =~ /RDX: ([0-9a-f]+) RSI: ([0-9a-f]+) RDI: ([0-9a-f]+)/) {
|
||||||
|
$regs{"%edx"} = $1;
|
||||||
|
$regs{"%esi"} = $2;
|
||||||
|
$regs{"%edi"} = $3;
|
||||||
|
}
|
||||||
|
if ($line =~ /RBP: ([0-9a-f]+) R08: ([0-9a-f]+) R09: ([0-9a-f]+)/) {
|
||||||
|
$regs{"%r08"} = $2;
|
||||||
|
$regs{"%r09"} = $3;
|
||||||
|
}
|
||||||
|
if ($line =~ /R10: ([0-9a-f]+) R11: ([0-9a-f]+) R12: ([0-9a-f]+)/) {
|
||||||
|
$regs{"%r10"} = $1;
|
||||||
|
$regs{"%r11"} = $2;
|
||||||
|
$regs{"%r12"} = $3;
|
||||||
|
}
|
||||||
|
if ($line =~ /R13: ([0-9a-f]+) R14: ([0-9a-f]+) R15: ([0-9a-f]+)/) {
|
||||||
|
$regs{"%r13"} = $1;
|
||||||
|
$regs{"%r14"} = $2;
|
||||||
|
$regs{"%r15"} = $3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub reg_name
|
||||||
|
{
|
||||||
|
my ($reg) = @_;
|
||||||
|
$reg =~ s/r(.)x/e\1x/;
|
||||||
|
$reg =~ s/r(.)i/e\1i/;
|
||||||
|
$reg =~ s/r(.)p/e\1p/;
|
||||||
|
return $reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_x86_regs
|
sub process_x86_regs
|
||||||
|
@ -83,10 +116,18 @@ sub process_x86_regs
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach $reg (keys(%regs)) {
|
foreach $reg (keys(%regs)) {
|
||||||
|
my $clobberprime = reg_name($clobber);
|
||||||
|
my $lastwordprime = reg_name($lastword);
|
||||||
my $val = $regs{$reg};
|
my $val = $regs{$reg};
|
||||||
|
if ($val =~ /^[0]+$/) {
|
||||||
|
$val = "0";
|
||||||
|
} else {
|
||||||
|
$val =~ s/^0*//;
|
||||||
|
}
|
||||||
|
|
||||||
# first check if we're clobbering this register; if we do
|
# first check if we're clobbering this register; if we do
|
||||||
# we print it with a =>, and then delete its value
|
# we print it with a =>, and then delete its value
|
||||||
if ($clobber =~ /$reg/) {
|
if ($clobber =~ /$reg/ || $clobberprime =~ /$reg/) {
|
||||||
if (length($val) > 0) {
|
if (length($val) > 0) {
|
||||||
$str = $str . " $reg => $val ";
|
$str = $str . " $reg => $val ";
|
||||||
}
|
}
|
||||||
|
@ -94,7 +135,7 @@ sub process_x86_regs
|
||||||
$val = "";
|
$val = "";
|
||||||
}
|
}
|
||||||
# now check if we're reading this register
|
# now check if we're reading this register
|
||||||
if ($lastword =~ /$reg/) {
|
if ($lastword =~ /$reg/ || $lastwordprime =~ /$reg/) {
|
||||||
if (length($val) > 0) {
|
if (length($val) > 0) {
|
||||||
$str = $str . " $reg = $val ";
|
$str = $str . " $reg = $val ";
|
||||||
}
|
}
|
||||||
|
@ -109,15 +150,25 @@ while (<STDIN>) {
|
||||||
if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) {
|
if ($line =~ /EIP: 0060:\[\<([a-z0-9]+)\>\]/) {
|
||||||
$target = $1;
|
$target = $1;
|
||||||
}
|
}
|
||||||
|
if ($line =~ /RIP: 0010:\[\<([a-z0-9]+)\>\]/) {
|
||||||
|
$target = $1;
|
||||||
|
}
|
||||||
if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) {
|
if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) {
|
||||||
$function = $1;
|
$function = $1;
|
||||||
$func_offset = $2;
|
$func_offset = $2;
|
||||||
}
|
}
|
||||||
|
if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]/) {
|
||||||
|
$function = $1;
|
||||||
|
$func_offset = $2;
|
||||||
|
}
|
||||||
|
|
||||||
# check if it's a module
|
# check if it's a module
|
||||||
if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) {
|
if ($line =~ /EIP is at ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) {
|
||||||
$module = $3;
|
$module = $3;
|
||||||
}
|
}
|
||||||
|
if ($line =~ /RIP: 0010:\[\<[0-9a-f]+\>\] \[\<[0-9a-f]+\>\] ([a-zA-Z0-9\_]+)\+(0x[0-9a-f]+)\/0x[a-f0-9]+\W\[([a-zA-Z0-9\_\-]+)\]/) {
|
||||||
|
$module = $3;
|
||||||
|
}
|
||||||
parse_x86_regs($line);
|
parse_x86_regs($line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue