|Summary:||Problem with partial linking [Was: Assertion triggered in cofflink.c]|
|Product:||binutils||Reporter:||Anton Korobeynikov <asl>|
Set of object files on which link failed.
First object file
Second object file
Add check for missing aux entries
Output from the first pass
The second pass output
Improved check for missing aux entries.
Description Anton Korobeynikov 2006-05-14 08:29:36 UTC
While linking some big c++ project (Latest LLVM CVS snapshot) using mingw32's binutils (2.16.91 20060119) I've got the folowing message: f:\research\mingw\bin\ld.exe: BFD 2.16.91 20060119 assertion fail ../../src/bfd/ cofflink.c:1926 It seems, that some other projects GeOs) have just same problems. I've reduced huge set of object files just to 2. The same assertion is triggered with the latest binutils snapshot both on mingw32 and cygwin platforms.
Comment 1 Anton Korobeynikov 2006-05-14 08:30:49 UTC
Created attachment 1023 [details] Set of object files on which link failed.
Comment 2 Anton Korobeynikov 2006-05-16 19:52:02 UTC
I've digged into the problem some more deep. The main problem is in file named LLVMSelectionDAG.o, which can be found in the prev. attach. This file was produced as 'ld -r' output from 9 object files. I've reduced the full set to just 2 files, running ld on which produces an assertion. So, if I do: ld -r -o LLVMSelectionDAG.o ScheduleDAGList.o ScheduleDAGRRList.o ld -o LLVMSelectionDAG.o I'm getting an assertion (even more, if I just do ld -r LLVMSelectionDAG.o -o LLVMSelectionDAG_1.o, I'm getting an exception). Seems, that something is broken in the partial link...
Comment 3 Anton Korobeynikov 2006-05-16 19:53:07 UTC
Created attachment 1027 [details] First object file
Comment 4 Anton Korobeynikov 2006-05-16 19:53:37 UTC
Created attachment 1028 [details] Second object file
Comment 5 Nick Clifton 2006-05-24 08:39:02 UTC
Created attachment 1047 [details] Add check for missing aux entries
Comment 6 Nick Clifton 2006-05-24 08:40:30 UTC
Hi Anton, I think that this is a case of a missing check in bfd_coff_link_input_bfd, so please could you try the uploaded patch and let me know if it works on a real world test, (ie your build environment). Cheers Nick
Comment 7 Anton Korobeynikov 2006-05-24 12:23:08 UTC
Unfortunately, patch doesn't work for me. Assertion is still triggered. I'm attaching the file from the first linker pass (ld -r -o LLVMSelectionDAG.o ScheduleDAGList.o ScheduleDAGRRList.o).
Comment 8 Anton Korobeynikov 2006-05-24 12:25:40 UTC
Created attachment 1048 [details] Output from the first pass This is the output from 'ld -r -o LLVMSelectionDAG.o ScheduleDAGList.o ScheduleDAGRRList.o'
Comment 9 Anton Korobeynikov 2006-05-24 12:27:12 UTC
Created attachment 1049 [details] The second pass output The output from the second pass: `ld -r -o LLVMSelectionDAG_1.o LLVMSelectionDAG.o`. Assertion is triggered, but file is actually not null.
Comment 10 Nick Clifton 2006-06-23 08:45:28 UTC
Hi Anton, Sorry about the delay in getting back to you. I am a bit swamped at the moment. I am uploading a revised patch which I think should take care of this issue now. The problem appears to be the fact that there are multiple defintions of a symbol, but only one of them has an aux entry and the wrong version of the symbol was being selecetd when the code wanted to process the aux data. Cheers Nick
Comment 11 Nick Clifton 2006-06-23 08:46:30 UTC
Created attachment 1114 [details] Improved check for missing aux entries.
Comment 12 Anton Korobeynikov 2006-06-24 12:15:15 UTC
Nick, Now no assertions at all. Files look fine. However, I don't have a complete build system & sources which the attached .o files was taken from. So I don't know the results of linking. I'll let you know the results of linking the whole program (I hope, everything will be ok) in 4-5 days.
Comment 13 Anton Korobeynikov 2006-07-03 07:37:40 UTC
Nick! Everything is building ok. So, this bug is definitely fixed by now. Thanks alot!
Comment 14 Nick Clifton 2006-07-05 10:22:29 UTC
Hi Anton, Great - I have checked the revised patch in together with this ChangeLog entry. Cheers Nick bfd/ChangeLog 2006-07-05 Nick Clifton <email@example.com> PR ld/2659 * cofflink.c (_bfd_coff_link_input_bfd): Fix selection of aux entry when multiple definitions of a symbol are encountered.