This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: ppc64 vDSO in mainline
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Steve Munroe <sjmunroe at us dot ibm dot com>
- Cc: Alan Modra <amodra at bigpond dot net dot au>, Benjamin Herrenschmidt <benh at kernel dot crashing dot org>, Ulrich Drepper <drepper at redhat dot com>, libc-alpha at sources dot redhat dot com, Roland McGrath <roland at redhat dot com>
- Date: Tue, 29 Mar 2005 11:07:30 -0500
- Subject: Re: ppc64 vDSO in mainline
- References: <20050329052345.GO4961@sunsite.mff.cuni.cz> <OFBADB01C1.76483493-ON86256FD3.00557AB6-86256FD3.00569607@us.ibm.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Tue, Mar 29, 2005 at 09:45:40AM -0600, Steve Munroe wrote:
> It sounds like randomization (independent of VDSO) invalidates prelink!
Yes, randomization and prelink don't work together.
The current state of things at least is that PIEs are randomized and the
dynamic linker doesn't honor the preferred addresses of shared libraries
by default (can be overridden with LD_USE_LOAD_BIAS env var unless
setuid/setgid), while for normal binaries the default is to use the
preferred addresses if the libraries are prelinked and thus prelink
works for non-PIEs.
> Nothing I proposed implies that prelinking has to be disabled, only that
> prelinking has to exclude VDSO (VDSO symbols).
It is not possible to selectively exclude some symbols from prelinking.
All prelink can do is to choose whether a relocation can be resolved
at prelink time or must be fixed up at runtime.
But stuff that is fixed up at runtime means just writing precomputed
values to precomputed locations, so adjusting for vDSO base changes
(or changes due to booting a different kernel) is not going to work there.
BTW, there is already a mechanism for processor optimized routines,
you just do another glibc build targetting that particular CPU
and install into /lib*/<platform>/ instead of /lib*/, on IA-32
e.g. /lib/i{386,486,586,686,686/sse2} etc.
Jakub