[fpc-devel] Re: BFD (GNU Binutils) 2.23.1 assertion fail elf32-arm.c:12328

Bruce Tulloch pascal at causal.com
Sat May 25 03:13:46 CEST 2013


The patch and a link to the bug report that generated it is here:

https://dev.openwrt.org/browser/trunk/toolchain/binutils/patches/2.22/500-arm_ld_assert_fix.patch?rev=35812

On Sat, May 25, 2013 at 10:57 AM, Bruce Tulloch <pascal at causal.com> wrote:
> Next step in my ARM cross compilation journey...this error...
>
> It's produced by arm-linux.ld which I've built from binutils upstream
> source (2.23.1) and am using for cross compiling using FPC 2.7.1.
>
> It occurs when building a large project so I've not identified what may
> be triggering it yet. The relevant part of the ld source is:
>
>       if (may_need_local_target_p
>       && elf32_arm_get_plt_info (abfd, eh, r_symndx, &root_plt, &arm_plt))
>     {
>       /* If PLT refcount book-keeping is wrong and too low, we'll
>          see a zero value (going to -1) for the root PLT reference
>          count.  */
>       if (root_plt->refcount >= 0)
>         {
>           BFD_ASSERT (root_plt->refcount != 0);
>           root_plt->refcount -= 1;
>         }
>
> which says the procedure linkage table reference count is already
> zero when it should not be.
>
> An apparently relevant discussion about it is here:
>
>    http://sourceware.org/ml/binutils/2012-04/msg00228.html
>
> according to which, this assert arises in arm-linux-gnueabi when:
>
>     - There's a reference (call-reloc) to a symbol undefined at first
>     reference, preliminary requiring a PLT.
>
>     - The symbols' definition is found in the linked objects and is
>     hidden (or forced local).
>
>     - The referencing section (containing the call-reloc) is GC'd
>     (its global symbols are forced local by the version script and
>     found to be unused).
>
>     Then, the gc_sweep function tries to balance the books by -= 1
>     on the now-GC'd-away PLT (with refcount set to -1 from the
>     already forced-local symbol) which is guarded by a "BFD_ASSERT
>     (root_plt->refcount > 0)". So the assert strikes.
>
> I will try to isolate what part of my build triggers this but I thought
> I'd post details in case anyone more familiar with GNU linking on
> ARM can suggest anything.
>
> Bruce.



More information about the fpc-devel mailing list