Re: vdso feature requests from the Go people

From: Stijn Volckaert
Date: Sun Jun 15 2014 - 06:16:23 EST


Andy Lutomirski schreef op 13/06/2014 17:34:
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.

Glibc DOES use the VDSO even when it's statically linked. It uses the AT_SYSINFO_EHDR it gets from the kernel to find the VDSO and it will find any syms it needs dynamically.

--Stijn

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/