Date: Fri, 22 Apr 2005 17:03:59 -0400 (EDT) From: Daniel Eischen <deischen@freebsd.org> To: Peter Wemm <peter@wemm.org> Cc: freebsd-arch@freebsd.org Subject: Re: libpthread version bump Message-ID: <Pine.GSO.4.43.0504221701470.24214-100000@sea.ntplx.net> In-Reply-To: <200504221357.31957.peter@wemm.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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 -- DE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.43.0504221701470.24214-100000>