On Thu, Jun 12, 2014 at 10:39 PM, H. Peter Anvin <hpa@xxxxxxxxx> wrote:
On 06/12/2014 09:36 PM, Andy Lutomirski wrote:
1. Parsing the vDSO is a PITA. What if we bundled the reference
parser inside the vdso? Concretely, we could have AT_VDSO_FINDENTRY
point to a function like:
void *vdso_find_entry(const char *name, const char *version)
Then things like Go and maybe even musl (and klibc?) could just call
that function. And we'd never have to worry about maintaining
compatibility with more and more weird vdso parsers.
Implementing this could be as simple as shoving parse_vdso.c into the
vdso, although vdso2c could help and allow a really simple in-vdso
implementation.
I'm not really sure how much of a win that is... you have to parse
*something*, and for the vast majority of all implementations there will
be a dynamic linker just sitting there, and that is what it *does*.
I'm only aware of two implementations that work like that: glibc and
musl. AFAIK neither one even tries to use the vdso when statically
linked. IIRC, Bionic doesn't support the vdso at all, and Go has the
present issue.