Re: [kbuild-all] Re: sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'

From: Chen, Rong A
Date: Sun Aug 08 2021 - 21:54:27 EST




On 8/6/2021 8:42 PM, Thomas Gleixner wrote:
On Wed, Aug 04 2021 at 17:04, Rong A. Chen wrote:
On 7/27/2021 10:52 PM, Dave Hansen wrote:
On 7/26/21 8:11 PM, kernel test robot wrote:
sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'

Is there something else funky going on here? All of the "-mxsave" flags
that I can find are under checks for x86 builds, like:

ifeq ($(CAN_BUILD_I386),1)
$(BINARIES_32): CFLAGS += -m32 -mxsave
..

I'm confused how we could have a sparc64 compiler (and only a sparc64
compiler) that would end up with "-mxsave" in CFLAGS.

Hi Dave,

We can reproduce the error and have no idea too, but we have disabled
the test for selftests on non-x86 arch.

This smells like a host/target compiler mixup. Can you please make the
kernel build verbose with 'V=1' and provide the full build output?

Hi Thomas,

I run the below command:

$make V=1 --keep-going CROSS_COMPILE=sparc64-linux- -j1 O=build_dir ARCH=sparc64 -C tools/testing/selftests/vm
...
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie -m32 -mxsave protection_keys.c -lrt -lpthread -lrt -ldl -lm -o /root/linux/tools/testing/selftests/vm/protection_keys_32
sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'
make: *** [Makefile:107: /root/linux/tools/testing/selftests/vm/protection_keys_32] Error 1
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie -m64 -mxsave protection_keys.c -lrt -lpthread -lrt -ldl -o /root/linux/tools/testing/selftests/vm/protection_keys_64
sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'
make: *** [Makefile:115: /root/linux/tools/testing/selftests/vm/protection_keys_64] Error 1

and I attached the full build output for your reference.

Best Regards,
Rong Chen
make: Entering directory '/root/linux/tools/testing/selftests/vm'
/bin/sh ./check_config.sh sparc64-linux-gcc
make --no-builtin-rules ARCH=sparc64 -C ../../../.. headers_install
make[1]: Entering directory '/root/linux'
make -C /root/linux/build_dir -f /root/linux/Makefile headers_install
make[2]: Entering directory '/root/linux/build_dir'
set -e; mkdir -p include/generated/uapi/linux/; trap "rm -f include/generated/uapi/linux/.version.h.tmp" EXIT; { if [ 0 -gt 255 ]; then echo \#define LINUX_VERSION_CODE 331263; else echo \#define LINUX_VERSION_CODE 331008; fi; echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + ((c) > 255 ? 255 : (c)))'; echo \#define LINUX_VERSION_MAJOR 5; echo \#define LINUX_VERSION_PATCHLEVEL 13; echo \#define LINUX_VERSION_SUBLEVEL 0; } > include/generated/uapi/linux/.version.h.tmp; if [ ! -r include/generated/uapi/linux/version.h ] || ! cmp -s include/generated/uapi/linux/version.h include/generated/uapi/linux/.version.h.tmp; then : ' UPD include/generated/uapi/linux/version.h'; mv -f include/generated/uapi/linux/.version.h.tmp include/generated/uapi/linux/version.h; fi
make -f ../scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ../scripts/Makefile.build obj=scripts scripts/unifdef
make -f ../scripts/Makefile.asm-generic obj=arch/sparc/include/generated/uapi/asm \
generic=include/uapi/asm-generic
make -f ../scripts/Makefile.build obj=arch/sparc/kernel/syscalls all
make -f ../scripts/Makefile.headersinst obj=include/uapi
make -f ../scripts/Makefile.headersinst obj=arch/sparc/include/uapi
mkdir -p ./usr; rsync -mrl --include='*/' --include='*\.h' --exclude='*' usr/include ./usr
make[2]: Leaving directory '/root/linux/build_dir'
make[1]: Leaving directory '/root/linux'
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie compaction_test.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/compaction_test
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie gup_test.c ../../../../mm/gup_test.h -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/gup_test
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie hmm-tests.c local_config.h -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/hmm-tests
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie hugepage-mmap.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/hugepage-mmap
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie hugepage-shm.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/hugepage-shm
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie khugepaged.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/khugepaged
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie madv_populate.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/madv_populate
madv_populate.c:334:2: warning: #warning "missing MADV_POPULATE_READ or MADV_POPULATE_WRITE definition" [-Wcpp]
334 | #warning "missing MADV_POPULATE_READ or MADV_POPULATE_WRITE definition"
| ^~~~~~~
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie map_fixed_noreplace.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/map_fixed_noreplace
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie map_hugetlb.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/map_hugetlb
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie map_populate.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/map_populate
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie mlock-random-test.c -lrt -lpthread -lcap -o /root/linux/tools/testing/selftests/vm/mlock-random-test
mlock-random-test.c:8:10: fatal error: sys/capability.h: No such file or directory
8 | #include <sys/capability.h>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [../lib.mk:144: /root/linux/tools/testing/selftests/vm/mlock-random-test] Error 1
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie mlock2-tests.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/mlock2-tests
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie mremap_dontunmap.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/mremap_dontunmap
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie mremap_test.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/mremap_test
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie on-fault-limit.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/on-fault-limit
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie thuge-gen.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/thuge-gen
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie transhuge-stress.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/transhuge-stress
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie userfaultfd.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/userfaultfd
userfaultfd.c:338:58: error: '_UFFDIO_CONTINUE' undeclared here (not in a function)
338 | .expected_ioctls = UFFD_API_RANGE_IOCTLS_BASIC & ~(1 << _UFFDIO_CONTINUE),
| ^~~~~~~~~~~~~~~~
userfaultfd.c: In function 'userfaultfd_open':
userfaultfd.c:350:60: error: 'UFFD_USER_MODE_ONLY' undeclared (first use in this function)
350 | uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY);
| ^~~~~~~~~~~~~~~~~~~
userfaultfd.c:350:60: note: each undeclared identifier is reported only once for each function it appears in
userfaultfd.c: In function 'continue_range':
userfaultfd.c:476:25: error: storage size of 'req' isn't known
476 | struct uffdio_continue req;
| ^~~
userfaultfd.c:483:17: error: 'UFFDIO_CONTINUE' undeclared (first use in this function)
483 | if (ioctl(ufd, UFFDIO_CONTINUE, &req))
| ^~~~~~~~~~~~~~~
userfaultfd.c:476:25: warning: unused variable 'req' [-Wunused-variable]
476 | struct uffdio_continue req;
| ^~~
userfaultfd.c: In function 'uffd_handle_page_fault':
userfaultfd.c:637:40: error: 'UFFD_PAGEFAULT_FLAG_MINOR' undeclared (first use in this function); did you mean 'UFFD_PAGEFAULT_FLAG_WP'?
637 | } else if (msg->arg.pagefault.flags & UFFD_PAGEFAULT_FLAG_MINOR) {
| ^~~~~~~~~~~~~~~~~~~~~~~~~
| UFFD_PAGEFAULT_FLAG_WP
userfaultfd.c: In function 'userfaultfd_minor_test':
userfaultfd.c:1206:18: error: 'UFFD_FEATURE_MINOR_HUGETLBFS' undeclared (first use in this function); did you mean 'UFFD_FEATURE_MISSING_HUGETLBFS'?
1206 | req_features = UFFD_FEATURE_MINOR_HUGETLBFS;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
| UFFD_FEATURE_MISSING_HUGETLBFS
userfaultfd.c:1208:18: error: 'UFFD_FEATURE_MINOR_SHMEM' undeclared (first use in this function); did you mean 'UFFD_FEATURE_MISSING_SHMEM'?
1208 | req_features = UFFD_FEATURE_MINOR_SHMEM;
| ^~~~~~~~~~~~~~~~~~~~~~~~
| UFFD_FEATURE_MISSING_SHMEM
userfaultfd.c:1223:25: error: 'UFFDIO_REGISTER_MODE_MINOR' undeclared (first use in this function); did you mean 'UFFDIO_REGISTER_MODE_WP'?
1223 | uffdio_register.mode = UFFDIO_REGISTER_MODE_MINOR;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
| UFFDIO_REGISTER_MODE_WP
make: *** [../lib.mk:144: /root/linux/tools/testing/selftests/vm/userfaultfd] Error 1
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie split_huge_page_test.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/split_huge_page_test
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie -m32 -mxsave protection_keys.c -lrt -lpthread -lrt -ldl -lm -o /root/linux/tools/testing/selftests/vm/protection_keys_32
sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'
make: *** [Makefile:107: /root/linux/tools/testing/selftests/vm/protection_keys_32] Error 1
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie -m64 -mxsave protection_keys.c -lrt -lpthread -lrt -ldl -o /root/linux/tools/testing/selftests/vm/protection_keys_64
sparc64-linux-gcc: error: unrecognized command-line option '-mxsave'
make: *** [Makefile:115: /root/linux/tools/testing/selftests/vm/protection_keys_64] Error 1
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie va_128TBswitch.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/va_128TBswitch
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie virtual_address_range.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/virtual_address_range
sparc64-linux-gcc -Wall -I ../../../../usr/include -no-pie write_to_hugetlbfs.c -lrt -lpthread -o /root/linux/tools/testing/selftests/vm/write_to_hugetlbfs

Warning: missing libhugetlbfs support. Some HMM tests will be skipped.

make: Target 'all' not remade because of errors.
make: Leaving directory '/root/linux/tools/testing/selftests/vm'