[v1] LoongArch: Use more appropriate assertions for the relocation of TLS LE
Commit Message
Patches introduced in the GCC mainline:
commit 8cad8f94b450be9b73d07bdeef7fa1778d3f2b96
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Fri Sep 5 15:40:51 2025 -0700
c: Update TLS model after processing a TLS variable
Set a tentative TLS model in grokvardecl and update TLS mode with
the default TLS access model after a TLS variable has been fully
processed if the default TLS access model is stronger,
triggered a linker error when building glibc using build-many-glibcs.py.
See: https://sourceware.org/pipermail/binutils/2025-September/144225.html
This fix uses more appropriate assertions.
---
bfd/elfnn-loongarch.c | 2 +-
ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp | 12 ++++++++++++
ld/testsuite/ld-loongarch-elf/undefweak_le.s | 7 +++++++
3 files changed, 20 insertions(+), 1 deletion(-)
create mode 100644 ld/testsuite/ld-loongarch-elf/undefweak_le.s
Comments
On Tue, Sep 16, 2025 at 1:48 AM Lulu Cai <cailulu@loongson.cn> wrote:
>
> Patches introduced in the GCC mainline:
>
> commit 8cad8f94b450be9b73d07bdeef7fa1778d3f2b96
> Author: H.J. Lu <hjl.tools@gmail.com>
> Date: Fri Sep 5 15:40:51 2025 -0700
>
> c: Update TLS model after processing a TLS variable
>
> Set a tentative TLS model in grokvardecl and update TLS mode with
> the default TLS access model after a TLS variable has been fully
> processed if the default TLS access model is stronger,
>
> triggered a linker error when building glibc using build-many-glibcs.py.
>
> See: https://sourceware.org/pipermail/binutils/2025-September/144225.html
>
> This fix uses more appropriate assertions.
Please add "PR ld/33427" in the commit log.
> ---
> bfd/elfnn-loongarch.c | 2 +-
> ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp | 12 ++++++++++++
> ld/testsuite/ld-loongarch-elf/undefweak_le.s | 7 +++++++
> 3 files changed, 20 insertions(+), 1 deletion(-)
> create mode 100644 ld/testsuite/ld-loongarch-elf/undefweak_le.s
>
> diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
> index 8beb3d84079..d10f9f6bd0f 100644
> --- a/bfd/elfnn-loongarch.c
> +++ b/bfd/elfnn-loongarch.c
> @@ -4401,7 +4401,7 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
> case R_LARCH_TLS_LE_LO12_R:
> case R_LARCH_TLS_LE64_LO20:
> case R_LARCH_TLS_LE64_HI12:
> - BFD_ASSERT (resolved_local && elf_hash_table (info)->tls_sec);
> + BFD_ASSERT (bfd_link_executable (info));
>
> relocation += rel->r_addend;
> relocation = tlsoff (info, relocation);
> diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
> index a33727f2efd..5bc48b28ca8 100644
> --- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
> +++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
> @@ -172,6 +172,18 @@ if [istarget "loongarch64-*-*"] {
> "desc-ie-norelax" \
> ] \
> ] \
> +
> + run_ld_link_tests \
> + [list \
> + [list \
> + "undefind weak with tls le" \
> + "" "-e0" \
> + "" \
> + {undefweak_le.s} \
> + {} \
> + "undefweak_le" \
> + ] \
> + ]
> }
>
> if [istarget "loongarch64-*-*"] {
> diff --git a/ld/testsuite/ld-loongarch-elf/undefweak_le.s b/ld/testsuite/ld-loongarch-elf/undefweak_le.s
> new file mode 100644
> index 00000000000..6e730182448
> --- /dev/null
> +++ b/ld/testsuite/ld-loongarch-elf/undefweak_le.s
> @@ -0,0 +1,7 @@
> +_start:
> + lu12i.w $t0,%le_hi20_r(undefweak_le)
> + add.d $t0,$t0,$tp,%le_add_r(undefweak_le)
> + ld.d $t0,$t0,%le_lo12_r(undefweak_le)
> +
> + .weak undefweak_le
> + .hidden undefweak_le
> --
> 2.34.1
>
On 9/16/25 8:16 PM, H.J. Lu wrote:
> On Tue, Sep 16, 2025 at 1:48 AM Lulu Cai <cailulu@loongson.cn> wrote:
>> Patches introduced in the GCC mainline:
>>
>> commit 8cad8f94b450be9b73d07bdeef7fa1778d3f2b96
>> Author: H.J. Lu <hjl.tools@gmail.com>
>> Date: Fri Sep 5 15:40:51 2025 -0700
>>
>> c: Update TLS model after processing a TLS variable
>>
>> Set a tentative TLS model in grokvardecl and update TLS mode with
>> the default TLS access model after a TLS variable has been fully
>> processed if the default TLS access model is stronger,
>>
>> triggered a linker error when building glibc using build-many-glibcs.py.
>>
>> See: https://sourceware.org/pipermail/binutils/2025-September/144225.html
>>
>> This fix uses more appropriate assertions.
> Please add "PR ld/33427" in the commit log.
Thank you for the reminder. I will send a v2 to add it.
>> ---
>> bfd/elfnn-loongarch.c | 2 +-
>> ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp | 12 ++++++++++++
>> ld/testsuite/ld-loongarch-elf/undefweak_le.s | 7 +++++++
>> 3 files changed, 20 insertions(+), 1 deletion(-)
>> create mode 100644 ld/testsuite/ld-loongarch-elf/undefweak_le.s
>>
>> diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
>> index 8beb3d84079..d10f9f6bd0f 100644
>> --- a/bfd/elfnn-loongarch.c
>> +++ b/bfd/elfnn-loongarch.c
>> @@ -4401,7 +4401,7 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
>> case R_LARCH_TLS_LE_LO12_R:
>> case R_LARCH_TLS_LE64_LO20:
>> case R_LARCH_TLS_LE64_HI12:
>> - BFD_ASSERT (resolved_local && elf_hash_table (info)->tls_sec);
>> + BFD_ASSERT (bfd_link_executable (info));
>>
>> relocation += rel->r_addend;
>> relocation = tlsoff (info, relocation);
>> diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
>> index a33727f2efd..5bc48b28ca8 100644
>> --- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
>> +++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
>> @@ -172,6 +172,18 @@ if [istarget "loongarch64-*-*"] {
>> "desc-ie-norelax" \
>> ] \
>> ] \
>> +
>> + run_ld_link_tests \
>> + [list \
>> + [list \
>> + "undefind weak with tls le" \
>> + "" "-e0" \
>> + "" \
>> + {undefweak_le.s} \
>> + {} \
>> + "undefweak_le" \
>> + ] \
>> + ]
>> }
>>
>> if [istarget "loongarch64-*-*"] {
>> diff --git a/ld/testsuite/ld-loongarch-elf/undefweak_le.s b/ld/testsuite/ld-loongarch-elf/undefweak_le.s
>> new file mode 100644
>> index 00000000000..6e730182448
>> --- /dev/null
>> +++ b/ld/testsuite/ld-loongarch-elf/undefweak_le.s
>> @@ -0,0 +1,7 @@
>> +_start:
>> + lu12i.w $t0,%le_hi20_r(undefweak_le)
>> + add.d $t0,$t0,$tp,%le_add_r(undefweak_le)
>> + ld.d $t0,$t0,%le_lo12_r(undefweak_le)
>> +
>> + .weak undefweak_le
>> + .hidden undefweak_le
>> --
>> 2.34.1
>>
>
@@ -4401,7 +4401,7 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_LARCH_TLS_LE_LO12_R:
case R_LARCH_TLS_LE64_LO20:
case R_LARCH_TLS_LE64_HI12:
- BFD_ASSERT (resolved_local && elf_hash_table (info)->tls_sec);
+ BFD_ASSERT (bfd_link_executable (info));
relocation += rel->r_addend;
relocation = tlsoff (info, relocation);
@@ -172,6 +172,18 @@ if [istarget "loongarch64-*-*"] {
"desc-ie-norelax" \
] \
] \
+
+ run_ld_link_tests \
+ [list \
+ [list \
+ "undefind weak with tls le" \
+ "" "-e0" \
+ "" \
+ {undefweak_le.s} \
+ {} \
+ "undefweak_le" \
+ ] \
+ ]
}
if [istarget "loongarch64-*-*"] {
new file mode 100644
@@ -0,0 +1,7 @@
+_start:
+ lu12i.w $t0,%le_hi20_r(undefweak_le)
+ add.d $t0,$t0,$tp,%le_add_r(undefweak_le)
+ ld.d $t0,$t0,%le_lo12_r(undefweak_le)
+
+ .weak undefweak_le
+ .hidden undefweak_le