libpthread version bump
Peter Wemm
peter at wemm.org
Fri Apr 22 14:29:22 PDT 2005
On Friday 22 April 2005 02:03 pm, Daniel Eischen wrote:
> On Fri, 22 Apr 2005, Peter Wemm wrote:
> > The only other idea that springs to mind is to use dlsym() to test
> > for the symbol, but that has its own serious problems. If the
> > pragma weak stuff works, then I'd be happy with that.
> >
> > The only gotcha is that we still have to test for the possibility
> > that the *base syscalls return EINVAL.. This will happen for
> > booting old kernel.old files, and I'm not sure that current is
> > quite robust enough yet that people aren't going to want to be able
> > to rewind a few months.
> >
> > So, the options are:
> > 1) test for have_gsbase using weak (or dlsym).
> > 2) As previously suggested, add implemenations to libc.so.5 and
> > pick them up via a fresh compat5x. We can add an implementation to
> > libc.so.5. Since they wouldn't be used on 5.x, there is no risk of
> > breaking anything. The functions would only do something when
> > running the libc.so.5 library with a 5.x application on 6.x.
> >
> > I have a slight preference for #2, but that would mean adding two
> > tiny (but otherwise unused) libc.so functions very late in the
> > cycle. If re@ would allow it, I'd like that. But the #pragma weak
> > option also works for me.
> >
> > #2 can also make it a little easier to run 5.x i386 binaries on
> > amd64 - we could kill of most of those nasty ifdefs.
> >
> > #1 would end up something like:
> > #pragma weak i386_set_gsbase
> > #pragma weak i386_get_gsbase
> > static void (*have_get_gsbase)(void) = i386_get_gsbase;
> > static void (*have_set_gsbase)(void *) = i386_set_gsbase;
> > if (have_i386_get_gsbase == NULL || have_get_gsbase() == -1) {
> > use_ldt();
> > } else {
> > use_gsbase();
> > }
> > I think that is sufficient to test if the symbols are present and
> > test if they work at runtime...
>
> I worked up a quick patch. It compiles, but it will be some time
> before I can try it.
>
> http://people.freebsd.org/~deischen/kse/libpthread.diffs
I think this will work. If somebody would like to try this, I think it
would be a good thing. (rebuild libpthread.so.0, and run a 5.x
threaded binary that would normally have the undefined symbols)
--
Peter Wemm - peter at wemm.org; peter at FreeBSD.org; peter at yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5
More information about the freebsd-arch
mailing list