[PATCH v2] elf: Set this_idx to -1 for invalid relocations

"H.J. Lu" <[email protected]> Sun, 2 Aug 2026 08:55:00 +0800
Newsgroups gmane.comp.gnu.binutils
Message-ID <CAMe9rOoKvk2rF289Ei4mYh5z7afkWS1a9uacY1fu9iZobJ1iSA@mail.gmail.com>
--000000000000486edc065805e10b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Sun, Aug 2, 2026 at 6:18=E2=80=AFAM H.J. Lu <[email protected]> wrote:
>
> When invalid relocation is reported by elf_link_read_relocs_from_section
> called from lang_gc_sections:
>
> ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >=3D 0x13) for
> offset 0x4 in section `.text.get_tls[get_tls]'
>
> the same error is reported again:
>
> ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >=3D 0x13) for
> offset 0x4 in section `.text.get_tls[get_tls]'
>
> from lang_check_relocs since lang_gc_sections error doesn't stop linker.
> Update elf_link_read_relocs_from_section to set this_idx to -1 for invali=
d
> relocations and return false if this_idx < 0.
>
> PR ld/34448
> * elf-bfd.h (bfd_elf_section_data): Update comments for this_idx.
> * elflink.c (elf_link_read_relocs_from_section): Return false if
> this_idx < 0.  Set this_idx to -1 for invalid relocations.
>

Changes in v2:

1.  Use ELF_SECTION_WITH_INVALID_RELOCATION instead of
-1.
2. Update _bfd_elf_section_from_bfd_section to check this_idx < 0.
3. Call bfd_set_error when this_idx < 0.

--=20
H.J.
---
When invalid relocation is reported by elf_link_read_relocs_from_section
called from lang_gc_sections:

ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >=3D 0x13) for
offset 0x4 in section `.text.get_tls[get_tls]'

the same error is reported again:

ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >=3D 0x13) for
offset 0x4 in section `.text.get_tls[get_tls]'

from lang_check_relocs since lang_gc_sections error doesn't stop linker.
Update elf_link_read_relocs_from_section to set this_idx to -1 for invalid
relocations and return false if this_idx < 0.

PR ld/34448
* elf-bfd.h (ELF_SECTION_WITH_INVALID_RELOCATION): New.
(bfd_elf_section_data): Update comments for this_idx.
* elf.c (_bfd_elf_section_from_bfd_section): Return SHN_BAD if
this_idx < 0.
* elflink.c (elf_link_read_relocs_from_section): Return false if
this_idx < 0.  Set this_idx to ELF_SECTION_WITH_INVALID_RELOCATION
for invalid relocations.

--000000000000486edc065805e10b
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="v2-0001-elf-Set-this_idx-to-1-for-invalid-relocations.patch"
Content-Disposition: attachment; 
	filename="v2-0001-elf-Set-this_idx-to-1-for-invalid-relocations.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_msb363at0>
X-Attachment-Id: f_msb363at0

