[Bug Report] selftests: arm64: build errors

From: Muhammad Usama Anjum
Date: Mon Jun 03 2024 - 09:29:11 EST


Hi,

I'm trying to build arm64 selftests on next-20240529. I'm getting build
failures. Complete logs are attached while some snippets are as following:

gcc pac.c /pauth/pac_corruptor.o /pauth/helper.o -o /pauth/pac -Wall -O2 -g
-I/linux_mainline/tools/testing/selftests/ -I/linux_mainline/tools/include
-mbranch-protection=pac-ret -march=armv8.2-a
In file included from pac.c:13:
../../kselftest_harness.h: In function ‘clone3_vfork’:
../../kselftest_harness.h:88:9: error: variable ‘args’ has initializer but
incomplete type
88 | struct clone_args args = {

CC check_prctl
check_prctl.c: In function ‘set_tagged_addr_ctrl’:
check_prctl.c:19:14: error: ‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use
in this function)
19 | ret = prctl(PR_SET_TAGGED_ADDR_CTRL, val, 0, 0, 0);

gcc -mbranch-protection=standard -DBTI=1 -ffreestanding -Wall -Wextra -Wall
-O2 -g -I/linux_mainline/tools/testing/selftests/
-I/linux_mainline/tools/include -c -o /bti/test-bti.o test.c
test.c: In function ‘handler’:
test.c:85:50: error: ‘PSR_BTYPE_MASK’ undeclared (first use in this
function); did you mean ‘PSR_MODE_MASK’?
85 | write(1, &"00011011"[((uc->uc_mcontext.pstate & PSR_BTYPE_MASK)

I've GCC 8 installed. I'm not expecting the errors because of a little
older compiler. Any more ideas about the failures?

--
BR,
Muhammad Usama Anjummake[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/tags'
CC tags_test
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/tags'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/signal'
cp testcases/fake_sigreturn_sme_change_vl testcases/za_no_regs testcases/sme_trap_no_sm testcases/sme_trap_za testcases/fake_sigreturn_bad_magic testcases/mangle_pstate_invalid_mode_el1t testcases/zt_regs testcases/fpmr_siginfo testcases/mangle_pstate_invalid_mode_el3h testcases/ssve_regs testcases/mangle_pstate_invalid_mode_el1h testcases/fake_sigreturn_sve_change_vl testcases/mangle_pstate_invalid_daif_bits testcases/ssve_za_regs testcases/mangle_pstate_invalid_mode_el2t testcases/sme_trap_non_streaming testcases/fake_sigreturn_missing_fpsimd testcases/sve_regs testcases/fake_sigreturn_duplicated_fpsimd testcases/tpidr2_restore testcases/za_regs testcases/zt_no_regs testcases/sme_vl testcases/mangle_pstate_invalid_mode_el2h testcases/mangle_pstate_invalid_compat_toggle testcases/tpidr2_siginfo testcases/fake_sigreturn_bad_size testcases/fake_sigreturn_misaligned_sp testcases/sve_vl testcases/mangle_pstate_invalid_mode_el3t testcases/fake_sigreturn_bad_size_for_magic0 /signal/
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/signal'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/pauth'
gcc -c pac_corruptor.S -o /pauth/pac_corruptor.o -Wall -O2 -g -I/linux_mainline/tools/testing/selftests/ -I/linux_mainline/tools/include -mbranch-protection=pac-ret -march=armv8.3-a
gcc -c helper.c -o /pauth/helper.o -Wall -O2 -g -I/linux_mainline/tools/testing/selftests/ -I/linux_mainline/tools/include -mbranch-protection=pac-ret -march=armv8.3-a
gcc pac.c /pauth/pac_corruptor.o /pauth/helper.o -o /pauth/pac -Wall -O2 -g -I/linux_mainline/tools/testing/selftests/ -I/linux_mainline/tools/include -mbranch-protection=pac-ret -march=armv8.2-a
In file included from pac.c:13:
../../kselftest_harness.h: In function ‘clone3_vfork’:
../../kselftest_harness.h:88:9: error: variable ‘args’ has initializer but incomplete type
88 | struct clone_args args = {
| ^~~~~~~~~~
../../kselftest_harness.h:89:4: error: ‘struct clone_args’ has no member named ‘flags’
89 | .flags = CLONE_VFORK,
| ^~~~~
../../kselftest_harness.h:89:12: warning: excess elements in struct initializer
89 | .flags = CLONE_VFORK,
| ^~~~~~~~~~~
../../kselftest_harness.h:89:12: note: (near initialization for ‘args’)
../../kselftest_harness.h:90:4: error: ‘struct clone_args’ has no member named ‘exit_signal’
90 | .exit_signal = SIGCHLD,
| ^~~~~~~~~~~
../../kselftest_harness.h:90:18: warning: excess elements in struct initializer
90 | .exit_signal = SIGCHLD,
| ^~~~~~~
../../kselftest_harness.h:90:18: note: (near initialization for ‘args’)
../../kselftest_harness.h:88:20: error: storage size of ‘args’ isn’t known
88 | struct clone_args args = {
| ^~~~
../../kselftest_harness.h:93:17: error: ‘__NR_clone3’ undeclared (first use in this function)
93 | return syscall(__NR_clone3, &args, sizeof(args));
| ^~~~~~~~~~~
../../kselftest_harness.h:93:17: note: each undeclared identifier is reported only once for each function it appears in
../../kselftest_harness.h:88:20: warning: unused variable ‘args’ [-Wunused-variable]
88 | struct clone_args args = {
| ^~~~
../../kselftest_harness.h:94:1: warning: control reaches end of non-void function [-Wreturn-type]
94 | }
| ^
make[1]: *** [Makefile:38: /pauth/pac] Error 1
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/pauth'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/fp'
CC fp-ptrace
CC fp-stress
CC sve-ptrace
sve-ptrace.c: In function ‘do_child’:
sve-ptrace.c:85:22: warning: too many arguments for format [-Wformat-extra-args]
85 | ksft_exit_fail_msg("PTRACE_TRACEME", strerror(errno));
| ^~~~~~~~~~~~~~~~
sve-ptrace.c:88:22: warning: too many arguments for format [-Wformat-extra-args]
88 | ksft_exit_fail_msg("raise(SIGSTOP)", strerror(errno));
| ^~~~~~~~~~~~~~~~
sve-ptrace.c: In function ‘ptrace_set_sve_get_sve_data’:
sve-ptrace.c:343:44: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
343 | ksft_test_result_fail("Error allocating %d byte buffer for %s VL %u\n",
| ~^
| |
| int
| %ld
344 | data_size, type->name, vl);
| ~~~~~~~~~
| |
| size_t {aka long unsigned int}
sve-ptrace.c: In function ‘ptrace_set_sve_get_fpsimd_data’:
sve-ptrace.c:444:44: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
444 | ksft_test_result_fail("Error allocating %d byte buffer for %s VL %u\n",
| ~^
| |
| int
| %ld
445 | data_size, type->name, vl);
| ~~~~~~~~~
| |
| size_t {aka long unsigned int}
sve-ptrace.c: In function ‘ptrace_set_fpsimd_get_sve_data’:
sve-ptrace.c:548:25: warning: too many arguments for format [-Wformat-extra-args]
548 | ksft_test_result_fail("Child VL != expected VL %d\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sve-ptrace.c:558:33: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
558 | ksft_test_result_fail("Read %d bytes, expected %d\n",
| ~^
| |
| int
| %ld
559 | read_sve_size, expected_size);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
sve-ptrace.c:558:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
558 | ksft_test_result_fail("Read %d bytes, expected %d\n",
| ~^
| |
| int
| %ld
559 | read_sve_size, expected_size);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
sve-ptrace.c:574:33: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
574 | ksft_test_result_fail("Read %d bytes, expected %d\n",
| ~^
| |
| int
| %ld
575 | read_sve_size, expected_size);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
sve-ptrace.c:574:52: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
574 | ksft_test_result_fail("Read %d bytes, expected %d\n",
| ~^
| |
| int
| %ld
575 | read_sve_size, expected_size);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
gcc -c rdvl.S -o /fp/rdvl.o
CC sve-probe-vls
CC vec-syscfg
gcc -c za-fork-asm.S -o /fp/za-fork-asm.o
gcc -fno-asynchronous-unwind-tables -fno-ident -s -Os -nostdlib \
-include ../../../../include/nolibc/nolibc.h -I../..\
-static -ffreestanding -Wall za-fork.c /fp/za-fork-asm.o -o /fp/za-fork
CC za-ptrace
za-ptrace.c: In function ‘do_child’:
za-ptrace.c:51:22: warning: too many arguments for format [-Wformat-extra-args]
51 | ksft_exit_fail_msg("PTRACE_TRACEME", strerror(errno));
| ^~~~~~~~~~~~~~~~
za-ptrace.c:54:22: warning: too many arguments for format [-Wformat-extra-args]
54 | ksft_exit_fail_msg("raise(SIGSTOP)", strerror(errno));
| ^~~~~~~~~~~~~~~~
za-ptrace.c: In function ‘ptrace_set_get_data’:
za-ptrace.c:204:44: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
204 | ksft_test_result_fail("Error allocating %d byte buffer for VL %u\n",
| ~^
| |
| int
| %ld
205 | data_size, vl);
| ~~~~~~~~~
| |
| size_t {aka long unsigned int}
gcc -c asm-utils.S -o /fp/asm-utils.o
gcc -nostdlib fp-pidbench.S /fp/asm-utils.o -o /fp/fp-pidbench
gcc -nostdlib fpsimd-test.S /fp/asm-utils.o -o /fp/fpsimd-test
CC rdvl-sme
CC rdvl-sve
gcc -nostdlib sve-test.S /fp/asm-utils.o -o /fp/sve-test
gcc -DSSVE -nostdlib sve-test.S /fp/asm-utils.o -o /fp/ssve-test
gcc -nostdlib za-test.S /fp/asm-utils.o -o /fp/za-test
CC zt-ptrace
zt-ptrace.c: In function ‘do_child’:
zt-ptrace.c:46:22: warning: too many arguments for format [-Wformat-extra-args]
46 | ksft_exit_fail_msg("PTRACE_TRACEME", strerror(errno));
| ^~~~~~~~~~~~~~~~
zt-ptrace.c:49:22: warning: too many arguments for format [-Wformat-extra-args]
49 | ksft_exit_fail_msg("raise(SIGSTOP)", strerror(errno));
| ^~~~~~~~~~~~~~~~
zt-ptrace.c: In function ‘ptrace_enable_za_via_zt’:
zt-ptrace.c:233:54: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 3 has type ‘long unsigned int’ [-Wformat=]
233 | ksft_print_msg("ZA data less than expected: %u < %u\n",
| ~^
| |
| unsigned int
| %lu
gcc -nostdlib zt-test.S /fp/asm-utils.o -o /fp/zt-test
CC vlset
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/fp'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/mte'
CC check_prctl
check_prctl.c: In function ‘set_tagged_addr_ctrl’:
check_prctl.c:19:14: error: ‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use in this function)
19 | ret = prctl(PR_SET_TAGGED_ADDR_CTRL, val, 0, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~
check_prctl.c:19:14: note: each undeclared identifier is reported only once for each function it appears in
check_prctl.c: In function ‘get_tagged_addr_ctrl’:
check_prctl.c:30:14: error: ‘PR_GET_TAGGED_ADDR_CTRL’ undeclared (first use in this function)
30 | ret = prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~
check_prctl.c: In function ‘check_basic_read’:
check_prctl.c:51:12: error: ‘PR_MTE_TCF_SYNC’ undeclared (first use in this function)
51 | if (ret & PR_MTE_TCF_SYNC)
| ^~~~~~~~~~~~~~~
check_prctl.c:53:12: error: ‘PR_MTE_TCF_ASYNC’ undeclared (first use in this function); did you mean ‘PR_FP_EXC_ASYNC’?
53 | if (ret & PR_MTE_TCF_ASYNC)
| ^~~~~~~~~~~~~~~~
| PR_FP_EXC_ASYNC
check_prctl.c: In function ‘set_mode_test’:
check_prctl.c:84:13: error: ‘PR_MTE_TCF_MASK’ undeclared (first use in this function)
84 | if ((ret & PR_MTE_TCF_MASK) == mask) {
| ^~~~~~~~~~~~~~~
check_prctl.c: At top level:
check_prctl.c:98:4: error: ‘PR_MTE_TCF_NONE’ undeclared here (not in a function); did you mean ‘R_METAG_NONE’?
98 | { PR_MTE_TCF_NONE, 0, "NONE" },
| ^~~~~~~~~~~~~~~
| R_METAG_NONE
check_prctl.c:99:4: error: ‘PR_MTE_TCF_SYNC’ undeclared here (not in a function)
99 | { PR_MTE_TCF_SYNC, HWCAP2_MTE, "SYNC" },
| ^~~~~~~~~~~~~~~
check_prctl.c:99:22: error: ‘HWCAP2_MTE’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
99 | { PR_MTE_TCF_SYNC, HWCAP2_MTE, "SYNC" },
| ^~~~~~~~~~
| HWCAP_SVE
check_prctl.c:100:4: error: ‘PR_MTE_TCF_ASYNC’ undeclared here (not in a function); did you mean ‘PR_FP_EXC_ASYNC’?
100 | { PR_MTE_TCF_ASYNC, HWCAP2_MTE, "ASYNC" },
| ^~~~~~~~~~~~~~~~
| PR_FP_EXC_ASYNC
In file included from mte_common_util.c:19:
mte_common_util.h: In function ‘evaluate_test’:
mte_common_util.h:80:3: warning: format not a string literal and no format arguments [-Wformat-security]
80 | ksft_test_result_pass(msg);
| ^~~~~~~~~~~~~~~~~~~~~
mte_common_util.h:83:3: warning: format not a string literal and no format arguments [-Wformat-security]
83 | ksft_test_result_fail(msg);
| ^~~~~~~~~~~~~~~~~~~~~
mte_common_util.h:86:3: warning: format not a string literal and no format arguments [-Wformat-security]
86 | ksft_test_result_skip(msg);
| ^~~~~~~~~~~~~~~~~~~~~
mte_common_util.c: In function ‘mte_default_handler’:
mte_common_util.c:41:73: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘long long unsigned int’ [-Wformat=]
41 | ksft_print_msg("Got unexpected SEGV_MTEAERR at pc=$lx, fault addr=%lx\n",
| ~~^
| |
| long unsigned int
| %llx
42 | ((ucontext_t *)uc)->uc_mcontext.pc,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| long long unsigned int
mte_common_util.c:41:20: warning: too many arguments for format [-Wformat-extra-args]
41 | ksft_print_msg("Got unexpected SEGV_MTEAERR at pc=$lx, fault addr=%lx\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mte_common_util.c:67:47: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘long long unsigned int’ [-Wformat=]
67 | ksft_print_msg("INFO: SIGBUS signal at pc=%lx, fault addr=%lx, si_code=%lx\n",
| ~~^
| |
| long unsigned int
| %llx
68 | ((ucontext_t *)uc)->uc_mcontext.pc, addr, si->si_code);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| long long unsigned int
mte_common_util.c:67:76: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘int’ [-Wformat=]
67 | ksft_print_msg("INFO: SIGBUS signal at pc=%lx, fault addr=%lx, si_code=%lx\n",
| ~~^
| |
| long unsigned int
| %x
68 | ((ucontext_t *)uc)->uc_mcontext.pc, addr, si->si_code);
| ~~~~~~~~~~~
| |
| int
mte_common_util.c: In function ‘mte_insert_tags’:
mte_common_util.c:103:32: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘void *’ [-Wformat=]
103 | ksft_print_msg("FAIL: Addr=%lx: invalid\n", ptr);
| ~~^ ~~~
| | |
| | void *
| long unsigned int
| %p
mte_common_util.c: In function ‘mte_clear_tags’:
mte_common_util.c:115:32: warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 2 has type ‘void *’ [-Wformat=]
115 | ksft_print_msg("FAIL: Addr=%lx: invalid\n", ptr);
| ~~^ ~~~
| | |
| | void *
| long unsigned int
| %p
mte_common_util.c: In function ‘mte_switch_mode’:
mte_common_util.c:294:7: error: ‘PR_TAGGED_ADDR_ENABLE’ undeclared (first use in this function)
294 | en = PR_TAGGED_ADDR_ENABLE;
| ^~~~~~~~~~~~~~~~~~~~~
mte_common_util.c:294:7: note: each undeclared identifier is reported only once for each function it appears in
mte_common_util.c:309:12: error: ‘PR_SET_TAGGED_ADDR_CTRL’ undeclared (first use in this function)
309 | if (prctl(PR_SET_TAGGED_ADDR_CTRL, en, 0, 0, 0) != 0) {
| ^~~~~~~~~~~~~~~~~~~~~~~
mte_common_util.c: In function ‘mte_default_setup’:
mte_common_util.c:327:14: error: ‘PR_GET_TAGGED_ADDR_CTRL’ undeclared (first use in this function)
327 | ret = prctl(PR_GET_TAGGED_ADDR_CTRL, en, 0, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~
make[1]: *** [../../lib.mk:211: /mte/check_prctl] Error 1
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/mte'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/bti'
gcc -mbranch-protection=standard -DBTI=1 -ffreestanding -Wall -Wextra -Wall -O2 -g -I/linux_mainline/tools/testing/selftests/ -I/linux_mainline/tools/include -c -o /bti/test-bti.o test.c
test.c: In function ‘handler’:
test.c:85:50: error: ‘PSR_BTYPE_MASK’ undeclared (first use in this function); did you mean ‘PSR_MODE_MASK’?
85 | write(1, &"00011011"[((uc->uc_mcontext.pstate & PSR_BTYPE_MASK)
| ^~~~~~~~~~~~~~
| PSR_MODE_MASK
test.c:85:50: note: each undeclared identifier is reported only once for each function it appears in
test.c:86:13: error: ‘PSR_BTYPE_SHIFT’ undeclared (first use in this function)
86 | >> PSR_BTYPE_SHIFT) * 2], 2);
| ^~~~~~~~~~~~~~~
test.c: In function ‘start’:
test.c:186:14: error: ‘HWCAP_PACA’ undeclared (first use in this function); did you mean ‘HWCAP_USCAT’?
186 | if (hwcap & HWCAP_PACA)
| ^~~~~~~~~~
| HWCAP_USCAT
test.c:191:15: error: ‘HWCAP2_BTI’ undeclared (first use in this function); did you mean ‘HWCAP_DIT’?
191 | if (hwcap2 & HWCAP2_BTI) {
| ^~~~~~~~~~
| HWCAP_DIT
make[1]: *** [Makefile:20: /bti/test-bti.o] Error 1
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/bti'
make[1]: Entering directory '/linux_mainline/tools/testing/selftests/arm64/abi'
CC hwcap
hwcap.c:465:16: error: ‘HWCAP2_CSSC’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
465 | .hwcap_bit = HWCAP2_CSSC,
| ^~~~~~~~~~~
| HWCAP_SVE
hwcap.c:472:16: error: ‘HWCAP2_F8CVT’ undeclared here (not in a function); did you mean ‘HWCAP_JSCVT’?
472 | .hwcap_bit = HWCAP2_F8CVT,
| ^~~~~~~~~~~~
| HWCAP_JSCVT
hwcap.c:479:16: error: ‘HWCAP2_F8DP4’ undeclared here (not in a function); did you mean ‘HWCAP_FPHP’?
479 | .hwcap_bit = HWCAP2_F8DP4,
| ^~~~~~~~~~~~
| HWCAP_FPHP
hwcap.c:486:16: error: ‘HWCAP2_F8DP2’ undeclared here (not in a function); did you mean ‘HWCAP_FPHP’?
486 | .hwcap_bit = HWCAP2_F8DP2,
| ^~~~~~~~~~~~
| HWCAP_FPHP
hwcap.c:493:16: error: ‘HWCAP2_F8E5M2’ undeclared here (not in a function)
493 | .hwcap_bit = HWCAP2_F8E5M2,
| ^~~~~~~~~~~~~
hwcap.c:499:16: error: ‘HWCAP2_F8E4M3’ undeclared here (not in a function); did you mean ‘HWCAP_FLAGM’?
499 | .hwcap_bit = HWCAP2_F8E4M3,
| ^~~~~~~~~~~~~
| HWCAP_FLAGM
hwcap.c:505:16: error: ‘HWCAP2_F8FMA’ undeclared here (not in a function); did you mean ‘HWCAP_FCMA’?
505 | .hwcap_bit = HWCAP2_F8FMA,
| ^~~~~~~~~~~~
| HWCAP_FCMA
hwcap.c:512:16: error: ‘HWCAP2_FAMINMAX’ undeclared here (not in a function)
512 | .hwcap_bit = HWCAP2_FAMINMAX,
| ^~~~~~~~~~~~~~~
hwcap.c:526:16: error: ‘HWCAP2_FPMR’ undeclared here (not in a function); did you mean ‘HWCAP_FPHP’?
526 | .hwcap_bit = HWCAP2_FPMR,
| ^~~~~~~~~~~
| HWCAP_FPHP
hwcap.c:555:16: error: ‘HWCAP2_LRCPC3’ undeclared here (not in a function); did you mean ‘HWCAP_LRCPC’?
555 | .hwcap_bit = HWCAP2_LRCPC3,
| ^~~~~~~~~~~~~
| HWCAP_LRCPC
hwcap.c:578:16: error: ‘HWCAP2_LSE128’ undeclared here (not in a function); did you mean ‘HWCAP_SHA2’?
578 | .hwcap_bit = HWCAP2_LSE128,
| ^~~~~~~~~~~~~
| HWCAP_SHA2
hwcap.c:585:16: error: ‘HWCAP2_LUT’ undeclared here (not in a function); did you mean ‘HWCAP_DIT’?
585 | .hwcap_bit = HWCAP2_LUT,
| ^~~~~~~~~~
| HWCAP_DIT
hwcap.c:592:16: error: ‘HWCAP2_MOPS’ undeclared here (not in a function); did you mean ‘HWCAP_FP’?
592 | .hwcap_bit = HWCAP2_MOPS,
| ^~~~~~~~~~~
| HWCAP_FP
hwcap.c:607:16: error: ‘HWCAP2_RNG’ undeclared here (not in a function)
607 | .hwcap_bit = HWCAP2_RNG,
| ^~~~~~~~~~
hwcap.c:614:16: error: ‘HWCAP2_RPRFM’ undeclared here (not in a function)
614 | .hwcap_bit = HWCAP2_RPRFM,
| ^~~~~~~~~~~~
hwcap.c:641:16: error: ‘HWCAP2_SME’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
641 | .hwcap_bit = HWCAP2_SME,
| ^~~~~~~~~~
| HWCAP_SVE
hwcap.c:649:16: error: ‘HWCAP2_SME2’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
649 | .hwcap_bit = HWCAP2_SME2,
| ^~~~~~~~~~~
| HWCAP_SVE
hwcap.c:657:16: error: ‘HWCAP2_SME2P1’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
657 | .hwcap_bit = HWCAP2_SME2P1,
| ^~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:664:16: error: ‘HWCAP2_SME_I16I32’ undeclared here (not in a function)
664 | .hwcap_bit = HWCAP2_SME_I16I32,
| ^~~~~~~~~~~~~~~~~
hwcap.c:671:16: error: ‘HWCAP2_SME_BI32I32’ undeclared here (not in a function)
671 | .hwcap_bit = HWCAP2_SME_BI32I32,
| ^~~~~~~~~~~~~~~~~~
hwcap.c:678:16: error: ‘HWCAP2_SME_B16B16’ undeclared here (not in a function)
678 | .hwcap_bit = HWCAP2_SME_B16B16,
| ^~~~~~~~~~~~~~~~~
hwcap.c:685:16: error: ‘HWCAP2_SME_F16F16’ undeclared here (not in a function)
685 | .hwcap_bit = HWCAP2_SME_F16F16,
| ^~~~~~~~~~~~~~~~~
hwcap.c:692:16: error: ‘HWCAP2_SME_F8F16’ undeclared here (not in a function)
692 | .hwcap_bit = HWCAP2_SME_F8F16,
| ^~~~~~~~~~~~~~~~
hwcap.c:699:16: error: ‘HWCAP2_SME_F8F32’ undeclared here (not in a function)
699 | .hwcap_bit = HWCAP2_SME_F8F32,
| ^~~~~~~~~~~~~~~~
hwcap.c:706:16: error: ‘HWCAP2_SME_LUTV2’ undeclared here (not in a function)
706 | .hwcap_bit = HWCAP2_SME_LUTV2,
| ^~~~~~~~~~~~~~~~
hwcap.c:713:16: error: ‘HWCAP2_SME_SF8FMA’ undeclared here (not in a function)
713 | .hwcap_bit = HWCAP2_SME_SF8FMA,
| ^~~~~~~~~~~~~~~~~
hwcap.c:720:16: error: ‘HWCAP2_SME_SF8DP2’ undeclared here (not in a function)
720 | .hwcap_bit = HWCAP2_SME_SF8DP2,
| ^~~~~~~~~~~~~~~~~
hwcap.c:727:16: error: ‘HWCAP2_SME_SF8DP4’ undeclared here (not in a function)
727 | .hwcap_bit = HWCAP2_SME_SF8DP4,
| ^~~~~~~~~~~~~~~~~
hwcap.c:742:16: error: ‘HWCAP2_SVE2’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
742 | .hwcap_bit = HWCAP2_SVE2,
| ^~~~~~~~~~~
| HWCAP_SVE
hwcap.c:749:16: error: ‘HWCAP2_SVE2P1’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
749 | .hwcap_bit = HWCAP2_SVE2P1,
| ^~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:756:16: error: ‘HWCAP2_SVEAES’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
756 | .hwcap_bit = HWCAP2_SVEAES,
| ^~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:763:16: error: ‘HWCAP2_SVE_B16B16’ undeclared here (not in a function)
763 | .hwcap_bit = HWCAP2_SVE_B16B16,
| ^~~~~~~~~~~~~~~~~
hwcap.c:770:16: error: ‘HWCAP2_SVEPMULL’ undeclared here (not in a function); did you mean ‘HWCAP_PMULL’?
770 | .hwcap_bit = HWCAP2_SVEPMULL,
| ^~~~~~~~~~~~~~~
| HWCAP_PMULL
hwcap.c:777:16: error: ‘HWCAP2_SVEBITPERM’ undeclared here (not in a function)
777 | .hwcap_bit = HWCAP2_SVEBITPERM,
| ^~~~~~~~~~~~~~~~~
hwcap.c:784:16: error: ‘HWCAP2_SVESHA3’ undeclared here (not in a function); did you mean ‘HWCAP_SHA3’?
784 | .hwcap_bit = HWCAP2_SVESHA3,
| ^~~~~~~~~~~~~~
| HWCAP_SHA3
hwcap.c:791:16: error: ‘HWCAP2_SVESM4’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
791 | .hwcap_bit = HWCAP2_SVESM4,
| ^~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:798:16: error: ‘HWCAP2_SVEI8MM’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
798 | .hwcap_bit = HWCAP2_SVEI8MM,
| ^~~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:805:16: error: ‘HWCAP2_SVEF32MM’ undeclared here (not in a function)
805 | .hwcap_bit = HWCAP2_SVEF32MM,
| ^~~~~~~~~~~~~~~
hwcap.c:812:16: error: ‘HWCAP2_SVEF64MM’ undeclared here (not in a function)
812 | .hwcap_bit = HWCAP2_SVEF64MM,
| ^~~~~~~~~~~~~~~
hwcap.c:819:16: error: ‘HWCAP2_SVEBF16’ undeclared here (not in a function); did you mean ‘HWCAP_SVE’?
819 | .hwcap_bit = HWCAP2_SVEBF16,
| ^~~~~~~~~~~~~~
| HWCAP_SVE
hwcap.c:826:16: error: ‘HWCAP2_SVE_EBF16’ undeclared here (not in a function)
826 | .hwcap_bit = HWCAP2_SVE_EBF16,
| ^~~~~~~~~~~~~~~~
hwcap.c:832:16: error: ‘HWCAP2_HBC’ undeclared here (not in a function); did you mean ‘HWCAP_SB’?
832 | .hwcap_bit = HWCAP2_HBC,
| ^~~~~~~~~~
| HWCAP_SB
make[1]: *** [../../lib.mk:211: /abi/hwcap] Error 1
make[1]: Leaving directory '/linux_mainline/tools/testing/selftests/arm64/abi'
make: *** [Makefile:28: all] Error 2