s390 gas bug

Jakub Jelinek jakub@redhat.com
Tue Oct 2 05:15:00 GMT 2001


Hi!

s390 fails several tests in prelink testsuite, because it IMHO optimizes too
much something which it should not optimize. For code like:

int f1 (void)
{
  return 1;
}

int f2 (void)
{
  return f1 () + 1;
}

(the interesting assembly part is:
.globl f1
        .type    f1,@function
...
.LT1_0:
.LC0:
        .long   f1@PLT-.LT1_0
...
)

it doesn't create an R_390_PLT32 relocation and instead hardcodes address of
f1 above it. For static int f1 (void) { return 1; } this would be right, but
as f1 is global symbol, it should be possible to override f1 at runtime
(that's exactly what prelink test does and checks whether prelinking creates
the expected conflict fixup). When I split the above into 2 C source files,
one per function, prelinking passes the parts of the testsuite which don't
fail because of kernel bug.
Do you agree this is a bug?

	Jakub



More information about the Binutils mailing list