Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: vdso: Use a header file to prototype parse_vdso API

Both vdso_test_gettimeofday and vdso_standalone_test_x86 use the library in
parse_vdso.c but each separately declares the API it offers which is not
ideal. Create a header file with prototypes of the functions and use it in
both the library and the tests to ensure that the same prototypes are used
throughout.

Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>

authored by

Mark Brown and committed by
Shuah Khan
cd76ca4d babf8a97

+34 -30
+1 -23
tools/testing/selftests/vDSO/parse_vdso.c
··· 21 21 #include <limits.h> 22 22 #include <elf.h> 23 23 24 - /* 25 - * To use this vDSO parser, first call one of the vdso_init_* functions. 26 - * If you've already parsed auxv, then pass the value of AT_SYSINFO_EHDR 27 - * to vdso_init_from_sysinfo_ehdr. Otherwise pass auxv to vdso_init_from_auxv. 28 - * Then call vdso_sym for each symbol you want. For example, to look up 29 - * gettimeofday on x86_64, use: 30 - * 31 - * <some pointer> = vdso_sym("LINUX_2.6", "gettimeofday"); 32 - * or 33 - * <some pointer> = vdso_sym("LINUX_2.6", "__vdso_gettimeofday"); 34 - * 35 - * vdso_sym will return 0 if the symbol doesn't exist or if the init function 36 - * failed or was not called. vdso_sym is a little slow, so its return value 37 - * should be cached. 38 - * 39 - * vdso_sym is threadsafe; the init functions are not. 40 - * 41 - * These are the prototypes: 42 - */ 43 - extern void vdso_init_from_auxv(void *auxv); 44 - extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); 45 - extern void *vdso_sym(const char *version, const char *name); 46 - 24 + #include "parse_vdso.h" 47 25 48 26 /* And here's the code. */ 49 27 #ifndef ELF_BITS
+31
tools/testing/selftests/vDSO/parse_vdso.h
··· 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
+1 -3
tools/testing/selftests/vDSO/vdso_standalone_test_x86.c
··· 16 16 #include <unistd.h> 17 17 #include <stdint.h> 18 18 19 - extern void *vdso_sym(const char *version, const char *name); 20 - extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); 21 - extern void vdso_init_from_auxv(void *auxv); 19 + #include "parse_vdso.h" 22 20 23 21 /* We need a libc functions... */ 24 22 int strcmp(const char *a, const char *b)
+1 -4
tools/testing/selftests/vDSO/vdso_test_gettimeofday.c
··· 17 17 #include <sys/time.h> 18 18 19 19 #include "../kselftest.h" 20 - 21 - extern void *vdso_sym(const char *version, const char *name); 22 - extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); 23 - extern void vdso_init_from_auxv(void *auxv); 20 + #include "parse_vdso.h" 24 21 25 22 /* 26 23 * ARM64's vDSO exports its gettimeofday() implementation with a different