[llvmlinux] AArch64 is failing due to clang not passing flag to assembler

Mark Charlebois charlebm at gmail.com
Wed Jun 11 21:33:16 UTC 2014


AArch64 was failing with the following error when trying to
build aes-ce-cipher.o:

/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:
Assembler messages:
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aese v0.16b,v2.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aesmc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aese v0.16b,v3.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aesmc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aese v0.16b,v1.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aesmc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:210:
Error: selected processor does not support `aese v0.16b,v2.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesd v0.16b,v2.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesimc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesd v0.16b,v3.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesimc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesd v0.16b,v1.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesimc v0.16b,v0.16b'
/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-5b96de.s:285:
Error: selected processor does not support `aesd v0.16b,v2.16b'
clang-3.5: error: assembler command failed with exit code 1 (use -v to see
invocation)
make[3]: *** [arch/arm64/crypto/aes-ce-cipher.o] Error 1
make[2]: *** [arch/arm64/crypto] Error 2

This was caused by clang not applying the following line from
arch/arm64/crypto/Makefile

CFLAGS_aes-ce-cipher.o += -march=armv8-a+crypto

if the flag is passed to the assembler for this file, then there is no
error. When I add the -### flag to see the commands that are being run when
compiling this file I can see that -march is not set passed to the
assembler and seems to be decomposed by clang into other flags.

 "/local2/mnt/workspace/llvmlinux/toolchain/clang/install/bin/clang-3.5"
"-cc1" "-triple" "aarch64--linux-gnu" "-S" "-disable-free"
"-disable-llvm-verifier" "-main-file-name" "aes-ce-cipher.c"
"-mrelocation-model" "static" "-mllvm" "-warn-stack-size=2048"
"-mdisable-fp-elim" "-relaxed-aliasing" "-mdisable-tail-calls"
"-fmath-errno" "-masm-verbose" "-no-integrated-as" "-mconstructor-aliases"
"-fuse-init-array" "-target-cpu" "generic" "-target-feature" "-fp-armv8"
"-target-feature" "-crypto" "-target-feature" "-neon" "-target-abi" "aapcs"
"-target-cpu" "generic" "-mno-global-merge" "-g" "-coverage-file"
"/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-1e5f4b.s"
"-nostdsysteminc" "-nobuiltininc" "-resource-dir"
"/local2/mnt/workspace/llvmlinux/toolchain/clang/install/bin/../lib/clang/3.5.0"
"-dependency-file" "arch/arm64/crypto/.aes-ce-cipher.o.d" "-MT"
"arch/arm64/crypto/aes-ce-cipher.o" "-sys-header-deps" "-isystem"
"/local2/mnt/workspace/llvmlinux/toolchain/clang/install/bin/../lib/clang/3.5.0/include"
"-include"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/include/linux/kconfig.h"
"-D" "__KERNEL__" "-D" "KBUILD_STR(s)=#s" "-D"
"KBUILD_BASENAME=KBUILD_STR(aes_ce_cipher)" "-D"
"KBUILD_MODNAME=KBUILD_STR(aes_ce_cipher)" "-I"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/arch/arm64/include"
"-I" "arch/arm64/include/generated" "-I"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/include" "-I"
"include" "-I"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/arch/arm64/include/uapi"
"-I" "arch/arm64/include/generated/uapi" "-I"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/include/uapi"
"-I" "include/generated/uapi" "-I"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/arch/arm64/crypto"
"-I" "arch/arm64/crypto" "-O2" "-Wno-unknown-warning-option" "-Wall"
"-Wundef" "-Wstrict-prototypes" "-Wno-trigraphs"
"-Werror-implicit-function-declaration" "-Wno-format-security"
"-Wno-asm-operand-widths" "-Wno-initializer-overrides"
"-Wno-unused-variable" "-Wno-format-invalid-specifier" "-Wno-gnu"
"-Wno-tautological-compare" "-Wdeclaration-after-statement"
"-Wno-pointer-sign" "-Werror=implicit-int" "-Werror=strict-prototypes"
"-Werror=date-time" "-fno-dwarf-directory-asm" "-fdebug-compilation-dir"
"/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/build/kernel-clang"
"-ferror-limit" "19" "-fmessage-length" "0" "-fwrapv" "-mstackrealign"
"-fno-builtin" "-fno-signed-char" "-fobjc-runtime=gcc" "-fno-common"
"-fdiagnostics-show-option" "-vectorize-loops" "-vectorize-slp" "-o"
"/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-1e5f4b.s"
"-x" "c"
"/local2/mnt/workspace/llvmlinux/targets/vexpress64/src/linux/arch/arm64/crypto/aes-ce-cipher.c"

"/local2/mnt/workspace/llvmlinux/arch/aarch64/toolchain/linaro/gcc-linaro-aarch64-linux-gnu-4.8-2013.06_linux/lib/gcc/aarch64-linux-gnu/4.8.2/../../../../aarch64-linux-gnu/bin/as"
"-o" "arch/arm64/crypto/aes-ce-cipher.o"
"/local2/mnt/workspace/llvmlinux/build/targets/vexpress64/tmp/aes-ce-cipher-1e5f4b.s"

In order to satisfy both gcc and clang I had to pass the flag with and
without -Xassembler:

-CFLAGS_aes-ce-cipher.o += -march=armv8-a+crypto
+CFLAGS_aes-ce-cipher.o += -march=armv8-a+crypto -Xassembler
-march=armv8-a+crypto

Is this a bug in clang? Should -march be passed to the assembler
automatically?

-Mark
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linuxfoundation.org/pipermail/llvmlinux/attachments/20140611/6d044584/attachment.html>


More information about the LLVMLinux mailing list