or1k: Fix issue with plt link failure for local calls
authorStafford Horne <shorne@gmail.com>
Thu, 6 May 2021 11:51:24 +0000 (20:51 +0900)
committerStafford Horne <shorne@gmail.com>
Thu, 6 May 2021 11:51:24 +0000 (20:51 +0900)
commita76ef689b60405e494cb99e198acf3c82f467f7d
tree71bb36376cb73095505f6e0fb06dbc58bc4dac52
parent0618ecf6eb99dce0278102a88f622f28e3ecd837
or1k: Fix issue with plt link failure for local calls

When building protobuf we were seeing the assert failure:

    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    /home/giuliobenetti/git/upstream/or1k-binutils-2.36.1/host/lib/gcc/or1k-buildroot-linux-uclibc/9.3.0/../../../../or1k-buildroot-linux-uclibc/bin/ld:
    BFD (GNU Binutils) 2.36.1 assertion fail elf32-or1k.c:2377
    collect2: error: ld returned 1 exit status

This failure happens while writing out PLT entries, there is a check
"BFD_ASSERT (h->dynindx != -1)" to confirm all plt entries have dynamic
symbol attributes.  This was failing for symbols that were
"forced_local" in previous linking code.

The fix adds logic to or1k_elf_adjust_dynamic_symbol to identify
"forced_local" symbols and exclude them from the the PLT.

bfd/ChangeLog:

PR 27624
* elf32-or1k.c (or1k_elf_adjust_dynamic_symbol): Change
condition used to cleanup plt entries to cleanup forced local
entries.

Cc: Giulio Benetti <giulio.benetti@benettiengineering.com>
bfd/ChangeLog
bfd/elf32-or1k.c