[llvmlinux] Compilling kernel Problem: value '65536' out of range for constraint 'I' -II

Renato Golin renato.golin at linaro.org
Mon Mar 21 17:48:35 UTC 2016


Hi,

Have you reported this to LLVM (http://llvm.org/bugs/)?

There are other bugs in inline assembly constraint support, please
make sure to add all this information and to make it a dependency on
both:

[Meta] ARM Integrated assembler support: 18926
[Meta] Compiling the Linux kernel with clang: 4068

And add me as CC.

Thanks!
--renato


On 16 March 2016 at 07:19, yaojun <jyao224 at qq.com> wrote:
>> I try to compile android kernel on arm64.
>> I am getting weird errors while cross compiling android kernel.
>> The problem is:
>> /arch/arm64/include/asm/spinlock.h:61:28: error: value '65536' out of
>> range
>> for constraint 'I' : "Q" (lock->owner), "I" (1 << TICKET_SHIFT)
>> My context:
>> firstly, I compiled nexus4 kernel successfully by using Automated build
>> framework. Then I try to patch nexus5X(git branch:
>> android-msm-bullhead-3.10-marshmallow-mr1) by using aarch64 patches.
>> secondly, I try to use two different cross toolchain:
>> gcc-linaro-5.2-2015.11-1x64_64_aarch64-linux-gnu AND
>> aarch64-linux-android-4.9. All failed.
>
> I wrote this problem at Mon Mar 7 07:12:12 UTC 2016.
> I am trying to deal with this problem, but I have no idea.
> I write a test code :
>              typedef struct {
>                uint16_t owner;
>                uint16_t next;
>              } __attribute__((aligned(4))) arch_spinlock_t;
>
>              int arch_spin_trylock(arch_spinlock_t *lock) {
>                unsigned int tmp;
>                arch_spinlock_t lockval;
>
>                asm volatile(
>                    "1:     ldaxr   %w0, %2\n"
>                    "       eor     %w1, %w0, %w0, ror #16\n"
>                    "       cbnz    %w1, 2f\n"
>                    "       add     %w0, %w0, %3\n"
>                    "       stxr    %w1, %w0, %2\n"
>                    "       cbnz    %w1, 1b\n"
>                    "2:"
>                    : "=&r"(lockval), "=&r"(tmp), "+Q"(*lock)
>                    : "I"(1 << 16)
>                    : "memory");
>
>                return !tmp;
>              }
> and compile it :
> $ clang -target arm64-linux-gnu constraint_i_test.c -v
> The output shows:
>   clang version 3.9.0 (http://llvm.org/git/clang.git
> ef1d726359c15e390de5086e9f381e80076b7a45) (http://llvm.org/git/llvm.git
> f7ae2f50a069857526c2e49dda039ed47746f130)
>   Target: arm64--linux-gnu
>   Thread model: posix
>   InstalledDir: /usr/local/bin
>   Found candidate GCC installation: /usr/lib/gcc-cross/aarch64-linux-gnu/4.8
>   Found candidate GCC installation:
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8.4
>   Selected GCC installation: /usr/lib/gcc-cross/aarch64-linux-gnu/4.8
>   Candidate multilib: .;@m64
>   Selected multilib: .;@m64
>    "/usr/local/bin/clang-3.9" -cc1 -triple arm64--linux-gnu -emit-obj
> -mrelax-all -disable-free -main-file-name constraint_i_test.c
> -mrelocation-model static -mthread-model posix -mdisable-fp-elim
> -fmath-errno -masm-verbose -mconstructor-aliases -fuse-init-array
> -target-cpu generic -target-feature +neon -target-abi aapcs -v
> -dwarf-column-info -debugger-tuning=gdb -resource-dir
> /usr/local/bin/../lib/clang/3.9.0 -internal-isystem /usr/local/include
> -internal-isystem /usr/local/bin/../lib/clang/3.9.0/include
> -internal-externc-isystem /include -internal-externc-isystem /usr/include
> -fdebug-compilation-dir /home/yaojun -ferror-limit 19 -fmessage-length 205
> -fallow-half-arguments-and-returns -fno-signed-char -fobjc-runtime=gcc
> -fdiagnostics-show-option -fcolor-diagnostics -o
> /tmp/constraint_i_test-0be913.o -x c constraint_i_test.c
>   clang -cc1 version 3.9.0 based upon LLVM 3.9.0svn default target
> x86_64-unknown-linux-gnu
>   ignoring nonexistent directory "/include"
>   #include "..." search starts here:
>   #include <...> search starts here:
>    /usr/local/include
>    /usr/local/bin/../lib/clang/3.9.0/include
>    /usr/include
>   End of search list.
>
> "/usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../../../aarch64-linux-gnu/bin/ld"
> -z relro --hash-style=gnu --build-id --eh-frame-hdr -m aarch64linux
> -dynamic-linker /lib/ld-linux-aarch64.so.1 -o a.out
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../../../aarch64-linux-gnu/lib/crt1.o
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../../../aarch64-linux-gnu/lib/crti.o
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8/crtbegin.o
> -L/usr/lib/gcc-cross/aarch64-linux-gnu/4.8 -L/lib/../lib64
> -L/usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../../../aarch64-linux-gnu/lib
> -L/usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../.. -L/usr/local/bin/../lib
> -L/lib -L/usr/lib /tmp/constraint_i_test-0be913.o -lgcc --as-needed -lgcc_s
> --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8/crtend.o
> /usr/lib/gcc-cross/aarch64-linux-gnu/4.8/../../../../aarch64-linux-gnu/lib/crtn.o
> It works well.
>
> Then I download LLVMLinux kernel tree, and compile it :
> $ make ARCH=arm64 GCC_TOOLCHAIN=/usr/aarch64-linux-gnu/bin/ HSOTCC=clang
> CC=clang menuconfig
> $ make ARCH=arm64 GCC_TOOLCHAIN=/usr/aarch64-linux-gnu/bin/ HSOTCC=clang
> CC=clang
> It shows:
>   In file included from arch/arm64/kernel/asm-offsets.c:21:
>   In file included from include/linux/sched.h:19:
>   In file included from include/linux/timex.h:56:
>   In file included from include/uapi/linux/timex.h:56:
>   In file included from include/linux/time.h:5:
>   In file included from include/linux/seqlock.h:35:
>   In file included from include/linux/spinlock.h:87:
>   ./arch/arm64/include/asm/spinlock.h:61:28: error: value '65536' out of
> range for constraint 'I'
>           : "Q" (lock->owner), "I" (1 << TICKET_SHIFT)
>                                                ^~~~~~~~~~~~~~~~~
>   ./arch/arm64/include/asm/spinlock.h:80:9: error: value '65536' out of
> range for constraint 'I'
>           : "I" (1 << TICKET_SHIFT)
>                   ^~~~~~~~~~~~~~~~~
> When I compile Android kernel by using
> gcc-linaro-aarch64-linux-gnu-4.9-2014.08_linux cross toolchain, It shows the
> same information.
> I use automated build framework.
> The command info is:
>   I: Building kernel with clang...
>   (cd
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X
> &&  time  make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
> GCC_TOOLCHAIN=/home/yaojun/llvm-target/nexus5X/llvmlinux/arch/aarch64/toolchain/linaro/gcc-linaro-aarch64-linux-gnu-4.9-2014.08_linux
> -l8 -j9 CONFIG_DEBUG_INFO=1  CONFIG_DEBUG_SECTION_MISMATCH=y
> CONFIG_NO_ERROR_ON_MISMATCH=y
> KBUILD_OUTPUT=/home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/build/kernel-clang
> HOSTCC="clang" CC="clang "   )
>  clang  -Wp,-MD,arch/arm64/kernel/.asm-offsets.s.d  -nostdinc -isystem
> /usr/local/bin/../lib/clang/3.9.0/include -I/home/yaojun/llvm-
> target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include
> -Iarch/arm64/include/generated  -I/home/yaojun/llvm-
> target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include
> -Iinclude -I/home/yaojun/llvm-
> target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include/uapi
> -Iarch/arm64/include/generated/uapi -I/home/yaojun/llvm-
> target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/uapi
> -Iinclude/generated/uapi -include /home/yaojun/llvm-
> target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/kconfig.h
> -I/home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/.
> -I. -D__KERNEL__ -no-integrated-as -mlittle-endian -Wall -Wundef
> -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common
> -Werror-implicit-function-declaration -Wno-format-security -Oz
> -Wno-maybe-uninitialized -mgeneral-regs-only -Wno-unused-variable
> -Wno-format-invalid-specifier -Wno-gnu -Wno-tautological-compare
> -fno-omit-frame-pointer -fno-optimize-sibling-calls -g -Wno-pointer-sign
> -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(asm_offsets)"
> -D"KBUILD_MODNAME=KBUILD_STR(asm_offsets)" -fverbose-asm -S -o
> arch/arm64/kernel/asm-offsets.s
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/kernel/asm-offsets.c
>  clang-3.9: warning: argument unused during compilation:
> '-mgeneral-regs-only'
>  warning: unknown warning option '-Wno-maybe-uninitialized'; did you mean
> '-Wno-uninitialized'? [-Wunknown-warning-option]
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/kernel/asm-offsets.c:21:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/sched.h:17:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/timex.h:56:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/uapi/linux/timex.h:56:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/time.h:5:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/seqlock.h:29:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/spinlock.h:50:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/preempt.h:9:
>  In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/thread_info.h:54:
>
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include/asm/thread_info.h:79:32:
> warning: variable 'sp' is uninitialized when used here [-Wuninitialized]
>         return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
>                                                   ^~
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include/asm/thread_info.h:78:27:
> note: initialize the variable 'sp' to silence this warning
>         register unsigned long sp asm ("sp");
>                                                       ^
>                                                       = 0
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/kernel/asm-offsets.c:21:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/sched.h:17:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/timex.h:56:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/uapi/linux/timex.h:56:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/time.h:5:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/seqlock.h:29:
> In file included from
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/include/linux/spinlock.h:87:
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include/asm/spinlock.h:61:28:
> error: value '65536' out of range for constraint 'I'
>         : "Q" (lock->owner), "I" (1 << TICKET_SHIFT)
>                                             ^~~~~~~~~~~~~~~~~
> /home/yaojun/llvm-target/nexus5X/llvmlinux/targets/nexus5X/src/android_kernel_nexus5X/arch/arm64/include/asm/spinlock.h:79:9:
> error: value '65536' out of range for constraint 'I'
>         : "I" (1 << TICKET_SHIFT)
>                 ^~~~~~~~~~~~~~~~~
>
> I believe that there are something wrong with cross toolchain.
> I compile Android kernel (android-msm-bullhead-3.10-marshmallow-mr1) by gcc
> and official cross toolchain. Done.
> Then I compile it again by using clang and official cross toolchain, it
> failed.
> I guess I don't give the compiler option correctly. Does it right?
> Thanks!
>
>
>
>
>
> _______________________________________________
> LLVMLinux mailing list
> LLVMLinux at lists.linuxfoundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/llvmlinux


More information about the LLVMLinux mailing list