On 5/5/20 11:47 AM, Mark Brown wrote:
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
tools/testing/selftests/vDSO/parse_vdso.c | 24 +------------- tools/testing/selftests/vDSO/parse_vdso.h | 31 +++++++++++++++++++ .../selftests/vDSO/vdso_standalone_test_x86.c | 4 +-- .../selftests/vDSO/vdso_test_gettimeofday.c | 5 +-- 4 files changed, 34 insertions(+), 30 deletions(-) create mode 100644 tools/testing/selftests/vDSO/parse_vdso.h
diff --git a/tools/testing/selftests/vDSO/parse_vdso.c b/tools/testing/selftests/vDSO/parse_vdso.c index 1dbb4b87268f..413f75620a35 100644 --- a/tools/testing/selftests/vDSO/parse_vdso.c +++ b/tools/testing/selftests/vDSO/parse_vdso.c @@ -21,29 +21,7 @@ #include <limits.h> #include <elf.h> -/*
- To use this vDSO parser, first call one of the vdso_init_* functions.
- If you've already parsed auxv, then pass the value of AT_SYSINFO_EHDR
- to vdso_init_from_sysinfo_ehdr. Otherwise pass auxv to vdso_init_from_auxv.
- Then call vdso_sym for each symbol you want. For example, to look up
- gettimeofday on x86_64, use:
<some pointer> = vdso_sym("LINUX_2.6", "gettimeofday");
- or
<some pointer> = vdso_sym("LINUX_2.6", "__vdso_gettimeofday");
- vdso_sym will return 0 if the symbol doesn't exist or if the init function
- failed or was not called. vdso_sym is a little slow, so its return value
- should be cached.
- vdso_sym is threadsafe; the init functions are not.
- These are the prototypes:
- */
-extern void vdso_init_from_auxv(void *auxv); -extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); -extern void *vdso_sym(const char *version, const char *name);
+#include "parse_vdso.h" /* And here's the code. */ #ifndef ELF_BITS diff --git a/tools/testing/selftests/vDSO/parse_vdso.h b/tools/testing/selftests/vDSO/parse_vdso.h new file mode 100644 index 000000000000..ea4b8635bb0b --- /dev/null +++ b/tools/testing/selftests/vDSO/parse_vdso.h @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef PARSE_VDSO_H +#define PARSE_VDSO_H
+#include <stdint.h>
+/*
- To use this vDSO parser, first call one of the vdso_init_* functions.
- If you've already parsed auxv, then pass the value of AT_SYSINFO_EHDR
- to vdso_init_from_sysinfo_ehdr. Otherwise pass auxv to vdso_init_from_auxv.
- Then call vdso_sym for each symbol you want. For example, to look up
- gettimeofday on x86_64, use:
<some pointer> = vdso_sym("LINUX_2.6", "gettimeofday");
- or
<some pointer> = vdso_sym("LINUX_2.6", "__vdso_gettimeofday");
- vdso_sym will return 0 if the symbol doesn't exist or if the init function
- failed or was not called. vdso_sym is a little slow, so its return value
- should be cached.
- vdso_sym is threadsafe; the init functions are not.
- These are the prototypes:
- */
+extern void *vdso_sym(const char *version, const char *name); +extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); +extern void vdso_init_from_auxv(void *auxv);
You don't need extern here - this should be in scope?
+#endif diff --git a/tools/testing/selftests/vDSO/vdso_standalone_test_x86.c b/tools/testing/selftests/vDSO/vdso_standalone_test_x86.c index 5ac4b00acfbc..8a44ff973ee1 100644 --- a/tools/testing/selftests/vDSO/vdso_standalone_test_x86.c +++ b/tools/testing/selftests/vDSO/vdso_standalone_test_x86.c @@ -16,9 +16,7 @@ #include <unistd.h> #include <stdint.h> -extern void *vdso_sym(const char *version, const char *name); -extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); -extern void vdso_init_from_auxv(void *auxv);
thanks, -- Shuah