[Patch] ld plugin: Fix known_used with CLAIM_FILE_HOOK_V2 for elf_link_add_archive_symbols [GCC PR122432]

H.J. Lu hjl.tools@gmail.com
Tue Oct 28 12:29:15 GMT 2025
On Tue, Oct 28, 2025 at 8:35 AM Tobias Burnus <tburnus@baylibre.com> wrote:
>
> Hi HJ,
>
> H.J. Lu wrote:
>
> I can't reproduce the issue. If the common symbol comes first is an issue,
> you can create a testcase with 2 separate sources:
>
> 1.  a.c only with a common symbol.
> 2.  b.c uses the common symbol.
>
> Unfortunately, it is not that simple - I have now played
> around with several variants – and the real problem is that
>   'h = archive_symbol_lookup (…)'
> tends to be NULL for common symbols. And when turning it
> into non-NULL, it tends to be
>   h->type == bfd_link_hash_undefined
> which then gives a call to add_archive_element, which in
> turn calls the hook with known_used = true.
>
> For the here failing testcase of the PR, I get for /liblocoa.a:
>
> psb_d_oacc_mlt_v_2_ → h == NULL
> mpi_fortran_argv_null_ → h->type == bfd_link_hash_common
> → hook call with known_used = false;
>
> second loop
> ... several with include[i] = 0 until i=10:
> __psb_d_oacc_vect_mod_MOD___def_init_psb_d_oacc_vect_mod_Psb_d_vect_oacc
> For all i >= 10 now include[i] = true;
>
> Then a third loop: All remaining symbols get include[i] = true.
>
> * * *
>
> Without the common symbol, the large program has first h == NULL
> until __psb_d_oacc_vect_mod_MOD___def_init_psb_d_oacc_vect_mod_Psb_d_vect_oacc
> which is bfd_link_undefine - and for which add_archive_element
> is called.
>
> * * *
>
> Without a testcase
>
> There *is* a testcase attached to https://gcc.gnu.org/PR122432
>
> and others can't reproduce the issue, it is
> very hard to tell if your patch is correct or not.
>
> As you started the discussion at PR122432, I continued there.
> I hope my annotations on how to check for the correctness help.
>
> * * *
>
> Please first create a binutils bug report.
>
> I am happy to create a new binutils bug – but I am not sure when. As, currently, the discussion is in the GCC PR, I am unsure when it makes most sense to open the Binutils bug and continue there.
>
> Tobias

Please try the patch in

https://sourceware.org/bugzilla/show_bug.cgi?id=33584

-- 
H.J.


More information about the Binutils mailing list