[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 64bits & df



Ok, found the sparc64 glibc relocation problem.

sysdeps/sparc/sparc64/elf/configure.in has a test for broken
relocation handling, it looks like this:

# Check for broken WDISP22 in the linker.
AC_CACHE_CHECK(for sparc64 ld WDISP22 handling, libc_cv_sparc64_wdisp22, [dnl
echo 'bne foo; nop' > conftest1.s
echo '.globl foo; .hidden foo; foo: nop' > conftest2.s
libc_cv_sparc64_wdisp22=unknown
if AC_TRY_COMMAND(${CC-cc} -nostdlib -shared $CFLAGS conftest1.s conftest2.s -o conftest.so 1>&AS_MESSAGE_LOG_FD); then
  if readelf -r conftest.so | grep -q R_SPARC_WDISP22; then
    libc_cv_sparc64_wdisp22=broken
  else
    libc_cv_sparc64_wdisp22=ok
  fi
fi
rm -f conftest*])
if test $libc_cv_sparc64_wdisp22 != ok; then
  AC_DEFINE(BROKEN_SPARC_WDISP22)
fi

For some reason this test passes and the sparc64 glibc build thinks
BROKEN_SPARC_WDISP22 does not need to be defined.  However, we end
up with one of these bogus relocations when building the shared version
of "linuxthreads/sysdeps/unix/sysv/sparc/sparc64/vfork.S".

A quick workaround, until the true cause is discovered, would be to
force BROKEN_SPARC_WDISP22 for the Debian sparc64 glibc builds.

When I run this testcase by hand, .... wait, that's the problem likely.
It uses "gcc-3.3" as CC which doesn't have all of the "uname -m" output logic
the /usr/bin/gcc script written by Ben has.  If the configure test above
is run without an explicit "-m64" it will create a 32-bit shared object
for the test case.  On sparc32 the test does pass properly, on sparc64
it does not.



Reply to: