Subject: Re: Support for relocation type 10 in ld.elf_so
To: Matt Thomas <matt@3am-software.com>
From: Allen Briggs <briggs@wasabisystems.com>
List: port-powerpc
Date: 06/15/2002 23:52:03
On Sat, Jun 15, 2002 at 08:38:12PM -0700, Matt Thomas wrote:
> >I was looking at PR pkg/13771 which complains that Apache's mod_perl is
> >not usable because:
> >
> ># apachectl configtest
> >Syntax error on line 1220 of /usr/pkg/etc/httpd/httpd.conf:
> >Cannot load /usr/pkg/lib/httpd/mod_perl.so into server:
> >/usr/pkg/lib/httpd/mod_perl.so: Unsupported relocation type 10 in non-PLT
> >relocations
>
> This tells me that the .so was compiled -fpic or -fPIC.
As far as I can tell, Apache, perl, libperl, and mod_perl are all
compiled -fPIC. If you have any suggestions on how to help track
down where the compilation problem is, I'd love to hear them.
Here's the oh-so-helpful ld.elf_so debugging information:
# apachectl start
[...]
added path "/usr/pkg/lib"
added path "/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE"
0x41b9c000 .. 0x41c31fff: /usr/pkg/lib/httpd/mod_perl.so
WARNING: /usr/pkg/lib/httpd/mod_perl.so has impure text
load by name libperl.so 0x0
Searching for "libperl.so" (0x418bfa00)
Trying "/usr/pkg/lib/libperl.so"
Trying "/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libperl.so"
added path "/usr/pkg/lib"
0x41c32000 .. 0x41d6ffff:
/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libperl.so
load by name libm.so.0 0x0
Searching for "libm.so.0" (0x418bfa00)
Trying "/usr/pkg/lib/libm.so.0"
Trying "/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libm.so.0"
Trying "/usr/lib/libm.so.0"
added path "/usr/lib"
0x41d70000 .. 0x41dcffff: /usr/lib/libm.so.0
load by name libcrypt.so.0 0x0
Searching for "libcrypt.so.0" (0x418bfa00)
Trying "/usr/pkg/lib/libcrypt.so.0"
Trying "/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libcrypt.so.0"
Trying "/usr/lib/libcrypt.so.0"
Syntax error on line 1238 of /usr/pkg/etc/httpd/httpd.conf:
Cannot load /usr/pkg/lib/httpd/mod_perl.so into server: /usr/pkg/lib/httpd/mod_perl.so: Unsupported relocation type 10 in non-PLT relocations
rtld_exit()
/usr/pkg/sbin/apachectl start: httpd could not be started
# ldd /usr/pkg/sbin/httpd
/usr/pkg/sbin/httpd:
-lcrypt.0 => /usr/lib/libcrypt.so.0
-lmm.11 => /usr/pkg/lib/libmm.so.11
-lexpat.1 => /usr/pkg/lib/libexpat.so.1
-lc.12 => /usr/lib/libc.so.12
# ldd /usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libperl.so
/usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libperl.so:
# ldd /usr/pkg/lib/httpd/mod_perl.so
/usr/pkg/lib/httpd/mod_perl.so:
-lperl => /usr/pkg/lib/perl5/5.6.1/powerpc-netbsd/CORE/libperl.so
-lm.0 => /usr/lib/libm.so.0
-lcrypt.0 => /usr/lib/libcrypt.so.0
This was freshly built from a -current pkgsrc on a fresh 1.5.3
installation.
Granted, WARNING: /usr/pkg/lib/httpd/mod_perl.so has impure text
looks a bit interesting, but I'm not sure how one fixes that.
> >I'm not sure how we're getting the R_PPC_REL24 relocations in
> >mod_perl.so, but that's really kind of unacceptable behavior.
> >Todd V. mentioned that, well, ld.elf_so could always be taught
> >about this relocation type, and I think the following patch
> >does this.
>
> I disagree. If you are shared libraries and compiling PIC, bad things
> will happen.
That's kind of what I thought, but it wasn't clear where the error
was in this case. There should probably be some better way to track
this down. It works on x86, of course...
-allen
--
Allen Briggs briggs@wasabisystems.com
http://www.wasabisystems.com/ Quality NetBSD CDs, Sales, Support, Service
NetBSD development for Alpha, ARM, M68K, MIPS, PowerPC, SuperH, XScale, etc...