Bug 2659 - Problem with partial linking [Was: Assertion triggered in cofflink.c]
Summary: Problem with partial linking [Was: Assertion triggered in cofflink.c]
Alias: None
Product: binutils
Classification: Unclassified
Component: ld (show other bugs)
Version: 2.20
: P2 critical
Target Milestone: ---
Assignee: unassigned
Depends on:
Reported: 2006-05-14 08:29 UTC by Anton Korobeynikov
Modified: 2014-05-28 19:45 UTC (History)
1 user (show)

See Also:
Host: i686-pc-mingw32
Build: i686-pc-mingw32
Last reconfirmed:

Set of object files on which link failed. (415.10 KB, application/octet-stream)
2006-05-14 08:30 UTC, Anton Korobeynikov
First object file (14.08 KB, application/octet-stream)
2006-05-16 19:53 UTC, Anton Korobeynikov
Second object file (21.19 KB, application/octet-stream)
2006-05-16 19:53 UTC, Anton Korobeynikov
Add check for missing aux entries (276 bytes, patch)
2006-05-24 08:39 UTC, Nick Clifton
Details | Diff
Output from the first pass (29.97 KB, application/octet-stream)
2006-05-24 12:25 UTC, Anton Korobeynikov
The second pass output (29.86 KB, application/octet-stream)
2006-05-24 12:27 UTC, Anton Korobeynikov
Improved check for missing aux entries. (419 bytes, patch)
2006-06-23 08:46 UTC, Nick Clifton
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
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/

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

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).

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
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.

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

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

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.


2006-07-05  Nick Clifton  <nickc@redhat.com>

	PR ld/2659
	* cofflink.c (_bfd_coff_link_input_bfd): Fix selection of aux
	entry when multiple definitions of a symbol are encountered.
Comment 15 Jackie Rosen 2014-02-16 19:43:20 UTC Comment hidden (spam)