2006-01-06 07:40:22

by Dave Jones

[permalink] [raw]
Subject: reference_discarded addition

Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text

Been carrying this for some time in Red Hat trees.

Signed-off-by: Dave Jones <[email protected]>

diff -urNp --exclude-from=/home/davej/.exclude linux-3022/scripts/reference_discarded.pl linux-10000/scripts/reference_discarded.pl
--- linux-3022/scripts/reference_discarded.pl
+++ linux-10000/scripts/reference_discarded.pl
@@ -88,6 +88,7 @@ foreach $object (keys(%object)) {
($from !~ /\.text\.exit$/ &&
$from !~ /\.exit\.text$/ &&
$from !~ /\.data\.exit$/ &&
+ $from !~ /\.opd$/ &&
$from !~ /\.exit\.data$/ &&
$from !~ /\.altinstructions$/ &&
$from !~ /\.pdr$/ &&


2006-01-08 01:52:39

by Keith Owens

[permalink] [raw]
Subject: Re: reference_discarded addition

Dave Jones (on Fri, 6 Jan 2006 02:40:19 -0500) wrote:
>Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text
>
>Been carrying this for some time in Red Hat trees.
>
>Signed-off-by: Dave Jones <[email protected]>
>
>diff -urNp --exclude-from=/home/davej/.exclude linux-3022/scripts/reference_discarded.pl linux-10000/scripts/reference_discarded.pl
>--- linux-3022/scripts/reference_discarded.pl
>+++ linux-10000/scripts/reference_discarded.pl
>@@ -88,6 +88,7 @@ foreach $object (keys(%object)) {
> ($from !~ /\.text\.exit$/ &&
> $from !~ /\.exit\.text$/ &&
> $from !~ /\.data\.exit$/ &&
>+ $from !~ /\.opd$/ &&
> $from !~ /\.exit\.data$/ &&
> $from !~ /\.altinstructions$/ &&
> $from !~ /\.pdr$/ &&

For our future {in}sanity, add a comment that this is the ppc .opd
section, not the ia64 .opd section. ia64 .opd should not point to
discarded sections.

Any idea why ppc .opd points to discarded sections when ia64 does not?
AFAICT no ia64 object has a useful .opd section, they are all empty or
(sometimes) a dummy entry which is 1 byte long. ia64 .opd data is
built at link time, not compile time.

It is a pity that ppc is generating .opd entries at compile time. It
makes it impossible to detect a real reference to a discarded function.

2006-01-08 17:59:50

by Sam Ravnborg

[permalink] [raw]
Subject: Re: reference_discarded addition

On Sun, Jan 08, 2006 at 12:52:35PM +1100, Keith Owens wrote:
> Dave Jones (on Fri, 6 Jan 2006 02:40:19 -0500) wrote:
> >Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text
> >
> >Been carrying this for some time in Red Hat trees.
> >
> >Signed-off-by: Dave Jones <[email protected]>
> >
> >diff -urNp --exclude-from=/home/davej/.exclude linux-3022/scripts/reference_discarded.pl linux-10000/scripts/reference_discarded.pl
> >--- linux-3022/scripts/reference_discarded.pl
> >+++ linux-10000/scripts/reference_discarded.pl
> >@@ -88,6 +88,7 @@ foreach $object (keys(%object)) {
> > ($from !~ /\.text\.exit$/ &&
> > $from !~ /\.exit\.text$/ &&
> > $from !~ /\.data\.exit$/ &&
> >+ $from !~ /\.opd$/ &&
> > $from !~ /\.exit\.data$/ &&
> > $from !~ /\.altinstructions$/ &&
> > $from !~ /\.pdr$/ &&
>
> For our future {in}sanity, add a comment that this is the ppc .opd
> section, not the ia64 .opd section. ia64 .opd should not point to
> discarded sections.
>
> Any idea why ppc .opd points to discarded sections when ia64 does not?
> AFAICT no ia64 object has a useful .opd section, they are all empty or
> (sometimes) a dummy entry which is 1 byte long. ia64 .opd data is
> built at link time, not compile time.
>
> It is a pity that ppc is generating .opd entries at compile time. It
> makes it impossible to detect a real reference to a discarded function.

Thanks for the comments Keith.
I have applied the following:


diff-tree 442ce844e139c1e3c23e8b4df13468041ae35721 (from 50aa88e2877f1375ba79d1be7a0ff4aa563741c7)
Author: Dave Jones <[email protected]>
Date: Fri Jan 6 02:40:19 2006 -0500

kbuild: reference_discarded addition

Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text

Been carrying this for some time in Red Hat trees.

Keith Ownes <[email protected]> commented:
For our future {in}sanity, add a comment that this is the ppc .opd
section, not the ia64 .opd section. ia64 .opd should not point to
discarded sections.

Any idea why ppc .opd points to discarded sections when ia64 does not?
AFAICT no ia64 object has a useful .opd section, they are all empty or
(sometimes) a dummy entry which is 1 byte long. ia64 .opd data is
built at link time, not compile time.

Signed-off-by: Dave Jones <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>

diff --git a/scripts/reference_discarded.pl b/scripts/reference_discarded.pl
index c2d5414..4ee6ab2 100644
--- a/scripts/reference_discarded.pl
+++ b/scripts/reference_discarded.pl
@@ -69,10 +69,15 @@ foreach $object (keys(%object)) {
}
}
# printf("ignoring %d conglomerate(s)\n", $ignore);

# printf("Scanning objects\n");
+
+# Keith Ownes <[email protected]> commented:
+# For our future {in}sanity, add a comment that this is the ppc .opd
+# section, not the ia64 .opd section.
+# ia64 .opd should not point to discarded sections.
$errorcount = 0;
foreach $object (keys(%object)) {
my $from;
open(OBJDUMP, "objdump -r $object|") || die "cannot objdump -r $object";
while (defined($line = <OBJDUMP>)) {
@@ -86,10 +91,11 @@ foreach $object (keys(%object)) {
$line =~ /\.exit\.data$/ ||
$line =~ /\.exitcall\.exit$/) &&
($from !~ /\.text\.exit$/ &&
$from !~ /\.exit\.text$/ &&
$from !~ /\.data\.exit$/ &&
+ $from !~ /\.opd$/ &&
$from !~ /\.exit\.data$/ &&
$from !~ /\.altinstructions$/ &&
$from !~ /\.pdr$/ &&
$from !~ /\.debug_.*$/ &&
$from !~ /\.exitcall\.exit$/ &&