Re: DEV300_m96: rtld difference on FreeBSD
Maho NAKATA <[email protected]> Mon, 31 Jan 2011 09:13:32 +0900 (JST)
| Newsgroups | gmane.comp.openoffice.devel.porting |
|---|---|
| Message-ID | <[email protected]> |
Forward to dev@porting list From: Konstantin Belousov <[email protected]> Subject: Re: [porting-dev] DEV300_m96: rtld difference on FreeBSD Date: Sun, 30 Jan 2011 12:16:54 +0200 > On Sun, Jan 30, 2011 at 04:09:53PM +0900, Maho NAKATA wrote: >> Hi Kostik Belousov, >> I found a small difference of rtld behavior between Linux and FreeBSD. >> >> > libexec/rtld-elf/rtld.c: _rtld_error("%s: Unexpected inconsistency: dependency %s not found", >> >> ldd fails like that on FreeBSD, >> > # cd basegfx/unxfbsdi.pro/lib ; ldd ./libbasegfxfi.so >> > ./libbasegfxfi.so: >> > /libexec/ld-elf.so.1: ./libbasegfxfi.so: Unexpected inconsistency: dependency libuno_sal.so.3 not found >> > ./libbasegfxfi.so: exit status 1 >> >> but on Linux >> >> > maho@:~/DEV300_m96/basegfx/unxlngi6.pro/lib$ ldd ./libbasegfxli.so >> > linux-gate.so.1 => (0x0040d000) >> > libuno_sal.so.3 => not found >> > libuno_cppuhelpergcc3.so.3 => not found >> > libuno_cppu.so.3 => not found >> > libstlport_gcc.so => not found >> > libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00542000) >> > libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00b77000) >> > libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00d8b000) >> > libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x008d5000) >> > /lib/ld-linux.so.2 (0x00e4b000) >> . >> >> Is it a correct behavior? Just i'm not sure ... > Definitely not. Patch below fixed it for me. > > diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c > index 11ef847..241d617 100644 > --- a/libexec/rtld-elf/rtld.c > +++ b/libexec/rtld-elf/rtld.c > @@ -3709,6 +3709,8 @@ locate_dependency(const Obj_Entry *obj, const char *name) > if (object_match_name(needed->obj, name)) > return needed->obj; > } > + if (ld_tracing != NULL) > + return (NULL); > _rtld_error("%s: Unexpected inconsistency: dependency %s not found", > obj->path, name); > die(); > @@ -3833,6 +3835,8 @@ rtld_verify_object_versions(Obj_Entry *obj) > vn = obj->verneed; > while (vn != NULL) { > depobj = locate_dependency(obj, obj->strtab + vn->vn_file); > + if (depobj == NULL) > + return (-1); > vna = (const Elf_Vernaux *) ((char *)vn + vn->vn_aux); > for (;;) { > if (check_object_provided_version(obj, depobj, vna))