PATCH: PR ld/12730: regression] crash when allocating in a static constructor
Fri May 6 13:23:00 GMT 2011
On Thu, May 5, 2011 at 7:12 AM, Alan Modra <firstname.lastname@example.org> wrote:
> On Thu, May 05, 2011 at 06:26:15AM -0700, H.J. Lu wrote:
>> On Thu, May 5, 2011 at 1:27 AM, Alan Modra <email@example.com> wrote:
>> > On Wed, May 04, 2011 at 10:18:32PM -0700, H.J. Lu wrote:
>> >> When we put .ctors into .init_array, we have to reverse copy .ctors secton.
>> >> Otherwise, constructor function may not work with C++ run-time library
>> >> correctly. OK for trunk?
>> > What about .dtors? You have the same problem there. I suspect, but
>> You are right. Here is the updated patch to handle .dtors sections
>> with the updated testcase. OK for trunk?
>> > haven't verified, that .ctors.* and .dtors.* also need reversing. If
>> > that is true then it would be better to do your reversing trick for
>> > anything going to the .init_array output section that isn't named
>> > .init_array* and similarly for .fini_array.
> Are you sure there is no need to reverse .ctors.* and .dtors.*?
> The reason I recommended testing the output section is that limits
> section reversal to that particular output section. I will not
> approve a patch that ignores this recommendation. You also should
> remove reverse_copy_ctors. That's plain wrong. Consider people
> linking using a custom (old) script that does not put .ctors into
>> > You also need to reverse any dynamic relocations applying to the
>> > sections you are reversing.
>> It isn't a problem since we apply relocations on the input sections
>> first and copy relocated input sections to output where I reverse
>> copy .ctors/.dtors sections if needed.
> Try compiling your testcase as a PIE or shared lib on a target that
> uses RELA. I haven't tried it, but I think the dynamic RELATIVE
> relocs you'll get in .ctors will undo your section reversing.
I will fix it.
More information about the Binutils