linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Add options to markup_oops.pl to make it support  cross-compiler environment better
@ 2010-01-17 13:38 Hui Zhu
  2010-01-23  1:26 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Hui Zhu @ 2010-01-17 13:38 UTC (permalink / raw)
  To: Andrew Morton, Arjan van de Ven, Sam Ravnborg,
	Ozan Çaglayan, Matthew Wilcox, linux-kernel

Hello,

The markup_oops.pl have 2 troubles to support cross-compiler environment:
1.  It use objdump directly.
2.  It use modinfo to get the message of module.

This patch add 2 options to markup_oops.pl:
1. -c CROSS_COMPILE	Specify the prefix used for toolchain.
2. -m MODULE_DIRNAME	Specify the module directory name.

After this patch, parse the x8664 oops in x86, we can:
cat amd64m | perl ~/kernel/tmp/m.pl -c
/home/teawater/kernel/bin/x8664- -m ./e.ko vmlinux

Thanks,
Hui

Signed-off-by: Hui Zhu <teawater@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Arjan van de Ven <arjan@linux.intel.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Ozan Çaglayan <ozan@pardus.org.tr>
Cc: Matthew Wilcox <willy@linux.intel.com>

---
 scripts/markup_oops.pl |   67 +++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 59 insertions(+), 8 deletions(-)

--- a/scripts/markup_oops.pl
+++ b/scripts/markup_oops.pl
@@ -15,8 +15,46 @@ use Math::BigInt;
 # 	Arjan van de Ven <arjan@linux.intel.com>


