File tree Expand file tree Collapse file tree 3 files changed +57
-1
lines changed
tools/testing/selftests/vDSO Expand file tree Collapse file tree 3 files changed +57
-1
lines changed Original file line number Diff line number Diff line change 1
1
# SPDX-License-Identifier: GPL-2.0-only
2
2
vdso_test
3
3
vdso_test_gettimeofday
4
+ vdso_test_getcpu
4
5
vdso_standalone_test_x86
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ include ../lib.mk
4
4
uname_M := $(shell uname -m 2>/dev/null || echo not)
5
5
ARCH ?= $(shell echo $(uname_M ) | sed -e s/i.86/x86/ -e s/x86_64/x86/)
6
6
7
- TEST_GEN_PROGS := $(OUTPUT ) /vdso_test_gettimeofday
7
+ TEST_GEN_PROGS := $(OUTPUT ) /vdso_test_gettimeofday $( OUTPUT ) /vdso_test_getcpu
8
8
ifeq ($(ARCH ) ,x86)
9
9
TEST_GEN_PROGS += $(OUTPUT ) /vdso_standalone_test_x86
10
10
endif
18
18
19
19
all : $(TEST_GEN_PROGS )
20
20
$(OUTPUT ) /vdso_test_gettimeofday : parse_vdso.c vdso_test_gettimeofday.c
21
+ $(OUTPUT ) /vdso_test_getcpu : parse_vdso.c vdso_test_getcpu.c
21
22
$(OUTPUT ) /vdso_standalone_test_x86 : vdso_standalone_test_x86.c parse_vdso.c
22
23
$(CC ) $(CFLAGS ) $(CFLAGS_vdso_standalone_test_x86 ) \
23
24
vdso_standalone_test_x86.c parse_vdso.c \
Original file line number Diff line number Diff line change
1
+ // SPDX-License-Identifier: GPL-2.0-only
2
+ /*
3
+ * vdso_test_getcpu.c: Sample code to test parse_vdso.c and vDSO getcpu()
4
+ *
5
+ * Copyright (c) 2020 Arm Ltd
6
+ */
7
+
8
+ #include <stdint.h>
9
+ #include <elf.h>
10
+ #include <stdio.h>
11
+ #include <sys/auxv.h>
12
+ #include <sys/time.h>
13
+
14
+ #include "../kselftest.h"
15
+ #include "parse_vdso.h"
16
+
17
+ const char * version = "LINUX_2.6" ;
18
+ const char * name = "__vdso_getcpu" ;
19
+
20
+ struct getcpu_cache ;
21
+ typedef long (* getcpu_t )(unsigned int * , unsigned int * ,
22
+ struct getcpu_cache * );
23
+
24
+ int main (int argc , char * * argv )
25
+ {
26
+ unsigned long sysinfo_ehdr ;
27
+ unsigned int cpu , node ;
28
+ getcpu_t get_cpu ;
29
+ long ret ;
30
+
31
+ sysinfo_ehdr = getauxval (AT_SYSINFO_EHDR );
32
+ if (!sysinfo_ehdr ) {
33
+ printf ("AT_SYSINFO_EHDR is not present!\n" );
34
+ return KSFT_SKIP ;
35
+ }
36
+
37
+ vdso_init_from_sysinfo_ehdr (getauxval (AT_SYSINFO_EHDR ));
38
+
39
+ get_cpu = (getcpu_t )vdso_sym (version , name );
40
+ if (!get_cpu ) {
41
+ printf ("Could not find %s\n" , name );
42
+ return KSFT_SKIP ;
43
+ }
44
+
45
+ ret = get_cpu (& cpu , & node , 0 );
46
+ if (ret == 0 ) {
47
+ printf ("Running on CPU %u node %u\n" , cpu , node );
48
+ } else {
49
+ printf ("%s failed\n" , name );
50
+ return KSFT_FAIL ;
51
+ }
52
+
53
+ return 0 ;
54
+ }
You can’t perform that action at this time.
0 commit comments