Xerxes Rånby
2009-Nov-09 11:50 UTC
[LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue
Prasanth J skrev:> Hi, > > i am a newbie to llvm architecture. i have been trying to port llvm on > ARM target. i am using the following configuration for cross compiling > llvm. > > ../llvm/configure --host=arm-linux --target=arm-linux > --build=i686-linux --prefix=/opt/llvm-arm/ --enable-optimized > --disable-debug \ > --disable-expensive-checks --disable-doxygen \ > --disable-threads --enable-targets=cbe,cpp,arm > > using this configuration i am facing the following compilation error. > pls help me how to resolve this error.. > > /make[1]: Entering directory > `/home/prasanth/LLVM_ARM/llvm-target/obj-new/lib/System' > llvm[1]: Compiling Alarm.cpp for Release build > llvm[1]: Compiling Atomic.cpp for Release build > llvm[1]: Compiling Disassembler.cpp for Release build > llvm[1]: Compiling DynamicLibrary.cpp for Release build > llvm[1]: Compiling Errno.cpp for Release build > llvm[1]: Compiling Host.cpp for Release build > llvm[1]: Compiling IncludeFile.cpp for Release build > llvm[1]: Compiling Memory.cpp for Release build > /home/prasanth/LLVM_ARM/llvm-target/llvm/lib/System/Memory.cpp: In > static member function ‘static void > llvm::sys::Memory::InvalidateInstructionCache(const void*, size_t)’: > /home/prasanth/LLVM_ARM/llvm-target/llvm/lib/System/Memory.cpp:67: > error: ‘__clear_cache’ was not declared in this scope > make[1]: *** > [/home/prasanth/LLVM_ARM/llvm-target/obj-new/lib/System/Release/Memory.o] > Error 1 > make[1]: Leaving directory > `/home/prasanth/LLVM_ARM/llvm-target/obj-new/lib/System' > make: *** [all] Error 1// > > /i can able to compile by commenting the line in Memory.cpp but i am > not sure whether it will affect anything while running llvm on target. > After cross-compilation i copied the binaries to target and i tried to > compile and run a simple helloworld.c application. As clang requires a > working gcc on target i used to "-ccc-clang-archs" options to skip the > need for gcc on target. But still i am getting the following error.By commenting out that line will make your llvm version crash sporadically since you would recreate llvm PR4960 if using the llvm JIT. http://llvm.org/bugs/show_bug.cgi?id=4960 __clear_cache are needed to clear the instructioncache after jitting a function and this gcc builtin are found in gcc 4.3.3 and later or CodeSourcery's 2007Q3/2008Q1 compiler releases and later. Try updating you cross compiler! Cheers Xerxes
Xerxes Rånby
2009-Nov-13 14:09 UTC
[LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue - now the __sync_val_compare_and_swap issue
Prasanth J wrote:> > Hi all, > with reference to the reply below, I downloaded toolchain from > codesourcery (arm-2009q1-203-arm-none-linux-gnueabi) with gcc 4.3.3... > when i compile llvm+clang with this toolchain i am getting the > following error > > make[4]: Entering directory > `/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/tools/clang/tools/c-index-test' > llvm[4]: Linking Release executable c-index-test (without symbols) > /home/prasanth/arm-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: > /home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/Release/bin/c-index-test: > hidden symbol `__sync_val_compare_and_swap_4' in > /home/prasanth/arm-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/libgcc.a(linux-atomic.o) > is referenced by DSO > /home/prasanth/arm-toolchain/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.3/../../../../arm-none-linux-gnueabi/bin/ld: > final link failed: Nonrepresentable section on output > collect2: ld returned 1 exit status > make[4]: *** > [/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/Release/bin/c-index-test] > Error 1 > make[4]: Leaving directory > `/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/tools/clang/tools/c-index-test' > make[3]: *** [all] Error 1 > make[3]: Leaving directory > `/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/tools/clang/tools' > make[2]: *** [all] Error 1 > make[2]: Leaving directory > `/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/tools/clang' > make[1]: *** [clang/.makeall] Error 2 > make[1]: Leaving directory > `/home/prasanth/LLVM_ARM/llvm-with-armgcc433/llvm-obj/tools' > make: *** [all] Error 1 > > can anyone please tell me why am i getting this error and how can i > resolve this? > > Thanks and Regards, > Prasanth J > >You get this linking error because the code contains a gcc atomic intrinsic calls using __sync_val_compare_and_swap . These are GCC built-ins and have only been implemented on ARM using GCC 4.4. http://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Atomic-Builtins.html If you want to use GCC 4.3.3 then you have to implement the __sync_val_compare_and_swap_4 function yourself. Ubuntu Jaunty ARM toolchains have been patched to contains the atomic intrinsics support in GCC 4.3.3 So to solve this issue do one of the following: a) update your code sourcery cross compiler to arm-2009q3 that are using GCC 4.4 b) use the Ubuntu gcc 4.3.3 provided toolchain (i use this when compiling llvm natively on a arm machine without cross compilation) c) implement the __sync_val_compare_and_swap_4 function and patch llvm to enable compilation using older toolchains. Cheers Xerxes
Maybe Matching Threads
- [LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue - now the __sync_val_compare_and_swap issue
- [LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue - now the __sync_val_compare_and_swap issue - now the internal compiler error issue.
- [LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue
- [LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue - now the __sync_val_compare_and_swap issue - now the internal compiler error issue.
- [LLVMdev] Compilation error while cross compiling LLVM for ARM - the __clear_cache issue