RnJvbSAxNjI5MjQ5YWE2ZjRmYzIxMWU0MDA4MjQ5ZWU1MzRkZDYxN2RhYzYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhqbC50b29sc0BnbWFpbC5jb20+CkRhdGU6
IFN1biwgMiBBdWcgMjAyNiAwNjowOToxMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjJdIGVsZjog
U2V0IHRoaXNfaWR4IHRvIC0xIGZvciBpbnZhbGlkIHJlbG9jYXRpb25zCgpXaGVuIGludmFsaWQg
cmVsb2NhdGlvbiBpcyByZXBvcnRlZCBieSBlbGZfbGlua19yZWFkX3JlbG9jc19mcm9tX3NlY3Rp
b24KY2FsbGVkIGZyb20gbGFuZ19nY19zZWN0aW9uczoKCmxkOiBwcjM0NDQ4LWJ1Z18xOC5vOiBi
YWQgcmVsb2Mgc3ltYm9sIGluZGV4ICgweGYyMDAwMDA1ID49IDB4MTMpIGZvciBvZmZzZXQgMHg0
IGluIHNlY3Rpb24gYC50ZXh0LmdldF90bHNbZ2V0X3Rsc10nCgp0aGUgc2FtZSBlcnJvciBpcyBy
ZXBvcnRlZCBhZ2FpbjoKCmxkOiBwcjM0NDQ4LWJ1Z18xOC5vOiBiYWQgcmVsb2Mgc3ltYm9sIGlu
ZGV4ICgweGYyMDAwMDA1ID49IDB4MTMpIGZvciBvZmZzZXQgMHg0IGluIHNlY3Rpb24gYC50ZXh0
LmdldF90bHNbZ2V0X3Rsc10nCgpmcm9tIGxhbmdfY2hlY2tfcmVsb2NzIHNpbmNlIGxhbmdfZ2Nf
c2VjdGlvbnMgZXJyb3IgZG9lc24ndCBzdG9wIGxpbmtlci4KVXBkYXRlIGVsZl9saW5rX3JlYWRf
cmVsb2NzX2Zyb21fc2VjdGlvbiB0byBzZXQgdGhpc19pZHggdG8gLTEgZm9yIGludmFsaWQKcmVs
b2NhdGlvbnMgYW5kIHJldHVybiBmYWxzZSBpZiB0aGlzX2lkeCA8IDAuCgoJUFIgbGQvMzQ0NDgK
CSogZWxmLWJmZC5oIChFTEZfU0VDVElPTl9XSVRIX0lOVkFMSURfUkVMT0NBVElPTik6IE5ldy4K
CShiZmRfZWxmX3NlY3Rpb25fZGF0YSk6IFVwZGF0ZSBjb21tZW50cyBmb3IgdGhpc19pZHguCgkq
IGVsZi5jIChfYmZkX2VsZl9zZWN0aW9uX2Zyb21fYmZkX3NlY3Rpb24pOiBSZXR1cm4gU0hOX0JB
RCBpZgoJdGhpc19pZHggPCAwLgoJKiBlbGZsaW5rLmMgKGVsZl9saW5rX3JlYWRfcmVsb2NzX2Zy
b21fc2VjdGlvbik6IFJldHVybiBmYWxzZSBpZgoJdGhpc19pZHggPCAwLiAgU2V0IHRoaXNfaWR4
IHRvIEVMRl9TRUNUSU9OX1dJVEhfSU5WQUxJRF9SRUxPQ0FUSU9OCglmb3IgaW52YWxpZCByZWxv
Y2F0aW9ucy4KClNpZ25lZC1vZmYtYnk6IEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+Ci0t
LQogYmZkL2VsZi1iZmQuaCB8ICA2ICsrKysrLQogYmZkL2VsZi5jICAgICB8IDEzICsrKysrKysr
KystLS0KIGJmZC9lbGZsaW5rLmMgfCAxMiArKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MjcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9iZmQvZWxmLWJm
ZC5oIGIvYmZkL2VsZi1iZmQuaAppbmRleCBiMzU0Zjc3ZjQyMS4uNzM2YjZlNDEyMGUgMTAwNjQ0
Ci0tLSBhL2JmZC9lbGYtYmZkLmgKKysrIGIvYmZkL2VsZi1iZmQuaApAQCAtMTg4OSw3ICsxODg5
LDExIEBAIHN0cnVjdCBiZmRfZWxmX3NlY3Rpb25fZGF0YQogICAgICB3aXRoIHRoaXMgc2VjdGlv
biwgaWYgYW55LiAgKi8KICAgc3RydWN0IGJmZF9lbGZfc2VjdGlvbl9yZWxvY19kYXRhIHJlbCwg
cmVsYTsKIAotICAvKiBUaGUgRUxGIHNlY3Rpb24gbnVtYmVyIG9mIHRoaXMgc2VjdGlvbi4gICov
CisgIC8qIFRoZSBFTEYgc2VjdGlvbiBudW1iZXIgb2YgdGhpcyBzZWN0aW9uLiAgQSB2YWx1ZSBv
ZiA8IDAgbWVhbnMgdGhhdAorICAgICBzb21lIGNvbnRlbnRzIGluIHRoZSBzZWN0aW9uIGFyZSBp
bnZhbGlkOgorICAgICAtKDEgPDwgMCk6IFNlY3Rpb24gd2l0aCBpbnZhbGlkIHJlbG9jYXRpb24u
CisgICAqLworI2RlZmluZSBFTEZfU0VDVElPTl9XSVRIX0lOVkFMSURfUkVMT0NBVElPTgktKDEg
PDwgMCkKICAgaW50IHRoaXNfaWR4OwogCiAgIC8qIFVzZWQgYnkgdGhlIGJhY2tlbmQgbGlua2Vy
IHdoZW4gZ2VuZXJhdGluZyBhIHNoYXJlZCBsaWJyYXJ5IHRvCmRpZmYgLS1naXQgYS9iZmQvZWxm
LmMgYi9iZmQvZWxmLmMKaW5kZXggZWExMjc5MTliOWYuLmJkYTMxY2EyZmZmIDEwMDY0NAotLS0g
YS9iZmQvZWxmLmMKKysrIGIvYmZkL2VsZi5jCkBAIC03MzAzLDkgKzczMDMsMTYgQEAgX2JmZF9l
bGZfc2VjdGlvbl9mcm9tX2JmZF9zZWN0aW9uIChiZmQgKmFiZmQsIHN0cnVjdCBiZmRfc2VjdGlv
biAqYXNlY3QpCiAgIGVsZl9iYWNrZW5kX2RhdGEgKmJlZDsKICAgdW5zaWduZWQgaW50IHNlY19p
bmRleDsKIAotICBpZiAoZWxmX3NlY3Rpb25fZGF0YSAoYXNlY3QpICE9IE5VTEwKLSAgICAgICYm
IGVsZl9zZWN0aW9uX2RhdGEgKGFzZWN0KS0+dGhpc19pZHggIT0gMCkKLSAgICByZXR1cm4gZWxm
X3NlY3Rpb25fZGF0YSAoYXNlY3QpLT50aGlzX2lkeDsKKyAgaWYgKGVsZl9zZWN0aW9uX2RhdGEg
KGFzZWN0KSAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChlbGZfc2VjdGlvbl9kYXRhIChhc2Vj
dCktPnRoaXNfaWR4ID4gMCkKKwlyZXR1cm4gZWxmX3NlY3Rpb25fZGF0YSAoYXNlY3QpLT50aGlz
X2lkeDsKKyAgICAgIGVsc2UgaWYgKGVsZl9zZWN0aW9uX2RhdGEgKGFzZWN0KS0+dGhpc19pZHgg
PCAwKQorCXsKKwkgIGJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl9ub25yZXByZXNlbnRhYmxlX3Nl
Y3Rpb24pOworCSAgcmV0dXJuIFNITl9CQUQ7CisJfQorICAgIH0KIAogICBpZiAoYmZkX2lzX2Fi
c19zZWN0aW9uIChhc2VjdCkpCiAgICAgc2VjX2luZGV4ID0gU0hOX0FCUzsKZGlmZiAtLWdpdCBh
L2JmZC9lbGZsaW5rLmMgYi9iZmQvZWxmbGluay5jCmluZGV4IDBhZjk4MzdhMjhjLi4yOTE1Nzgw
NDMzOSAxMDA2NDQKLS0tIGEvYmZkL2VsZmxpbmsuYworKysgYi9iZmQvZWxmbGluay5jCkBAIC0y
ODA4LDYgKzI4MDgsMTQgQEAgZWxmX2xpbmtfcmVhZF9yZWxvY3NfZnJvbV9zZWN0aW9uIChiZmQg
KmFiZmQsCiAgIHNpemVfdCBuc3ltczsKICAgdm9pZCAqZXh0ZXJuYWxfcmVsb2NzID0gKmV4dGVy
bmFsX3JlbG9jc19hZGRyOwogCisgIC8qIFJldHVybiBmYWxzZSBpZiBzb21lIHJlbG9jYXRpb25z
IGluIHRoZSBzZWN0aW9uIGFyZSBpbnZhbGlkIGR1cmluZworICAgICB0aGUgcHJldmlvdXMgY2Fs
bC4gICovCisgIGlmIChlbGZfc2VjdGlvbl9kYXRhIChzZWMpLT50aGlzX2lkeCA8IDApCisgICAg
eworICAgICAgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX2JhZF92YWx1ZSk7CisgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCiAgIC8qIFBvc2l0aW9uIG91cnNlbHZlcyBhdCB0aGUgc3RhcnQg
b2YgdGhlIHNlY3Rpb24uICAqLwogICBpZiAoYmZkX3NlZWsgKGFiZmQsIHNoZHItPnNoX29mZnNl
dCwgU0VFS19TRVQpICE9IDApCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjg1OCw2ICsyODY2LDgg
QEAgZWxmX2xpbmtfcmVhZF9yZWxvY3NfZnJvbV9zZWN0aW9uIChiZmQgKmFiZmQsCiAJCSAgICIg
Zm9yIG9mZnNldCAlIyIgUFJJeDY0ICIgaW4gc2VjdGlvbiBgJXBBJyIpLAogCQkgYWJmZCwgKHVp
bnQ2NF90KSByX3N5bW5keCwgKHVuc2lnbmVkIGxvbmcpIG5zeW1zLAogCQkgKHVpbnQ2NF90KSBp
cmVsYS0+cl9vZmZzZXQsIHNlYyk7CisJICAgICAgZWxmX3NlY3Rpb25fZGF0YSAoc2VjKS0+dGhp
c19pZHgKKwkJPSBFTEZfU0VDVElPTl9XSVRIX0lOVkFMSURfUkVMT0NBVElPTjsKIAkgICAgICBi
ZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfYmFkX3ZhbHVlKTsKIAkgICAgICByZXR1cm4gZmFsc2U7
CiAJICAgIH0KQEAgLTI4NzEsNiArMjg4MSw4IEBAIGVsZl9saW5rX3JlYWRfcmVsb2NzX2Zyb21f
c2VjdGlvbiAoYmZkICphYmZkLAogCSAgICAgICAiIHdoZW4gdGhlIG9iamVjdCBmaWxlIGhhcyBu
byBzeW1ib2wgdGFibGUiKSwKIAkgICAgIGFiZmQsICh1aW50NjRfdCkgcl9zeW1uZHgsCiAJICAg
ICAodWludDY0X3QpIGlyZWxhLT5yX29mZnNldCwgc2VjKTsKKwkgIGVsZl9zZWN0aW9uX2RhdGEg
KHNlYyktPnRoaXNfaWR4CisJICAgID0gRUxGX1NFQ1RJT05fV0lUSF9JTlZBTElEX1JFTE9DQVRJ
T047CiAJICBiZmRfc2V0X2Vycm9yIChiZmRfZXJyb3JfYmFkX3ZhbHVlKTsKIAkgIHJldHVybiBm
YWxzZTsKIAl9Ci0tIAoyLjU1LjAKCg==
--000000000000486edc065805e10b--