Hello,
Thank you for your kind attention to my issue and your help.
I changed the tool chain and tried again. And there is a little progress but still have some problem.
Using --sysroot doesn’t make clang use linker(ld) in the cross tool.
Most important question is how I can make clang use cross tool linker.
Let me show you my experiment and questions below.
There are two questions.
[Run]
./clang -v --save-temps -emit-llvm -ccc-host-triple arm-none-linux-gnueabi --sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc hello.c
[Question]
- How am I supposed to use --sysroot? Though I used “–sysroot” above, Clang uses native linker, “/usr/bin/ld” not the one in the tool chain, “/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/bin/arm-none-linux-gnueabi-ld”.
[Output]
clang version 3.2 (trunk 158784)
Target: arm-none-linux-gnueabi
Thread model: posix
“/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/clang”
-cc1
-triple armv4t-none-linux-gnueabi
-E
-disable-free
-main-file-name hello.c
-mrelocation-model static
-mdisable-fp-elim
-fmath-errno
-mconstructor-aliases
-target-abi aapcs-linux
-target-cpu arm7tdmi
-mfloat-abi soft
-target-feature +soft-float-abi
-target-linker-version 2.22
-momit-leaf-frame-pointer
-v
-resource-dir /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/…/lib/clang/3.2
-isysroot /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
-fmodule-cache-path /var/tmp/clang-module-cache
-internal-isystem /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/local/include
-internal-isystem /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/…/lib/clang/3.2/include
-internal-externc-isystem /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/include
-internal-externc-isystem /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/include
-fno-dwarf-directory-asm
-fdebug-compilation-dir /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin
-ferror-limit 19
-fmessage-length 205
-mstackrealign
-fno-signed-char
-fgnu-runtime
-fobjc-runtime-has-arc
-fobjc-runtime-has-weak
-fobjc-fragile-abi
-fdiagnostics-show-option
-fcolor-diagnostics
-o hello.i
-x c
hello.c
clang -cc1 version 3.2 based upon LLVM 3.2svn default target i386-pc-linux-gnu
ignoring nonexistent directory “/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/local/include”
ignoring nonexistent directory “/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/include”
#include “…” search starts here:
#include <…> search starts here:
/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/…/lib/clang/3.2/include
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/include
End of search list.
“/home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/clang”
-cc1
-triple armv4t-none-linux-gnueabi
-emit-llvm-bc
-disable-free
-main-file-name hello.c
-mrelocation-model static
-mdisable-fp-elim
-fmath-errno
-mconstructor-aliases
-target-abi aapcs-linux
-target-cpu arm7tdmi
-mfloat-abi soft
-target-feature +soft-float-abi
-target-linker-version 2.22
-momit-leaf-frame-pointer
-v
-resource-dir /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/…/lib/clang/3.2
-fno-dwarf-directory-asm
-fdebug-compilation
-dir /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin
-ferror-limit 19
-fmessage-length 205
-mstackrealign
-fno-signed-char
-fgnu-runtime
-fobjc-runtime-has-arc
-fobjc-runtime-has-weak
-fobjc-fragile-abi
-fdiagnostics-show-option
-fcolor-diagnostics
-o hello.o
-x cpp-output
hello.i
clang -cc1 version 3.2 based upon LLVM 3.2svn default target i386-pc-linux-gnu
#include “…” search starts here:
End of search list.
“/usr/bin/ld” <<<<<<<<<< Problem #1 : wrong linker! ld in cross toolchain is needed!
–sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc
-z relro
-X
–hash-style=gnu
–build-id
–eh-frame-hdr
-m armelf_linux_eabi
-dynamic-linker /lib/ld-linux.so.3 <<<<<<<<<< Problem #2 : All libraries have to be of the cross toolchain!
-o a.out
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crt1.o
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crti.o
crtbegin.o <<<<<<<<<< Problem #3 : All libraries have to be of the cross toolchain! (/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o needs to be used!!!)
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/lib
-L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib
-plugin /home/hum/Documents/Projects/clang_llvm/build/Debug+Asserts/bin/…/lib/LLVMgold.so <<<<<<<<<< Problem #4 : There is no LLVMgold.so in llvm/clang bin/
hello.o
-lgcc
–as-needed
-lgcc_s
–no-as-needed
-lc
-lgcc
–as-needed
-lgcc_s
–no-as-needed
crtend.o <<<<<<<<<< Problem #5 : All libraries have to be of the cross toolchain! (/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o needs to be used!!!)
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crtn.o
/usr/bin/ld: unrecognised emulation mode: armelf_linux_eabi
Supported emulations: elf_i386 i386linux elf32_x86_64 elf_x86_64 elf_l1om elf_k1om
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Problem #1 : wrong linker! ld in cross toolchain is needed!
Problem #2 : All libraries have to be of the cross toolchain!
Problem #3 : All libraries have to be of the cross toolchain! (/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o needs to be used!!!)
Problem #4 : There is no LLVMgold.so in llvm/clang bin/
Problem #5 : All libraries have to be of the cross toolchain! (/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o needs to be used!!!)
Workaround #1 : tried to run /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/bin/ld manually.
Workaround #2 : Ignored this library in this manual run.
Workaround #3 : /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o used instead.
Workaround #4 : Ignored this library in this manual run.
Workaround #5 : /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o used instead.
[Workaround - Manual Run]
/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/bin/arm-none-linux-gnueabi-ld --sysroot=/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc -z relro -X --hash-style=gnu --build-id --eh-frame-hdr -m armelf_linux_eabi -o a.out /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crt1.o /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crti.o /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtbegin.o -L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/lib -L/home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib hello.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/lib/gcc/arm-none-linux-gnueabi/4.5.1/armv4t/crtend.o /home/hum/Documents/Projects/arm_toolchain/arm-2010.09/arm-none-linux-gnueabi/libc/usr/lib/crtn.o
[Output]
hello.o: file not recognized: File format not recognized
[Test]
“file hello.o” prints out :
hello.o: LLVM bitcode
[Question]
2. Am I using a wrong cross toolchain? Doesn’t feeding LLVM bitcode to the ARM cross linker make sense?
Thank you very much.
Sincerely
Journeyer J. Joh
2012/6/19 Anton Korobeynikov <anton@korobeynikov.info>