-my $vmlinux_name = $ARGV[0];
-if (!defined($vmlinux_name)) {
+my $cross_compile = "";
+my $vmlinux_name = "";
+my $modulefile = "";
+
+# Get options
+my $option = 0;
+for (my $i = 0; $i <= $#ARGV; $i++) {
+	if ($option == 0) {
+		if ($ARGV[$i] eq "-c") {
+			$option = 1;
+		}
+		elsif ($ARGV[$i] eq "-m") {
+			$option = 2;
+		}
+		elsif ($ARGV[$i] eq "-h") {
+			usage();
+			exit;
+		}
+		elsif ($i == $#ARGV) {
+			$vmlinux_name = $ARGV[$i];
+		}
+		else {
+			usage();
+			exit;
+		}
+	}
+	elsif ($option == 1) {
+		$cross_compile = $ARGV[$i];
+		$option = 0;
+	}
+	elsif ($option == 2) {
+		$modulefile = $ARGV[$i];
+		$option = 0;
+	}
+}
+
+if ($vmlinux_name ne "") {
+	$vmlinux_name = $ARGV[$#ARGV];
+}
+else {
 	my $kerver = `uname -r`;
 	chomp($kerver);
 	$vmlinux_name = "/lib/modules/$kerver/build/vmlinux";
@@ -177,22 +215,23 @@ my $decodestart = Math::BigInt->from_hex
 my $decodestop = Math::BigInt->from_hex("0x$target") + 8192;
 if ($target eq "0") {
 	print "No oops found!\n";
-	print "Usage: \n";
-	print "    dmesg | perl scripts/markup_oops.pl vmlinux\n";
+	usage();
 	exit;
 }

 # if it's a module, we need to find the .ko file and calculate a load offset
 if ($module ne "") {
-	my $modulefile = `modinfo $module | grep '^filename:' | awk '{ print \$2 }'`;
-	chomp($modulefile);
+	if ($modulefile eq "") {
+		my $modulefile = `modinfo $module | grep '^filename:' | awk '{ print \$2 }'`;
+		chomp($modulefile);
+	}
 	$filename = $modulefile;
 	if ($filename eq "") {
 		print "Module .ko file for $module not found. Aborting\n";
 		exit;
 	}
 	# ok so we found the module, now we need to calculate the vma offset
-	open(FILE, "objdump -dS $filename |") || die "Cannot start objdump";
+	open(FILE, $cross_compile."objdump -dS $filename |") || die "Cannot
start objdump";
 	while (<FILE>) {
 		if ($_ =~ /^([0-9a-f]+) \<$function\>\:/) {
 			my $fu = $1;
@@ -225,7 +264,7 @@ sub InRange {
 # first, parse the input into the lines array, but to keep size down,
 # we only do this for 4Kb around the sweet spot

-open(FILE, "objdump -dS --adjust-vma=$vmaoffset
--start-address=$decodestart --stop-address=$decodestop $filename |")
|| die "Cannot start objdump";
+open(FILE, $cross_compile."objdump -dS --adjust-vma=$vmaoffset
--start-address=$decodestart --stop-address=$decodestop $filename |")
|| die "Cannot start objdump";

 while (<FILE>) {
 	my $line = $_;
@@ -345,3 +384,15 @@ while ($i < $finish) {
 	$i = $i +1;
 }

+sub usage {
+    print <<EOT;
+Usage:
+  dmesg | perl $0 [OPTION] [VMLINUX]
+
+OPTION:
+  -c CROSS_COMPILE	Specify the prefix used for toolchain.
+  -m MODULE_DIRNAME	Specify the module directory name.
+  -h			Help
+EOT
+}
+

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Add options to markup_oops.pl to make it support  cross-compiler environment better
  2010-01-17 13:38 [PATCH] Add options to markup_oops.pl to make it support cross-compiler environment better Hui Zhu
@ 2010-01-23  1:26 ` Andrew Morton
  2010-01-25  7:39   ` Hui Zhu
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2010-01-23  1:26 UTC (permalink / raw)
  To: Hui Zhu
  Cc: Arjan van de Ven, Sam Ravnborg, Ozan Çaglayan,
	Matthew Wilcox, linux-kernel

On Sun, 17 Jan 2010 21:38:28 +0800
Hui Zhu <teawater@gmail.com> wrote:

> Hello,
> 
> The markup_oops.pl have 2 troubles to support cross-compiler environment:
> 1.  It use objdump directly.
> 2.  It use modinfo to get the message of module.
> 
> This patch add 2 options to markup_oops.pl:
> 1. -c CROSS_COMPILE	Specify the prefix used for toolchain.
> 2. -m MODULE_DIRNAME	Specify the module directory name.
> 
> After this patch, parse the x8664 oops in x86, we can:
> cat amd64m | perl ~/kernel/tmp/m.pl -c
> /home/teawater/kernel/bin/x8664- -m ./e.ko vmlinux
> 

The other patches are wordwrapped and one still didn't apply after
fixing that, so please just redo and resend everything.  Send them to
yourself first and check that the result still applies OK.


Also, we prefer patch titles to be of the form

	subsystem-identifier: what was changed

so a good title for this patch would have been

	markup_oops.pl: add options to improve cross-sompilation environments


Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Add options to markup_oops.pl to make it support  cross-compiler environment better
  2010-01-23  1:26 ` Andrew Morton
@ 2010-01-25  7:39   ` Hui Zhu
  0 siblings, 0 replies; 3+ messages in thread
From: Hui Zhu @ 2010-01-25  7:39 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Arjan van de Ven, Sam Ravnborg, Ozan Çaglayan,
	Matthew Wilcox, linux-kernel

On Sat, Jan 23, 2010 at 09:26, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Sun, 17 Jan 2010 21:38:28 +0800
> Hui Zhu <teawater@gmail.com> wrote:
>
>> Hello,
>>
>> The markup_oops.pl have 2 troubles to support cross-compiler environment:
>> 1.  It use objdump directly.
>> 2.  It use modinfo to get the message of module.
>>
>> This patch add 2 options to markup_oops.pl:
>> 1. -c CROSS_COMPILE   Specify the prefix used for toolchain.
>> 2. -m MODULE_DIRNAME  Specify the module directory name.
>>
>> After this patch, parse the x8664 oops in x86, we can:
>> cat amd64m | perl ~/kernel/tmp/m.pl -c
>> /home/teawater/kernel/bin/x8664- -m ./e.ko vmlinux
>>
>
> The other patches are wordwrapped and one still didn't apply after
> fixing that, so please just redo and resend everything.  Send them to
> yourself first and check that the result still applies OK.
>
>
> Also, we prefer patch titles to be of the form
>
>        subsystem-identifier: what was changed
>
> so a good title for this patch would have been
>
>        markup_oops.pl: add options to improve cross-sompilation environments
>

Thanks Andrew.  I will post a new mail according to your mail.

Best regards,
Hui

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-01-25  7:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-17 13:38 [PATCH] Add options to markup_oops.pl to make it support cross-compiler environment better Hui Zhu
2010-01-23  1:26 ` Andrew Morton
2010-01-25  7:39   ` Hui Zhu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).