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. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel