2005-09-19 21:06:54

by Ben Dooks

[permalink] [raw]
Subject: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

The scripts for `make buildcheck` are executing
objdump straight, which is wrong if the system
is using `make CROSS_COMPILE=....`.

Change the scripts to use $OBJDUMP passed from
the Makefile's environment, so that the correct
objdump is used, and the symbols are printed
correctly

Signed-off-by: Ben Dooks <[email protected]>

diff -urN -X ../dontdiff linux-2.6.13-simtec1/scripts/reference_discarded.pl linux-2.6.13-simtec2/scripts/reference_discarded.pl
--- linux-2.6.13-simtec1/scripts/reference_discarded.pl 2005-09-06 12:28:18.000000000 +0100
+++ linux-2.6.13-simtec2/scripts/reference_discarded.pl 2005-09-19 22:02:07.000000000 +0100
@@ -18,7 +18,7 @@
$| = 1;

# printf("Finding objects, ");
-open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
+open(OBJDUMP_LIST, "find . -name '*.o' | xargs \$OBJDUMP -h |") || die "getting objdump list failed";
while (defined($line = <OBJDUMP_LIST>)) {
chomp($line);
if ($line =~ /:\s+file format/) {
@@ -74,7 +74,7 @@
$errorcount = 0;
foreach $object (keys(%object)) {
my $from;
- open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
+ open(OBJDUMP, "\$OBJDUMP -r $object|") || die "cannot objdump -r $object";
while (defined($line = <OBJDUMP>)) {
chomp($line);
if ($line =~ /RELOCATION RECORDS FOR /) {
diff -urN -X ../dontdiff linux-2.6.13-simtec1/scripts/reference_init.pl linux-2.6.13-simtec2/scripts/reference_init.pl
--- linux-2.6.13-simtec1/scripts/reference_init.pl 2005-09-06 12:28:18.000000000 +0100
+++ linux-2.6.13-simtec2/scripts/reference_init.pl 2005-09-19 22:00:52.000000000 +0100
@@ -26,7 +26,7 @@
$| = 1;

printf("Finding objects, ");
-open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
+open(OBJDUMP_LIST, "find . -name '*.o' | xargs \$OBJDUMP -h |") || die "getting objdump list failed";
while (defined($line = <OBJDUMP_LIST>)) {
chomp($line);
if ($line =~ /:\s+file format/) {
@@ -81,7 +81,7 @@
printf("Scanning objects\n");
foreach $object (sort(keys(%object))) {
my $from;
- open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
+ open(OBJDUMP, "\$OBJDUMP -r $object|") || die "cannot objdump -r $object";
while (defined($line = <OBJDUMP>)) {
chomp($line);
if ($line =~ /RELOCATION RECORDS FOR /) {


Attachments:
(No filename) (2.29 kB)
scripts-buildcheck-pass-objdump.patch (1.97 kB)
Download all attachments

2005-09-20 08:29:12

by Keith Owens

[permalink] [raw]
Subject: Re: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

On Mon, 19 Sep 2005 22:06:45 +0100,
Ben Dooks <[email protected]> wrote:
>The scripts for `make buildcheck` are executing
>objdump straight, which is wrong if the system
>is using `make CROSS_COMPILE=....`.
>
>Change the scripts to use $OBJDUMP passed from
>the Makefile's environment, so that the correct
>objdump is used, and the symbols are printed
>correctly

Those scripts are meant to work even when they are invoked by hand,
without OBJDUMP being defined in the environment. This is the correct
fix.

Signed-off-by: Keith Owens <[email protected]>

Index: linux/scripts/namespace.pl
===================================================================
--- linux.orig/scripts/namespace.pl 2005-08-29 09:41:01.000000000 +1000
+++ linux/scripts/namespace.pl 2005-09-20 18:25:12.124090186 +1000
@@ -67,11 +67,17 @@ use strict;
use File::Find;

my $nm = "/usr/bin/nm -p";
-my $objdump = "/usr/bin/objdump -s -j .comment";
my $srctree = "";
my $objtree = "";
$srctree = "$ENV{'srctree'}/" if (exists($ENV{'srctree'}));
$objtree = "$ENV{'objtree'}/" if (exists($ENV{'objtree'}));
+my $objdump;
+if (exists($ENV{'OBJDUMP'})) {
+ $objdump = $ENV{'OBJDUMP'};
+} else {
+ $objdump = 'objdump';
+}
+$objdump .= ' -s -j .comment';

if ($#ARGV != -1) {
print STDERR "usage: $0 takes no parameters\n";
Index: linux/scripts/reference_discarded.pl
===================================================================
--- linux.orig/scripts/reference_discarded.pl 2005-09-20 16:36:32.095627904 +1000
+++ linux/scripts/reference_discarded.pl 2005-09-20 18:22:00.117517858 +1000
@@ -14,11 +14,17 @@ my $object;
my $line;
my $ignore;
my $errorcount;
+my $objdump;
+if (exists($ENV{'OBJDUMP'})) {
+ $objdump = $ENV{'OBJDUMP'};
+} else {
+ $objdump = 'objdump';
+}

$| = 1;

# printf("Finding objects, ");
-open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
+open(OBJDUMP_LIST, "find . -name '*.o' | xargs $objdump -h |") || die "getting objdump list failed";
while (defined($line = <OBJDUMP_LIST>)) {
chomp($line);
if ($line =~ /:\s+file format/) {
@@ -74,7 +80,7 @@ foreach $object (keys(%object)) {
$errorcount = 0;
foreach $object (keys(%object)) {
my $from;
- open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
+ open(OBJDUMP, "$objdump -r $object|") || die "cannot objdump -r $object";
while (defined($line = <OBJDUMP>)) {
chomp($line);
if ($line =~ /RELOCATION RECORDS FOR /) {
Index: linux/scripts/reference_init.pl
===================================================================
--- linux.orig/scripts/reference_init.pl 2005-09-20 16:36:32.095627904 +1000
+++ linux/scripts/reference_init.pl 2005-09-20 18:24:14.060854489 +1000
@@ -22,11 +22,17 @@ my %object;
my $object;
my $line;
my $ignore;
+my $objdump;
+if (exists($ENV{'OBJDUMP'})) {
+ $objdump = $ENV{'OBJDUMP'};
+} else {
+ $objdump = 'objdump';
+}

$| = 1;

printf("Finding objects, ");
-open(OBJDUMP_LIST, "find . -name '*.o' | xargs objdump -h |") || die "getting objdump list failed";
+open(OBJDUMP_LIST, "find . -name '*.o' | xargs $objdump -h |") || die "getting objdump list failed";
while (defined($line = <OBJDUMP_LIST>)) {
chomp($line);
if ($line =~ /:\s+file format/) {
@@ -81,7 +87,7 @@ printf("ignoring %d conglomerate(s)\n",
printf("Scanning objects\n");
foreach $object (sort(keys(%object))) {
my $from;
- open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
+ open(OBJDUMP, "$objdump -r $object|") || die "cannot objdump -r $object";
while (defined($line = <OBJDUMP>)) {
chomp($line);
if ($line =~ /RELOCATION RECORDS FOR /) {

2005-09-20 14:40:58

by Ben Dooks

[permalink] [raw]
Subject: Re: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

On Tue, Sep 20, 2005 at 06:28:49PM +1000, Keith Owens wrote:
> On Mon, 19 Sep 2005 22:06:45 +0100,
> Ben Dooks <[email protected]> wrote:
> >The scripts for `make buildcheck` are executing
> >objdump straight, which is wrong if the system
> >is using `make CROSS_COMPILE=....`.
> >
> >Change the scripts to use $OBJDUMP passed from
> >the Makefile's environment, so that the correct
> >objdump is used, and the symbols are printed
> >correctly
>
> Those scripts are meant to work even when they are invoked by hand,
> without OBJDUMP being defined in the environment. This is the correct
> fix.
>
> Signed-off-by: Keith Owens <[email protected]>

Ok, that seems to have fixed the problems, thanks.

Acked-by: Ben Dooks <[email protected]>

--
Ben ([email protected], http://www.fluff.org/)

'a smiley only costs 4 bytes'

2005-09-20 16:55:34

by Bodo Eggert

[permalink] [raw]
Subject: Re: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

Keith Owens <[email protected]> wrote:

> +my $objdump;
> +if (exists($ENV{'OBJDUMP'})) {
> + $objdump = $ENV{'OBJDUMP'};

Having a typo in the environment shouldn't silently do something different
from what's requested. Use something like

my @objdump = ( (defined $ENV{'OBJDUMP'})? $ENV{'OBJDUMP'} :
"/usr/bin/objdump",
'-s', '-j');
> +} else {
> + $objdump = 'objdump';
> +}
> +$objdump .= ' -s -j .comment';

Having a space as the option delimiter will break if the path to objdump
contains a space. Therefore you'll need to use an array.

--
Ich danke GMX daf?r, die Verwendung meiner Adressen mittels per SPF
verbreiteten L?gen zu sabotieren.

2005-09-20 18:44:14

by Valdis Klētnieks

[permalink] [raw]
Subject: Re: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

On Tue, 20 Sep 2005 18:55:22 +0200, Bodo Eggert said:

> Having a space as the option delimiter will break if the path to objdump
> contains a space. Therefore you'll need to use an array.

No. You need to draw the line somewhere. You let them have a space in the
path, the next thing you know the'll be back asking why a UTF-8 encoded
non-breaking-white-space in the path doesn't work. :)


Attachments:
(No filename) (226.00 B)

2005-09-20 19:03:39

by Bodo Eggert

[permalink] [raw]
Subject: Re: [PATCH] scripts - use $OBJDUMP to get correct objdump (cross compile)

On Tue, 20 Sep 2005 [email protected] wrote:
> On Tue, 20 Sep 2005 18:55:22 +0200, Bodo Eggert said:

> > Having a space as the option delimiter will break if the path to objdump
> > contains a space. Therefore you'll need to use an array.
>
> No. You need to draw the line somewhere. You let them have a space in the
> path, the next thing you know the'll be back asking why a UTF-8 encoded
> non-breaking-white-space in the path doesn't work. :)

Anything not containing '\0' SHOULD work on posix systems. Anything else
is a programming error.

--
I always tell customers/clients the same thing:
"Good, Fast, Cheap. You can pick two."
-- randem in <[email protected]>