1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | |
3 | #ifndef PARSE_VDSO_H |
4 | #define PARSE_VDSO_H |
5 | |
6 | #include <stdint.h> |
7 | |
8 | /* |
9 | * To use this vDSO parser, first call one of the vdso_init_* functions. |
10 | * If you've already parsed auxv, then pass the value of AT_SYSINFO_EHDR |
11 | * to vdso_init_from_sysinfo_ehdr. Otherwise pass auxv to vdso_init_from_auxv. |
12 | * Then call vdso_sym for each symbol you want. For example, to look up |
13 | * gettimeofday on x86_64, use: |
14 | * |
15 | * <some pointer> = vdso_sym("LINUX_2.6", "gettimeofday"); |
16 | * or |
17 | * <some pointer> = vdso_sym("LINUX_2.6", "__vdso_gettimeofday"); |
18 | * |
19 | * vdso_sym will return 0 if the symbol doesn't exist or if the init function |
20 | * failed or was not called. vdso_sym is a little slow, so its return value |
21 | * should be cached. |
22 | * |
23 | * vdso_sym is threadsafe; the init functions are not. |
24 | * |
25 | * These are the prototypes: |
26 | */ |
27 | void *vdso_sym(const char *version, const char *name); |
28 | void vdso_init_from_sysinfo_ehdr(uintptr_t base); |
29 | void vdso_init_from_auxv(void *auxv); |
30 | |
31 | #endif |
32 | |