2011/4/28 Chung-Lin Tang <clt...@codesourcery.com>: > I think I've seen this assert fail myself before, a long time ago... > > While this is probably a BFD bug of some sort, do you happen to have > assembly code source files among the .o objects? Could you try adding > ".eabi_attribute 27, 3" to the asm files and see if it links?
Chung-Lin, thanks! i do have asm codes. after adding ".eabi_attribute 27, 3", nothing different. i am just a kernel engineer and an user to toolchain, i don't know too much well about toolchain like you. but i'll try to figure out more so that you can help. Anyway, thank you guys very much. > > > On 2011/4/28 06:06 PM, Barry Song wrote: >> Hi Andrew, >> >> 2011/4/28 Andrew Stubbs <andrew.stu...@linaro.org >> <mailto:andrew.stu...@linaro.org>>: >>> On 28/04/11 09:59, Barry Song wrote: >>>> >>>> my other two mails explain what happened, in fact link input file is >>>> simple: >>> >>> There must be more than one input file to the link, otherwise I >> believe you >>> wouldn't see this problem. We need to find out what the other ones are. >>> >>>> ASSERT found just because we are using -nostdlib flag since we don't >>>> call any library. This flag changed out_attr[Tag_FP_arch] to 0, which >>>> is generically 4 for linaro new toolchain by watching a normal >>>> compile/link process. >>> >>> The -nostdlib flag only changes the list of libraries that will be linked. >>> It shouldn't change any attributes directly. >>> >>> Here's how a link should work, if I understand it correctly: >>> >>> 1. The linker creates an empty output file (conceptually). This file will >>> have all attributes set to default settings (i.e. zero). >>> >>> 2. Each input file is then merged into the output file in turn. New >> sections >>> are added, or existing ones appended to, and the symbol tables and >> such are >>> built incrementally. At each step, the attributes are merged from the >> input >>> file to the output file. >>> >>> For the first input file, the attribute merge is basically just a >> copy. Both >>> Tag_FP_arch and Tag_ABI_HardFP_use should be zero in the (empty) output >>> file, so we should not be able to hit this condition. >>> >>> For the second input file, the attribute merge is more complicated. >> For each >>> attribute the result will be either be the union, or the intersection >> of the >>> two attributes, or else it will throw an error. >>> >>> So, it should be that this can't happen, but clearly it does, so something >>> is broken, but I can't tell what without reproducing it, or at least >> seeing >>> what inputs you're dealing with. >>> >>> So, please help me figure out what the full set of input files are and >> I see >>> if I can work from there. >> >> Thanks very much. i can't send you all source codes, but i can send you >> the related binaries causing ASSERT. All link log is as below. Note the >> red part is where ASSERT happen. Input is dir_soc.o, output is a elf >> file. It is the first time the elf file begin to born. >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/nand_controller/soc_nand/dir_soc_nand.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/nand_controller/dir_nand_controller.o >> >> -------------------------------------! >> >> make[6]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/chip/nand_controller' >> make[6]: Entering directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/chip/zone_mgr' >> make[6]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/chip/zone_mgr' >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/nand_controller/dir_nand_controller.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/dir_chip.o >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/zone_mgr/dir_zone_mgr.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/chip/dir_chip.o >> >> -------------------------------------! >> >> make[5]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/chip' >> make[5]: Entering directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/prima2cb' >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/prima2cb/nand/dir_nand.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/prima2cb/dir_prima2cb.o >> >> -------------------------------------! >> >> make[5]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2/prima2cb' >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/prima2cb/dir_prima2cb.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/prima2/dir_prima2.o >> >> -------------------------------------! >> >> make[4]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc/prima2' >> make[3]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src/soc' >> ------------------------------------------ >> Building NANDDisk.bin >> /home/vmuser/development/toolchain/build-toolchain/tools-64/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.3/../../../../arm-none-linux-gnueabi/bin/ld: >> mode armelf_linux_eabi >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/common/dir_common.o >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/dir_soc.o >> (../stdlib/libgcc.a)_udivsi3.o >> (../stdlib/libgcc.a)_dvmd_tls.o >> (../stdlib/libgcc.a)_aeabi_uldivmod.o >> (../stdlib/libgcc.a)_muldi3.o >> (../stdlib/libgcc.a)bpabi.o >> (../stdlib/libgcc.a)_divdi3.o >> (../stdlib/libgcc.a)_udivdi3.o >> (../stdlib/libgcc.a)unwind-arm.o >> (../stdlib/libgcc.a)libunwind.o >> (../stdlib/libgcc.a)pr-support.o >> (../stdlib/libgcc.a)_clz.o >> >> >> !------------------------------------- >> !!!!!!!!!!!!!!!! out_attr[i].i:0, out_attr[Tag_ABI_HardFP_use].i:3, >> in_attr[i].i:2, in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk/soc/dir_soc.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> !!!!!!!!!!!!!!!!!!!!! >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:0 >> ibfd: _udivsi3.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:0 >> ibfd: _dvmd_tls.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:0 >> ibfd: _aeabi_uldivmod.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: _muldi3.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: bpabi.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: _divdi3.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: _udivdi3.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: unwind-arm.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:0 >> ibfd: libunwind.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: pr-support.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> >> >> !------------------------------------- >> out_attr[i].i:2, out_attr[Tag_ABI_HardFP_use].i:3, in_attr[i].i:2, >> in_attr[Tag_ABI_HardFP_use].i:3 >> ibfd: _clz.o >> obfd: >> /home/vmuser/development/svn/Current/Linux/Main/out/prima2cb/.obj/firmware/nanddisk/NANDDisk.elf >> >> -------------------------------------! >> >> Size: 135168 bytes. >> Binary Done! Success! >> ------------------------------------------ >> make[2]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk/src' >> make[1]: Leaving directory >> `/home/vmuser/development/svn/Current/Linux/Main/firmware/nanddisk' >> >>> >>> Thanks >>> >>> Andrew >>> >> >> >> >> >> _______________________________________________ >> linaro-toolchain mailing list >> linaro-toolchain@lists.linaro.org >> http://lists.linaro.org/mailman/listinfo/linaro-toolchain > > _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain