public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Lulu Cai <cailulu@loongson.cn>
To: Tatsuyuki Ishi <ishitatsuyuki@gmail.com>
Cc: binutils@sourceware.org, xuchenghua@loongson.cn,
	chenglulu@loongson.cn, liuzhensong@loongson.cn,
	mengqinggang@loongson.cn, xry111@xry111.site,
	i.swmail@xen0n.name, maskray@google.com, luweining@loongson.cn,
	wanglei@loongson.cn, hejinyang@loongson.cn
Subject: Re: [PATCH v5 4/5] LoongArch: Add support for TLS LD/GD/DESC relaxation
Date: Fri, 29 Dec 2023 18:36:35 +0800	[thread overview]
Message-ID: <c22d3baa-27a8-c9af-2786-d1ba5dcf6fb2@loongson.cn> (raw)
In-Reply-To: <D7C6A4AD-4225-480B-BFF3-1AA60FA04802@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 64683 bytes --]

On 2023/12/28 at 10:38 PM, Tatsuyuki Ishi Wrote:
>> On Dec 22, 2023, at 20:42, Lulu Cai <cailulu@loongson.cn> wrote:
>>
>> From: mengqinggang <mengqinggang@loongson.cn>
>>
>> The pcalau12i + addi.d of TLS LD/GD/DESC relax to pcaddi.
>> Relaxation is only performed when the TLS model transition is not 
>> possible.
>> ---
>> bfd/bfd-in2.h                                 |   3 +
>> bfd/elfnn-loongarch.c                         | 174 +++++++-
>> bfd/elfxx-loongarch.c                         |  60 +++
>> bfd/libbfd.h                                  |   3 +
>> bfd/reloc.c                                   |   7 +
>> gas/config/tc-loongarch.c                     |   8 +-
>> gas/testsuite/gas/loongarch/macro_op.d        | 128 +++---
>> gas/testsuite/gas/loongarch/macro_op_32.d     | 120 +++---
>> .../gas/loongarch/macro_op_large_abs.d        | 160 +++----
>> .../gas/loongarch/macro_op_large_pc.d         | 160 +++----
>> include/elf/loongarch.h                       |   4 +
>> ld/testsuite/ld-loongarch-elf/macro_op.d      | 391 +++++++++---------
>> ld/testsuite/ld-loongarch-elf/macro_op_32.d   | 120 +++---
>> 13 files changed, 795 insertions(+), 543 deletions(-)
>>
>> diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
>> index 85251aa0edd..782845926ea 100644
>> --- a/bfd/bfd-in2.h
>> +++ b/bfd/bfd-in2.h
>> @@ -7473,6 +7473,9 @@ enum bfd_reloc_code_real
>>   BFD_RELOC_LARCH_TLS_DESC64_HI12,
>>   BFD_RELOC_LARCH_TLS_DESC_LD,
>>   BFD_RELOC_LARCH_TLS_DESC_CALL,
>> +  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,
>> +  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,
>> +  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,
>>   BFD_RELOC_UNUSED
>> };
>> typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
>> diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
>> index 1347d13d2e2..bd448cda453 100644
>> --- a/bfd/elfnn-loongarch.c
>> +++ b/bfd/elfnn-loongarch.c
>> @@ -2285,7 +2285,9 @@ perform_relocation (const Elf_Internal_Rela 
>> *rel, asection *input_section,
>>     case R_LARCH_TLS_DESC_LO12:
>>     case R_LARCH_TLS_DESC64_LO20:
>>     case R_LARCH_TLS_DESC64_HI12:
>> -
>> +    case R_LARCH_TLS_LD_PCREL20_S2:
>> +    case R_LARCH_TLS_GD_PCREL20_S2:
>> +    case R_LARCH_TLS_DESC_PCREL20_S2:
>>       r = loongarch_check_offset (rel, input_section);
>>       if (r != bfd_reloc_ok)
>> break;
>> @@ -3674,6 +3676,9 @@ loongarch_elf_relocate_section (bfd 
>> *output_bfd, struct bfd_link_info *info,
>> case R_LARCH_TLS_GD_HI20:
>> case R_LARCH_TLS_DESC_PC_HI20:
>> case R_LARCH_TLS_DESC_HI20:
>> +case R_LARCH_TLS_LD_PCREL20_S2:
>> +case R_LARCH_TLS_GD_PCREL20_S2:
>> +case R_LARCH_TLS_DESC_PCREL20_S2:
>>  BFD_ASSERT (rel->r_addend == 0);
>>  unresolved_reloc = false;
>>
>> @@ -3682,7 +3687,8 @@ loongarch_elf_relocate_section (bfd 
>> *output_bfd, struct bfd_link_info *info,
>>    is_ie = true;
>>
>>  if (r_type == R_LARCH_TLS_DESC_PC_HI20
>> -     || r_type == R_LARCH_TLS_DESC_HI20)
>> +     || r_type == R_LARCH_TLS_DESC_HI20
>> +     || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
>>    is_desc = true;
>>
>>  bfd_vma got_off = 0;
>> @@ -3813,7 +3819,11 @@ loongarch_elf_relocate_section (bfd 
>> *output_bfd, struct bfd_link_info *info,
>>      || r_type == R_LARCH_TLS_IE_PC_HI20
>>      || r_type == R_LARCH_TLS_DESC_PC_HI20)
>>    RELOCATE_CALC_PC32_HI20 (relocation, pc);
>> -
>> + else if (r_type == R_LARCH_TLS_LD_PCREL20_S2
>> +     || r_type == R_LARCH_TLS_GD_PCREL20_S2
>> +     || r_type == R_LARCH_TLS_DESC_PCREL20_S2)
>> +   relocation -= pc;
>> + /* else {} ABS relocations.  */
>>  break;
>>
>> case R_LARCH_TLS_DESC_PC_LO12:
>> @@ -4244,6 +4254,85 @@ loongarch_relax_align (bfd *abfd, asection *sec,
>> addend - need_nop_bytes, link_info);
>> }
>>
>> +/* Relax pcalau12i + addi.d of TLS LD/GD/DESC to pcaddi.  */
>> +static bool
>> +loongarch_relax_tls_ld_gd_desc (bfd *abfd, asection *sec, asection 
>> *sym_sec,
>> +      Elf_Internal_Rela *rel_hi, bfd_vma symval,
>> +      struct bfd_link_info *info, bool *again)
>> +{
>> +  bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
>> +  Elf_Internal_Rela *rel_lo = rel_hi + 2;
>> +  uint32_t pca = bfd_get (32, abfd, contents + rel_hi->r_offset);
>> +  uint32_t add = bfd_get (32, abfd, contents + rel_lo->r_offset);
>> +  uint32_t rd = pca & 0x1f;
>> +
>> +  /* This section's output_offset need to subtract the bytes of 
>> instructions
>> +     relaxed by the previous sections, so it needs to be updated 
>> beforehand.
>> +     size_input_section already took care of updating it after 
>> relaxation,
>> +     so we additionally update once here.  */
>> +  sec->output_offset = sec->output_section->size;
>> +  bfd_vma pc = sec_addr (sec) + rel_hi->r_offset;
>> +
>> +  /* If pc and symbol not in the same segment, add/sub segment 
>> alignment.
>> +     FIXME: if there are multiple readonly segments?  */
>> +  if (!(sym_sec->flags & SEC_READONLY))
>> +    {
>> +      if (symval > pc)
>> +pc -= info->maxpagesize;
>> +      else if (symval < pc)
>> +pc += info->maxpagesize;
>> +    }
>> +
>> +  const uint32_t addi_d = 0x02c00000;
>> +  const uint32_t pcaddi = 0x18000000;
>> +
>> +  /* Is pcalau12i + addi.d insns?  */
>> +  if ((ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_GOT_PC_LO12
>> +&& ELFNN_R_TYPE (rel_lo->r_info) != R_LARCH_TLS_DESC_PC_LO12)
>> +      || (ELFNN_R_TYPE ((rel_lo + 1)->r_info) != R_LARCH_RELAX)
>> +      || (ELFNN_R_TYPE ((rel_hi + 1)->r_info) != R_LARCH_RELAX)
>> +      || (rel_hi->r_offset + 4 != rel_lo->r_offset)
>> +      || ((add & addi_d) != addi_d)
>> +      /* Is pcalau12i $rd + addi.d $rd,$rd?  */
>> +      || ((add & 0x1f) != rd)
>> +      || (((add >> 5) & 0x1f) != rd)
>> +      /* Can be relaxed to pcaddi?  */
>> +      || (symval & 0x3) /* 4 bytes align.  */
>> +      || ((bfd_signed_vma)(symval - pc) < 
>> (bfd_signed_vma)(int32_t)0xffe00000)
>> +      || ((bfd_signed_vma)(symval - pc) > 
>> (bfd_signed_vma)(int32_t)0x1ffffc))
>> +    return false;
>> +
>> +  /* Continue next relax trip.  */
>> +  *again = true;
>> +
>> +  pca = pcaddi | rd;
>> +  bfd_put (32, abfd, pca, contents + rel_hi->r_offset);
>> +
>> +  /* Adjust relocations.  */
>> +  switch (ELFNN_R_TYPE (rel_hi->r_info))
>> +    {
>> +    case R_LARCH_TLS_LD_PC_HI20:
>> +      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
>> +     R_LARCH_TLS_LD_PCREL20_S2);
>> +      break;
>> +    case R_LARCH_TLS_GD_PC_HI20:
>> +      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
>> +     R_LARCH_TLS_GD_PCREL20_S2);
>> +      break;
>> +    case R_LARCH_TLS_DESC_PC_HI20:
>> +      rel_hi->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel_hi->r_info),
>> +     R_LARCH_TLS_DESC_PCREL20_S2);
>> +      break;
>> +    default:
>> +      break;
>> +    }
>> +  rel_lo->r_info = ELFNN_R_INFO (0, R_LARCH_NONE);
>> +
>> +  loongarch_relax_delete_bytes (abfd, sec, rel_lo->r_offset, 4, info);
>> +
>> +  return true;
>> +}
>> +
>> static bool
>> loongarch_elf_relax_section (bfd *abfd, asection *sec,
>>       struct bfd_link_info *info,
>> @@ -4288,15 +4377,23 @@ loongarch_elf_relax_section (bfd *abfd, 
>> asection *sec,
>>
>>   for (unsigned int i = 0; i < sec->reloc_count; i++)
>>     {
>> -      Elf_Internal_Rela *rel = relocs + i;
>> -      asection *sym_sec;
>> +      char symtype;
>>       bfd_vma symval;
>> -      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
>> -      unsigned long r_type = ELFNN_R_TYPE (rel->r_info);
>> +      asection *sym_sec;
>>       bool local_got = false;
>> -      char symtype;
>> +      Elf_Internal_Rela *rel = relocs + i;
>>       struct elf_link_hash_entry *h = NULL;
>> +      unsigned long r_type = ELFNN_R_TYPE (rel->r_info);
>> +      unsigned long r_symndx = ELFNN_R_SYM (rel->r_info);
>>
>> +      /* Four kind of relocations:
>> +Normal: symval is the symbol address.
>> +R_LARCH_ALIGN: symval is the address of the last NOP instruction
>> +added by this relocation, and then adds 4 more.
>> +R_LARCH_CALL36: symval is the symbol address for local symbols,
>> +or the PLT entry address of the symbol. (Todo)
>> +R_LARCHL_TLS_LD/GD/DESC_PC_HI20: symval is the GOT entry address
>> +of the symbol.  */
>>       if (r_symndx < symtab_hdr->sh_info)
>> {
>>  Elf_Internal_Sym *sym = (Elf_Internal_Sym *)symtab_hdr->contents
>> @@ -4304,7 +4401,24 @@ loongarch_elf_relax_section (bfd *abfd, 
>> asection *sec,
>>  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
>>    continue;
>>
>> - if (sym->st_shndx == SHN_UNDEF || R_LARCH_ALIGN == r_type)
>> + if (R_LARCH_TLS_LD_PC_HI20 == r_type
>> +     || R_LARCH_TLS_GD_PC_HI20 == r_type
>> +     || R_LARCH_TLS_DESC_PC_HI20 == r_type)
>> +   {
>> +     if (loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
>> +continue;
>> +     else
>> +{
>> + sym_sec = htab->elf.sgot;
>> + symval = elf_local_got_offsets (abfd)[r_symndx];
>> + char tls_type = _bfd_loongarch_elf_tls_type (abfd, h,
>> +r_symndx);
>> + if (R_LARCH_TLS_DESC_PC_HI20 == r_type
>> +&& GOT_TLS_GD_BOTH_P (tls_type))
>> +   symval += 2 * GOT_ENTRY_SIZE;
>> +}
>> +   }
>> + else if (sym->st_shndx == SHN_UNDEF || R_LARCH_ALIGN == r_type)
>>    {
>>      sym_sec = sec;
>>      symval = rel->r_offset;
>> @@ -4329,7 +4443,26 @@ loongarch_elf_relax_section (bfd *abfd, 
>> asection *sec,
>>  if (h != NULL && h->type == STT_GNU_IFUNC)
>>    continue;
>>
>> - if ((h->root.type == bfd_link_hash_defined
>> + /* The GOT entry of tls symbols must in current execute file or
>> +    shared object.  */
>> + if (R_LARCH_TLS_LD_PC_HI20 == r_type
>> +     || R_LARCH_TLS_GD_PC_HI20 == r_type
>> +     || R_LARCH_TLS_DESC_PC_HI20 == r_type)
>> +   {
>> +     if (loongarch_can_relax_tls (info, r_type, h, abfd, r_symndx))
>> +continue;
>> +     else
>> +{
>> + sym_sec = htab->elf.sgot;
>> + symval = h->got.offset;
>> + char tls_type = _bfd_loongarch_elf_tls_type (abfd, h,
>> +r_symndx);
>> + if (R_LARCH_TLS_DESC_PC_HI20 == r_type
>> +&& GOT_TLS_GD_BOTH_P (tls_type))
>> +   symval += 2 * GOT_ENTRY_SIZE;
>> +}
>> +   }
>> + else if ((h->root.type == bfd_link_hash_defined
>>  || h->root.type == bfd_link_hash_defweak)
>> && h->root.u.def.section != NULL
>> && h->root.u.def.section->output_section != NULL)
>> @@ -4358,7 +4491,7 @@ loongarch_elf_relax_section (bfd *abfd, 
>> asection *sec,
>>   if (symtype != STT_SECTION)
>>     symval += rel->r_addend;
>> }
>> -      /* For R_LARCH_ALIGN, symval is sec_addr (sym_sec) + rel->r_offset
>> +      /* For R_LARCH_ALIGN, symval is sec_addr (sec) + rel->r_offset
>> + (alingmeng - 4).
>> If r_symndx is 0, alignmeng-4 is r_addend.
>> If r_symndx > 0, alignment-4 is 2^(r_addend & 0xff)-4.  */
>> @@ -4399,6 +4532,25 @@ loongarch_elf_relax_section (bfd *abfd, 
>> asection *sec,
>>    info, again);
>>    }
>>  break;
>> +
>> +case R_LARCH_TLS_LD_PC_HI20:
>> + if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
>> +   loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
>> +   info, again);
>> + break;
>> +
>> +case R_LARCH_TLS_GD_PC_HI20:
>> + if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
>> +   loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
>> +   info, again);
>> + break;
>> +
>> +case R_LARCH_TLS_DESC_PC_HI20:
>> + if (0 == info->relax_pass && (i + 4) <= sec->reloc_count)
>> +   loongarch_relax_tls_ld_gd_desc (abfd, sec, sym_sec, rel, symval,
>> +   info, again);
>> + break;
>> +
>> default:
>>  break;
>> }
>> diff --git a/bfd/elfxx-loongarch.c b/bfd/elfxx-loongarch.c
>> index 30a941a851f..310e6d62dc0 100644
>> --- a/bfd/elfxx-loongarch.c
>> +++ b/bfd/elfxx-loongarch.c
>> @@ -1775,6 +1775,60 @@ static loongarch_reloc_howto_type 
>> loongarch_howto_table[] =
>> BFD_RELOC_LARCH_TLS_DESC_CALL,/* bfd_reloc_code_real_type.  */
>> NULL,/* adjust_reloc_bits.  */
>> "desc_call"),/* larch_reloc_type_name.  */
>> +
>> +  /* For pcaddi, ld_pc_hi20 + ld_pc_lo12 can relax to ld_pcrel20_s2.  */
>> +  LOONGARCH_HOWTO (R_LARCH_TLS_LD_PCREL20_S2,/* type (124).  */
>> +2,/* rightshift.  */
>> +4,/* size.  */
>> +20,/* bitsize.  */
>> +false,/* pc_relative.  */
>> +5,/* bitpos.  */
>> +complain_overflow_signed,/* complain_on_overflow.  */
>> +bfd_elf_generic_reloc,/* special_function.  */
>> +"R_LARCH_TLS_LD_PCREL20_S2",/* name.  */
>> +false,/* partial_inplace.  */
>> +0,/* src_mask.  */
>> +0x1ffffe0,/* dst_mask.  */
>> +true,/* pcrel_offset.  */
>> +BFD_RELOC_LARCH_TLS_LD_PCREL20_S2,/* bfd_reloc_code_real_type.  */
>> +reloc_sign_bits,/* adjust_reloc_bits.  */
>> +"ld_pcrel_20"),/* larch_reloc_type_name.  */
>> +
>> +  /* For pcaddi, gd_pc_hi20 + gd_pc_lo12 can relax to gd_pcrel20_s2.  */
>> +  LOONGARCH_HOWTO (R_LARCH_TLS_GD_PCREL20_S2,/* type (125).  */
>> +2,/* rightshift.  */
>> +4,/* size.  */
>> +20,/* bitsize.  */
>> +false,/* pc_relative.  */
>> +5,/* bitpos.  */
>> +complain_overflow_signed,/* complain_on_overflow.  */
>> +bfd_elf_generic_reloc,/* special_function.  */
>> +"R_LARCH_TLS_GD_PCREL20_S2",/* name.  */
>> +false,/* partial_inplace.  */
>> +0,/* src_mask.  */
>> +0x1ffffe0,/* dst_mask.  */
>> +true,/* pcrel_offset.  */
>> +BFD_RELOC_LARCH_TLS_GD_PCREL20_S2,/* bfd_reloc_code_real_type.  */
>> +reloc_sign_bits,/* adjust_reloc_bits.  */
>> +"gd_pcrel_20"),/* larch_reloc_type_name.  */
>> +
>> +  /* For pcaddi, desc_pc_hi20 + desc_pc_lo12 can relax to 
>> desc_pcrel20_s2.  */
>> +  LOONGARCH_HOWTO (R_LARCH_TLS_DESC_PCREL20_S2,/* type (126).  */
>> +2,/* rightshift.  */
>> +4,/* size.  */
>> +20,/* bitsize.  */
>> +false,/* pc_relative.  */
>> +5,/* bitpos.  */
>> +complain_overflow_signed,/* complain_on_overflow.  */
>> +bfd_elf_generic_reloc,/* special_function.  */
>> +"R_LARCH_TLS_DESC_PCREL20_S2",/* name.  */
>> +false,/* partial_inplace.  */
>> +0,/* src_mask.  */
>> +0x1ffffe0,/* dst_mask.  */
>> +true,/* pcrel_offset.  */
>> +BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2,/* bfd_reloc_code_real_type.  */
>> +reloc_sign_bits,/* adjust_reloc_bits.  */
>> +"desc_pcrel_20"),/* larch_reloc_type_name.  */
>> };
>

> I think relaxation relocs is a concept internal to binutils and they 
> should not be in the same number range as psABI defined relocs. Some 
> linkers (e.g. mold) doesn’t create new relocs when relaxing and 
> rewrites the instruction right away, therefore these relocs would have 
> no purpose in the psABI.
>
> We recently refactored out all the linker-internal relocs to a 
> different range [1]; LoongArch might want to follow suit.
>
> [1]: https://sourceware.org/pipermail/binutils/2023-November/130322.html
>

However, it should be noted that in handwritten assembly code, we can 
directly use these relocations.

>>
>> reloc_howto_type *
>> @@ -1783,7 +1837,9 @@ loongarch_elf_rtype_to_howto (bfd *abfd, 
>> unsigned int r_type)
>>   if(r_type < R_LARCH_count)
>>     {
>>       /* For search table fast.  */
>> +      /*
>>       BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
>> +      */
>

> Was this supposed to be commented out and committed as-is?


It has been deleted.

>
>>
>>       if (loongarch_howto_table[r_type].howto.type == r_type)
>> return (reloc_howto_type *)&loongarch_howto_table[r_type];
>> @@ -1802,7 +1858,9 @@ loongarch_elf_rtype_to_howto (bfd *abfd, 
>> unsigned int r_type)
>> reloc_howto_type *
>> loongarch_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char 
>> *r_name)
>> {
>> +  /*
>>   BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
>> +  */
>>
>>   for (size_t i = 0; i < ARRAY_SIZE (loongarch_howto_table); i++)
>>     if (loongarch_howto_table[i].howto.name
>> @@ -1821,7 +1879,9 @@ reloc_howto_type *
>> loongarch_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
>>     bfd_reloc_code_real_type code)
>> {
>> +  /*
>>   BFD_ASSERT (ARRAY_SIZE (loongarch_howto_table) == R_LARCH_count);
>> +  */
>>
>>   /* Fast search for new reloc types.  */
>>   if (BFD_RELOC_LARCH_B16 <= code && code < BFD_RELOC_LARCH_RELAX)
>> diff --git a/bfd/libbfd.h b/bfd/libbfd.h
>> index 71b03da14d9..8dab44110a6 100644
>> --- a/bfd/libbfd.h
>> +++ b/bfd/libbfd.h
>> @@ -3612,6 +3612,9 @@ static const char *const 
>> bfd_reloc_code_real_names[] = { "@@uninitialized@@",
>>   "BFD_RELOC_LARCH_TLS_DESC64_HI12",
>>   "BFD_RELOC_LARCH_TLS_DESC_LD",
>>   "BFD_RELOC_LARCH_TLS_DESC_CALL",
>> +  "BFD_RELOC_LARCH_TLS_LD_PCREL20_S2",
>> +  "BFD_RELOC_LARCH_TLS_GD_PCREL20_S2",
>> +  "BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2",
>>  "@@overflow: BFD_RELOC_UNUSED@@",
>> };
>> #endif
>> diff --git a/bfd/reloc.c b/bfd/reloc.c
>> index f7fe0c7ffe3..6fd0f1fb547 100644
>> --- a/bfd/reloc.c
>> +++ b/bfd/reloc.c
>> @@ -8324,6 +8324,13 @@ ENUMX
>> ENUMX
>>   BFD_RELOC_LARCH_TLS_DESC_CALL
>>
>> +ENUMX
>> +  BFD_RELOC_LARCH_TLS_LD_PCREL20_S2
>> +ENUMX
>> +  BFD_RELOC_LARCH_TLS_GD_PCREL20_S2
>> +ENUMX
>> +  BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2
>> +
>> ENUMDOC
>>   LARCH relocations.
>>
>> diff --git a/gas/config/tc-loongarch.c b/gas/config/tc-loongarch.c
>> index 1658025f918..def26daf634 100644
>> --- a/gas/config/tc-loongarch.c
>> +++ b/gas/config/tc-loongarch.c
>> @@ -682,7 +682,7 @@ loongarch_args_parser_can_match_arg_helper (char 
>> esc_ch1, char esc_ch2,
>>      esc_ch1, esc_ch2, bit_field, arg);
>>
>>  if (ip->reloc_info[0].type >= BFD_RELOC_LARCH_B16
>> -     && ip->reloc_info[0].type <= BFD_RELOC_LARCH_TLS_DESC_CALL)
>> +     && ip->reloc_info[0].type <= BFD_RELOC_LARCH_TLS_DESC_PCREL20_S2)
>>    {
>>      /* As we compact stack-relocs, it is no need for pop operation.
>> But break out until here in order to check the imm field.
>> @@ -694,7 +694,11 @@ loongarch_args_parser_can_match_arg_helper (char 
>> esc_ch1, char esc_ch2,
>>    && (BFD_RELOC_LARCH_PCALA_HI20 == reloc_type
>> || BFD_RELOC_LARCH_PCALA_LO12 == reloc_type
>> || BFD_RELOC_LARCH_GOT_PC_HI20 == reloc_type
>> -|| BFD_RELOC_LARCH_GOT_PC_LO12 == reloc_type))
>> +|| BFD_RELOC_LARCH_GOT_PC_LO12 == reloc_type
>> +|| BFD_RELOC_LARCH_TLS_LD_PC_HI20 == reloc_type
>> +|| BFD_RELOC_LARCH_TLS_GD_PC_HI20 == reloc_type
>> +|| BFD_RELOC_LARCH_TLS_DESC_PC_HI20 == reloc_type
>> +|| BFD_RELOC_LARCH_TLS_DESC_PC_LO12 == reloc_type))
>> {
>>  ip->reloc_info[ip->reloc_num].type = BFD_RELOC_LARCH_RELAX;
>>  ip->reloc_info[ip->reloc_num].value = const_0;
>> diff --git a/gas/testsuite/gas/loongarch/macro_op.d 
>> b/gas/testsuite/gas/loongarch/macro_op.d
>> index 32860864704..47f8f45c663 100644
>> --- a/gas/testsuite/gas/loongarch/macro_op.d
>> +++ b/gas/testsuite/gas/loongarch/macro_op.d
>> @@ -2,70 +2,72 @@
>> #objdump: -dr
>> #skip: loongarch32-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.text>:
>> -[ ]+0:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+4:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+8:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+c:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+10:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+10:[ ]+R_LARCH_GOT_PC_HI20[ ]+\.L1
>> -[ ]+10:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+14:[ ]+28c00084[ ]+ld\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_GOT_PC_LO12[ ]+\.L1
>> -[ ]+14:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+18:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+18:[ ]+R_LARCH_GOT_PC_HI20[ ]+\.L1
>> -[ ]+18:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+1c:[ ]+28c00084[ ]+ld\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_GOT_PC_LO12[ ]+\.L1
>> -[ ]+1c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+20:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_PCALA_HI20[ ]+\.L1
>> -[ ]+20:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+24:[ ]+02c00084[ ]+addi\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_PCALA_LO12[ ]+\.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+14000004[ ]+lu12i\.w[ ]+\$a0,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+28:[ ]+R_LARCH_ABS_HI20[ ]+\.L1
>> -[ ]+2c:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+2c:[ ]+R_LARCH_ABS_LO12[ ]+\.L1
>> -[ ]+30:[ ]+16000004[ ]+lu32i\.d[ ]+\$a0,[ ]+0
>> -[ ]+30:[ ]+R_LARCH_ABS64_LO20[ ]+\.L1
>> -[ ]+34:[ ]+03000084[ ]+lu52i\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+34:[ ]+R_LARCH_ABS64_HI12[ ]+\.L1
>> -[ ]+38:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_PCALA_HI20[ ]+\.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+02c00084[ ]+addi\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_PCALA_LO12[ ]+\.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_GOT_PC_HI20[ ]+\.L1
>> -[ ]+40:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+44:[ ]+28c00084[ ]+ld\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+44:[ ]+R_LARCH_GOT_PC_LO12[ ]+\.L1
>> -[ ]+44:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+48:[ ]+14000004[ ]+lu12i\.w[ ]+\$a0,[ ]+0
>> -[ ]+48:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+4c:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+4c:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+50:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+50:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+54:[ ]+28c00084[ ]+ld\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+58:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+5c:[ ]+02c00084[ ]+addi\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+5c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+60:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+60:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+64:[ ]+02c00084[ ]+addi\.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+64:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+64:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> +0+ <.*>:
>> +   0:00150004 move \$a0, \$zero
>> +   4:02bffc04 li.w \$a0, -1
>> +   8:00150004 move \$a0, \$zero
>> +   c:02bffc04 li.w \$a0, -1
>> +  10:1a000004 pcalau12i \$a0, 0
>> +10: R_LARCH_GOT_PC_HI20.L1
>> +10: R_LARCH_RELAX\*ABS\*
>> +  14:28c00084 ld.d \$a0, \$a0, 0
>> +14: R_LARCH_GOT_PC_LO12.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:1a000004 pcalau12i \$a0, 0
>> +18: R_LARCH_GOT_PC_HI20.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:28c00084 ld.d \$a0, \$a0, 0
>> +1c: R_LARCH_GOT_PC_LO12.L1
>> +1c: R_LARCH_RELAX\*ABS\*
>> +  20:1a000004 pcalau12i \$a0, 0
>> +20: R_LARCH_PCALA_HI20.L1
>> +20: R_LARCH_RELAX\*ABS\*
>> +  24:02c00084 addi.d \$a0, \$a0, 0
>> +24: R_LARCH_PCALA_LO12.L1
>> +24: R_LARCH_RELAX\*ABS\*
>> +  28:14000004 lu12i.w \$a0, 0
>> +28: R_LARCH_MARK_LA\*ABS\*
>> +28: R_LARCH_ABS_HI20.L1
>> +  2c:03800084 ori \$a0, \$a0, 0x0
>> +2c: R_LARCH_ABS_LO12.L1
>> +  30:16000004 lu32i.d \$a0, 0
>> +30: R_LARCH_ABS64_LO20.L1
>> +  34:03000084 lu52i.d \$a0, \$a0, 0
>> +34: R_LARCH_ABS64_HI12.L1
>> +  38:1a000004 pcalau12i \$a0, 0
>> +38: R_LARCH_PCALA_HI20.L1
>> +38: R_LARCH_RELAX\*ABS\*
>> +  3c:02c00084 addi.d \$a0, \$a0, 0
>> +3c: R_LARCH_PCALA_LO12.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:1a000004 pcalau12i \$a0, 0
>> +40: R_LARCH_GOT_PC_HI20.L1
>> +40: R_LARCH_RELAX\*ABS\*
>> +  44:28c00084 ld.d \$a0, \$a0, 0
>> +44: R_LARCH_GOT_PC_LO12.L1
>> +44: R_LARCH_RELAX\*ABS\*
>> +  48:14000004 lu12i.w \$a0, 0
>> +48: R_LARCH_TLS_LE_HI20TLS1
>> +  4c:03800084 ori \$a0, \$a0, 0x0
>> +4c: R_LARCH_TLS_LE_LO12TLS1
>> +  50:1a000004 pcalau12i \$a0, 0
>> +50: R_LARCH_TLS_IE_PC_HI20TLS1
>> +  54:28c00084 ld.d \$a0, \$a0, 0
>> +54: R_LARCH_TLS_IE_PC_LO12TLS1
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_TLS_LD_PC_HI20TLS1
>> +58: R_LARCH_RELAX\*ABS\*
>> +  5c:02c00084 addi.d \$a0, \$a0, 0
>> +5c: R_LARCH_GOT_PC_LO12TLS1
>> +5c: R_LARCH_RELAX\*ABS\*
>> +  60:1a000004 pcalau12i \$a0, 0
>> +60: R_LARCH_TLS_GD_PC_HI20TLS1
>> +60: R_LARCH_RELAX\*ABS\*
>> +  64:02c00084 addi.d \$a0, \$a0, 0
>> +64: R_LARCH_GOT_PC_LO12TLS1
>> +64: R_LARCH_RELAX\*ABS\*
>> diff --git a/gas/testsuite/gas/loongarch/macro_op_32.d 
>> b/gas/testsuite/gas/loongarch/macro_op_32.d
>> index 188026a5780..a7349aa8dc0 100644
>> --- a/gas/testsuite/gas/loongarch/macro_op_32.d
>> +++ b/gas/testsuite/gas/loongarch/macro_op_32.d
>> @@ -2,66 +2,68 @@
>> #objdump: -dr
>> #skip: loongarch64-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.L1>:
>> -[ ]+0:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+4:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+8:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+c:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+10:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+10:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+10:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+14:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+14:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+18:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+18:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+18:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+1c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+1c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+20:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+20:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+24:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+28:[ ]+R_LARCH_ABS_HI20[ ]+.L1
>> -[ ]+2c:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+2c:[ ]+R_LARCH_ABS_LO12[ ]+.L1
>> -[ ]+30:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+30:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+30:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+34:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+34:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+34:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+38:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+44:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+44:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+48:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+48:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+4c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+4c:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+50:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+50:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+54:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+54:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+58:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+5c:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+5c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> +0+ <.L1>:
>> +   0:00150004 move \$a0, \$zero
>> +   4:02bffc04 li.w \$a0, -1
>> +   8:00150004 move \$a0, \$zero
>> +   c:02bffc04 li.w \$a0, -1
>> +  10:1a000004 pcalau12i \$a0, 0
>> +10: R_LARCH_GOT_PC_HI20.L1
>> +10: R_LARCH_RELAX\*ABS\*
>> +  14:28800084 ld.w \$a0, \$a0, 0
>> +14: R_LARCH_GOT_PC_LO12.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:1a000004 pcalau12i \$a0, 0
>> +18: R_LARCH_GOT_PC_HI20.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:28800084 ld.w \$a0, \$a0, 0
>> +1c: R_LARCH_GOT_PC_LO12.L1
>> +1c: R_LARCH_RELAX\*ABS\*
>> +  20:1a000004 pcalau12i \$a0, 0
>> +20: R_LARCH_PCALA_HI20.L1
>> +20: R_LARCH_RELAX\*ABS\*
>> +  24:02800084 addi.w \$a0, \$a0, 0
>> +24: R_LARCH_PCALA_LO12.L1
>> +24: R_LARCH_RELAX\*ABS\*
>> +  28:14000004 lu12i.w \$a0, 0
>> +28: R_LARCH_MARK_LA\*ABS\*
>> +28: R_LARCH_ABS_HI20.L1
>> +  2c:03800084 ori \$a0, \$a0, 0x0
>> +2c: R_LARCH_ABS_LO12.L1
>> +  30:1a000004 pcalau12i \$a0, 0
>> +30: R_LARCH_PCALA_HI20.L1
>> +30: R_LARCH_RELAX\*ABS\*
>> +  34:02800084 addi.w \$a0, \$a0, 0
>> +34: R_LARCH_PCALA_LO12.L1
>> +34: R_LARCH_RELAX\*ABS\*
>> +  38:1a000004 pcalau12i \$a0, 0
>> +38: R_LARCH_GOT_PC_HI20.L1
>> +38: R_LARCH_RELAX\*ABS\*
>> +  3c:28800084 ld.w \$a0, \$a0, 0
>> +3c: R_LARCH_GOT_PC_LO12.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:14000004 lu12i.w \$a0, 0
>> +40: R_LARCH_TLS_LE_HI20TLS1
>> +  44:03800084 ori \$a0, \$a0, 0x0
>> +44: R_LARCH_TLS_LE_LO12TLS1
>> +  48:1a000004 pcalau12i \$a0, 0
>> +48: R_LARCH_TLS_IE_PC_HI20TLS1
>> +  4c:28800084 ld.w \$a0, \$a0, 0
>> +4c: R_LARCH_TLS_IE_PC_LO12TLS1
>> +  50:1a000004 pcalau12i \$a0, 0
>> +50: R_LARCH_TLS_LD_PC_HI20TLS1
>> +50: R_LARCH_RELAX\*ABS\*
>> +  54:02800084 addi.w \$a0, \$a0, 0
>> +54: R_LARCH_GOT_PC_LO12TLS1
>> +54: R_LARCH_RELAX\*ABS\*
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_TLS_GD_PC_HI20TLS1
>> +58: R_LARCH_RELAX\*ABS\*
>> +  5c:02800084 addi.w \$a0, \$a0, 0
>> +5c: R_LARCH_GOT_PC_LO12TLS1
>> +5c: R_LARCH_RELAX\*ABS\*
>> diff --git a/gas/testsuite/gas/loongarch/macro_op_large_abs.d 
>> b/gas/testsuite/gas/loongarch/macro_op_large_abs.d
>> index 0c49f68e2ab..729e878ffb8 100644
>> --- a/gas/testsuite/gas/loongarch/macro_op_large_abs.d
>> +++ b/gas/testsuite/gas/loongarch/macro_op_large_abs.d
>> @@ -1,85 +1,89 @@
>> -#as: -mla-global-with-abs
>> +#as:
>> #objdump: -dr
>> #skip: loongarch32-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.L1>:
>> -[ ]+0:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+0:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+0:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+4:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+4:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+8:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+8:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+c:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+c:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+10:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+14:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+14:[ ]+R_LARCH_ABS_HI20[ ]+.L1
>> -[ ]+18:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+18:[ ]+R_LARCH_ABS_LO12[ ]+.L1
>> -[ ]+1c:[ ]+16000004[ ]+lu32i.d[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_ABS64_LO20[ ]+.L1
>> -[ ]+20:[ ]+03000084[ ]+lu52i.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_ABS64_HI12[ ]+.L1
>> -[ ]+24:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+28:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+2c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+2c:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+30:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+30:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+34:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+38:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+44:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+44:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+48:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+4c:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+4c:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+50:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+50:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+54:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+58:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+5c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_TLS_IE64_PC_LO20[ ]+TLS1
>> -[ ]+60:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+60:[ ]+R_LARCH_TLS_IE64_PC_HI12[ ]+TLS1
>> -[ ]+64:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+68:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+68:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+6c:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+6c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+6c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+70:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+70:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+74:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+74:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+78:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+7c:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+7c:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+80:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+80:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+80:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+84:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+84:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+88:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+88:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+8c:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> +0+ <.L1>:
>> +   0:1a000004 pcalau12i \$a0, 0
>> +0: R_LARCH_PCALA_HI20.L1
>> +0: R_LARCH_RELAX\*ABS\*
>> +   4:02c00005 li.d \$a1, 0
>> +4: R_LARCH_PCALA_LO12.L1
>> +4: R_LARCH_RELAX\*ABS\*
>> +   8:16000005 lu32i.d \$a1, 0
>> +8: R_LARCH_PCALA64_LO20.L1
>> +   c:030000a5 lu52i.d \$a1, \$a1, 0
>> +c: R_LARCH_PCALA64_HI12.L1
>> +  10:00109484 add.d \$a0, \$a0, \$a1
>> +  14:1a000004 pcalau12i \$a0, 0
>> +14: R_LARCH_GOT_PC_HI20.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:02c00005 li.d \$a1, 0
>> +18: R_LARCH_GOT_PC_LO12.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:16000005 lu32i.d \$a1, 0
>> +1c: R_LARCH_GOT64_PC_LO20.L1
>> +  20:030000a5 lu52i.d \$a1, \$a1, 0
>> +20: R_LARCH_GOT64_PC_HI12.L1
>> +  24:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  28:1a000004 pcalau12i \$a0, 0
>> +28: R_LARCH_PCALA_HI20.L1
>> +28: R_LARCH_RELAX\*ABS\*
>> +  2c:02c00005 li.d \$a1, 0
>> +2c: R_LARCH_PCALA_LO12.L1
>> +2c: R_LARCH_RELAX\*ABS\*
>> +  30:16000005 lu32i.d \$a1, 0
>> +30: R_LARCH_PCALA64_LO20.L1
>> +  34:030000a5 lu52i.d \$a1, \$a1, 0
>> +34: R_LARCH_PCALA64_HI12.L1
>> +  38:00109484 add.d \$a0, \$a0, \$a1
>> +  3c:1a000004 pcalau12i \$a0, 0
>> +3c: R_LARCH_GOT_PC_HI20.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:02c00005 li.d \$a1, 0
>> +40: R_LARCH_GOT_PC_LO12.L1
>> +40: R_LARCH_RELAX\*ABS\*
>> +  44:16000005 lu32i.d \$a1, 0
>> +44: R_LARCH_GOT64_PC_LO20.L1
>> +  48:030000a5 lu52i.d \$a1, \$a1, 0
>> +48: R_LARCH_GOT64_PC_HI12.L1
>> +  4c:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  50:14000004 lu12i.w \$a0, 0
>> +50: R_LARCH_TLS_LE_HI20TLS1
>> +  54:03800084 ori \$a0, \$a0, 0x0
>> +54: R_LARCH_TLS_LE_LO12TLS1
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_TLS_IE_PC_HI20TLS1
>> +  5c:02c00005 li.d \$a1, 0
>> +5c: R_LARCH_TLS_IE_PC_LO12TLS1
>> +  60:16000005 lu32i.d \$a1, 0
>> +60: R_LARCH_TLS_IE64_PC_LO20TLS1
>> +  64:030000a5 lu52i.d \$a1, \$a1, 0
>> +64: R_LARCH_TLS_IE64_PC_HI12TLS1
>> +  68:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  6c:1a000004 pcalau12i \$a0, 0
>> +6c: R_LARCH_TLS_LD_PC_HI20TLS1
>> +6c: R_LARCH_RELAX\*ABS\*
>> +  70:02c00005 li.d \$a1, 0
>> +70: R_LARCH_GOT_PC_LO12TLS1
>> +70: R_LARCH_RELAX\*ABS\*
>> +  74:16000005 lu32i.d \$a1, 0
>> +74: R_LARCH_GOT64_PC_LO20TLS1
>> +  78:030000a5 lu52i.d \$a1, \$a1, 0
>> +78: R_LARCH_GOT64_PC_HI12TLS1
>> +  7c:00109484 add.d \$a0, \$a0, \$a1
>> +  80:1a000004 pcalau12i \$a0, 0
>> +80: R_LARCH_TLS_GD_PC_HI20TLS1
>> +80: R_LARCH_RELAX\*ABS\*
>> +  84:02c00005 li.d \$a1, 0
>> +84: R_LARCH_GOT_PC_LO12TLS1
>> +84: R_LARCH_RELAX\*ABS\*
>> +  88:16000005 lu32i.d \$a1, 0
>> +88: R_LARCH_GOT64_PC_LO20TLS1
>> +  8c:030000a5 lu52i.d \$a1, \$a1, 0
>> +8c: R_LARCH_GOT64_PC_HI12TLS1
>> +  90:00109484 add.d \$a0, \$a0, \$a1
>> diff --git a/gas/testsuite/gas/loongarch/macro_op_large_pc.d 
>> b/gas/testsuite/gas/loongarch/macro_op_large_pc.d
>> index 0c49f68e2ab..729e878ffb8 100644
>> --- a/gas/testsuite/gas/loongarch/macro_op_large_pc.d
>> +++ b/gas/testsuite/gas/loongarch/macro_op_large_pc.d
>> @@ -1,85 +1,89 @@
>> -#as: -mla-global-with-abs
>> +#as:
>> #objdump: -dr
>> #skip: loongarch32-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.L1>:
>> -[ ]+0:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+0:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+0:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+4:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+4:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+8:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+8:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+c:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+c:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+10:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+14:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+14:[ ]+R_LARCH_ABS_HI20[ ]+.L1
>> -[ ]+18:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+18:[ ]+R_LARCH_ABS_LO12[ ]+.L1
>> -[ ]+1c:[ ]+16000004[ ]+lu32i.d[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_ABS64_LO20[ ]+.L1
>> -[ ]+20:[ ]+03000084[ ]+lu52i.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_ABS64_HI12[ ]+.L1
>> -[ ]+24:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+28:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+2c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+2c:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+30:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+30:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+34:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+38:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+44:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+44:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+48:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+4c:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+4c:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+50:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+50:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+54:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+58:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+5c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_TLS_IE64_PC_LO20[ ]+TLS1
>> -[ ]+60:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+60:[ ]+R_LARCH_TLS_IE64_PC_HI12[ ]+TLS1
>> -[ ]+64:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+68:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+68:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+6c:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+6c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+6c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+70:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+70:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+74:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+74:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+78:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+7c:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+7c:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+80:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+80:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+80:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+84:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+84:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+88:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+88:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+8c:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> +0+ <.L1>:
>> +   0:1a000004 pcalau12i \$a0, 0
>> +0: R_LARCH_PCALA_HI20.L1
>> +0: R_LARCH_RELAX\*ABS\*
>> +   4:02c00005 li.d \$a1, 0
>> +4: R_LARCH_PCALA_LO12.L1
>> +4: R_LARCH_RELAX\*ABS\*
>> +   8:16000005 lu32i.d \$a1, 0
>> +8: R_LARCH_PCALA64_LO20.L1
>> +   c:030000a5 lu52i.d \$a1, \$a1, 0
>> +c: R_LARCH_PCALA64_HI12.L1
>> +  10:00109484 add.d \$a0, \$a0, \$a1
>> +  14:1a000004 pcalau12i \$a0, 0
>> +14: R_LARCH_GOT_PC_HI20.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:02c00005 li.d \$a1, 0
>> +18: R_LARCH_GOT_PC_LO12.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:16000005 lu32i.d \$a1, 0
>> +1c: R_LARCH_GOT64_PC_LO20.L1
>> +  20:030000a5 lu52i.d \$a1, \$a1, 0
>> +20: R_LARCH_GOT64_PC_HI12.L1
>> +  24:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  28:1a000004 pcalau12i \$a0, 0
>> +28: R_LARCH_PCALA_HI20.L1
>> +28: R_LARCH_RELAX\*ABS\*
>> +  2c:02c00005 li.d \$a1, 0
>> +2c: R_LARCH_PCALA_LO12.L1
>> +2c: R_LARCH_RELAX\*ABS\*
>> +  30:16000005 lu32i.d \$a1, 0
>> +30: R_LARCH_PCALA64_LO20.L1
>> +  34:030000a5 lu52i.d \$a1, \$a1, 0
>> +34: R_LARCH_PCALA64_HI12.L1
>> +  38:00109484 add.d \$a0, \$a0, \$a1
>> +  3c:1a000004 pcalau12i \$a0, 0
>> +3c: R_LARCH_GOT_PC_HI20.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:02c00005 li.d \$a1, 0
>> +40: R_LARCH_GOT_PC_LO12.L1
>> +40: R_LARCH_RELAX\*ABS\*
>> +  44:16000005 lu32i.d \$a1, 0
>> +44: R_LARCH_GOT64_PC_LO20.L1
>> +  48:030000a5 lu52i.d \$a1, \$a1, 0
>> +48: R_LARCH_GOT64_PC_HI12.L1
>> +  4c:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  50:14000004 lu12i.w \$a0, 0
>> +50: R_LARCH_TLS_LE_HI20TLS1
>> +  54:03800084 ori \$a0, \$a0, 0x0
>> +54: R_LARCH_TLS_LE_LO12TLS1
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_TLS_IE_PC_HI20TLS1
>> +  5c:02c00005 li.d \$a1, 0
>> +5c: R_LARCH_TLS_IE_PC_LO12TLS1
>> +  60:16000005 lu32i.d \$a1, 0
>> +60: R_LARCH_TLS_IE64_PC_LO20TLS1
>> +  64:030000a5 lu52i.d \$a1, \$a1, 0
>> +64: R_LARCH_TLS_IE64_PC_HI12TLS1
>> +  68:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  6c:1a000004 pcalau12i \$a0, 0
>> +6c: R_LARCH_TLS_LD_PC_HI20TLS1
>> +6c: R_LARCH_RELAX\*ABS\*
>> +  70:02c00005 li.d \$a1, 0
>> +70: R_LARCH_GOT_PC_LO12TLS1
>> +70: R_LARCH_RELAX\*ABS\*
>> +  74:16000005 lu32i.d \$a1, 0
>> +74: R_LARCH_GOT64_PC_LO20TLS1
>> +  78:030000a5 lu52i.d \$a1, \$a1, 0
>> +78: R_LARCH_GOT64_PC_HI12TLS1
>> +  7c:00109484 add.d \$a0, \$a0, \$a1
>> +  80:1a000004 pcalau12i \$a0, 0
>> +80: R_LARCH_TLS_GD_PC_HI20TLS1
>> +80: R_LARCH_RELAX\*ABS\*
>> +  84:02c00005 li.d \$a1, 0
>> +84: R_LARCH_GOT_PC_LO12TLS1
>> +84: R_LARCH_RELAX\*ABS\*
>> +  88:16000005 lu32i.d \$a1, 0
>> +88: R_LARCH_GOT64_PC_LO20TLS1
>> +  8c:030000a5 lu52i.d \$a1, \$a1, 0
>> +8c: R_LARCH_GOT64_PC_HI12TLS1
>> +  90:00109484 add.d \$a0, \$a0, \$a1
>> diff --git a/include/elf/loongarch.h b/include/elf/loongarch.h
>> index 41e9fe4d234..6cfee164312 100644
>> --- a/include/elf/loongarch.h
>> +++ b/include/elf/loongarch.h
>> @@ -273,6 +273,10 @@ RELOC_NUMBER (R_LARCH_TLS_DESC64_HI12, 118)
>> RELOC_NUMBER (R_LARCH_TLS_DESC_LD, 119)
>> RELOC_NUMBER (R_LARCH_TLS_DESC_CALL, 120)
>>
>> +RELOC_NUMBER (R_LARCH_TLS_LD_PCREL20_S2, 124)
>> +RELOC_NUMBER (R_LARCH_TLS_GD_PCREL20_S2, 125)
>> +RELOC_NUMBER (R_LARCH_TLS_DESC_PCREL20_S2, 126)
>> +
>> END_RELOC_NUMBERS (R_LARCH_count)
>>
>> /* Processor specific flags for the ELF header e_flags field.  */
>> diff --git a/ld/testsuite/ld-loongarch-elf/macro_op.d 
>> b/ld/testsuite/ld-loongarch-elf/macro_op.d
>> index edc71bc0dbf..f0d87c03802 100644
>> --- a/ld/testsuite/ld-loongarch-elf/macro_op.d
>> +++ b/ld/testsuite/ld-loongarch-elf/macro_op.d
>> @@ -1,200 +1,205 @@
>> #as:
>> #objdump: -dr
>> +#skip: loongarch32-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.L1>:
>> -[ ]+0:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+4:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+8:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+c:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+10:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+10:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+10:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+14:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+14:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+18:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+18:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+18:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+1c:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+1c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+20:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+20:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+24:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+2c:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+2c:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+30:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+34:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+34:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+34:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+38:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+40:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+44:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+44:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+48:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+48:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+4c:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+50:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+50:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+50:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+54:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+54:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+58:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+58:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+5c:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+5c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+60:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+60:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+64:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+64:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+68:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+6c:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+6c:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+6c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+70:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+70:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+70:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+74:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+74:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+74:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+78:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+78:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+78:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+7c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+7c:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+80:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+80:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+84:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+88:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+88:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+88:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+8c:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+8c:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+8c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+90:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+90:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+90:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+94:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+94:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+94:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+98:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+98:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+9c:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+9c:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+a0:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+a4:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+a4:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+a4:[ ]+R_LARCH_ABS_HI20[ ]+.L1
>> -[ ]+a8:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+a8:[ ]+R_LARCH_ABS_LO12[ ]+.L1
>> -[ ]+ac:[ ]+16000004[ ]+lu32i.d[ ]+\$a0,[ ]+0
>> -[ ]+ac:[ ]+R_LARCH_ABS64_LO20[ ]+.L1
>> -[ ]+b0:[ ]+03000084[ ]+lu52i.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+b0:[ ]+R_LARCH_ABS64_HI12[ ]+.L1
>> -[ ]+b4:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+b4:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+b4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+b8:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+b8:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+b8:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+bc:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+bc:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+bc:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+c0:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+c0:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+c0:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+c4:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+c4:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+c4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+c8:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+c8:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+c8:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+cc:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+cc:[ ]+R_LARCH_PCALA64_LO20[ ]+.L1
>> -[ ]+d0:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+d0:[ ]+R_LARCH_PCALA64_HI12[ ]+.L1
>> -[ ]+d4:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+d8:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+d8:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+d8:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+dc:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+dc:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+dc:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+e0:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+e0:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+e0:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+e4:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+e4:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+e4:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+e8:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+e8:[ ]+R_LARCH_GOT64_PC_LO20[ ]+.L1
>> -[ ]+ec:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+ec:[ ]+R_LARCH_GOT64_PC_HI12[ ]+.L1
>> -[ ]+f0:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+f4:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+f4:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+f8:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+f8:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+fc:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+fc:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+100:[ ]+28c00084[ ]+ld.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+100:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+104:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+104:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+108:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+108:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+10c:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+10c:[ ]+R_LARCH_TLS_IE64_PC_LO20[ ]+TLS1
>> -[ ]+110:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+110:[ ]+R_LARCH_TLS_IE64_PC_HI12[ ]+TLS1
>> -[ ]+114:[ ]+380c1484[ ]+ldx.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+118:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+118:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+11c:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+11c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+11c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+120:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+120:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+124:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+124:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+124:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+128:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+128:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+12c:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+12c:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+130:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> -[ ]+134:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+134:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+138:[ ]+02c00084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+138:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+138:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+13c:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+13c:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+140:[ ]+02c00005[ ]+li\.d[ ]+\$a1,[ ]+0
>> -[ ]+140:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+140:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+144:[ ]+16000005[ ]+lu32i.d[ ]+\$a1,[ ]+0
>> -[ ]+144:[ ]+R_LARCH_GOT64_PC_LO20[ ]+TLS1
>> -[ ]+148:[ ]+030000a5[ ]+lu52i.d[ ]+\$a1,[ ]+\$a1,[ ]+0
>> -[ ]+148:[ ]+R_LARCH_GOT64_PC_HI12[ ]+TLS1
>> -[ ]+14c:[ ]+00109484[ ]+add.d[ ]+\$a0,[ ]+\$a0,[ ]+\$a1
>> +0+ <.L1>:
>> +   0:00150004 move \$a0, \$zero
>> +   4:02bffc04 li.w \$a0, -1
>> +   8:00150004 move \$a0, \$zero
>> +   c:02bffc04 li.w \$a0, -1
>> +  10:1a000004 pcalau12i \$a0, 0
>> +10: R_LARCH_GOT_PC_HI20.L1
>> +10: R_LARCH_RELAX\*ABS\*
>> +  14:28c00084 ld.d \$a0, \$a0, 0
>> +14: R_LARCH_GOT_PC_LO12.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:1a000004 pcalau12i \$a0, 0
>> +18: R_LARCH_GOT_PC_HI20.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:28c00084 ld.d \$a0, \$a0, 0
>> +1c: R_LARCH_GOT_PC_LO12.L1
>> +1c: R_LARCH_RELAX\*ABS\*
>> +  20:1a000004 pcalau12i \$a0, 0
>> +20: R_LARCH_GOT_PC_HI20.L1
>> +20: R_LARCH_RELAX\*ABS\*
>> +  24:02c00005 li.d \$a1, 0
>> +24: R_LARCH_GOT_PC_LO12.L1
>> +24: R_LARCH_RELAX\*ABS\*
>> +  28:16000005 lu32i.d \$a1, 0
>> +28: R_LARCH_GOT64_PC_LO20.L1
>> +  2c:030000a5 lu52i.d \$a1, \$a1, 0
>> +2c: R_LARCH_GOT64_PC_HI12.L1
>> +  30:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  34:1a000004 pcalau12i \$a0, 0
>> +34: R_LARCH_GOT_PC_HI20.L1
>> +34: R_LARCH_RELAX\*ABS\*
>> +  38:28c00084 ld.d \$a0, \$a0, 0
>> +38: R_LARCH_GOT_PC_LO12.L1
>> +38: R_LARCH_RELAX\*ABS\*
>> +  3c:1a000004 pcalau12i \$a0, 0
>> +3c: R_LARCH_GOT_PC_HI20.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:02c00005 li.d \$a1, 0
>> +40: R_LARCH_GOT_PC_LO12.L1
>> +40: R_LARCH_RELAX\*ABS\*
>> +  44:16000005 lu32i.d \$a1, 0
>> +44: R_LARCH_GOT64_PC_LO20.L1
>> +  48:030000a5 lu52i.d \$a1, \$a1, 0
>> +48: R_LARCH_GOT64_PC_HI12.L1
>> +  4c:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  50:1a000004 pcalau12i \$a0, 0
>> +50: R_LARCH_GOT_PC_HI20.L1
>> +50: R_LARCH_RELAX\*ABS\*
>> +  54:28c00084 ld.d \$a0, \$a0, 0
>> +54: R_LARCH_GOT_PC_LO12.L1
>> +54: R_LARCH_RELAX\*ABS\*
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_GOT_PC_HI20.L1
>> +58: R_LARCH_RELAX\*ABS\*
>> +  5c:02c00005 li.d \$a1, 0
>> +5c: R_LARCH_GOT_PC_LO12.L1
>> +5c: R_LARCH_RELAX\*ABS\*
>> +  60:16000005 lu32i.d \$a1, 0
>> +60: R_LARCH_GOT64_PC_LO20.L1
>> +  64:030000a5 lu52i.d \$a1, \$a1, 0
>> +64: R_LARCH_GOT64_PC_HI12.L1
>> +  68:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  6c:1a000004 pcalau12i \$a0, 0
>> +6c: R_LARCH_PCALA_HI20.L1
>> +6c: R_LARCH_RELAX\*ABS\*
>> +  70:02c00084 addi.d \$a0, \$a0, 0
>> +70: R_LARCH_PCALA_LO12.L1
>> +70: R_LARCH_RELAX\*ABS\*
>> +  74:1a000004 pcalau12i \$a0, 0
>> +74: R_LARCH_PCALA_HI20.L1
>> +74: R_LARCH_RELAX\*ABS\*
>> +  78:02c00005 li.d \$a1, 0
>> +78: R_LARCH_PCALA_LO12.L1
>> +78: R_LARCH_RELAX\*ABS\*
>> +  7c:16000005 lu32i.d \$a1, 0
>> +7c: R_LARCH_PCALA64_LO20.L1
>> +  80:030000a5 lu52i.d \$a1, \$a1, 0
>> +80: R_LARCH_PCALA64_HI12.L1
>> +  84:00109484 add.d \$a0, \$a0, \$a1
>> +  88:1a000004 pcalau12i \$a0, 0
>> +88: R_LARCH_PCALA_HI20.L1
>> +88: R_LARCH_RELAX\*ABS\*
>> +  8c:02c00084 addi.d \$a0, \$a0, 0
>> +8c: R_LARCH_PCALA_LO12.L1
>> +8c: R_LARCH_RELAX\*ABS\*
>> +  90:1a000004 pcalau12i \$a0, 0
>> +90: R_LARCH_PCALA_HI20.L1
>> +90: R_LARCH_RELAX\*ABS\*
>> +  94:02c00005 li.d \$a1, 0
>> +94: R_LARCH_PCALA_LO12.L1
>> +94: R_LARCH_RELAX\*ABS\*
>> +  98:16000005 lu32i.d \$a1, 0
>> +98: R_LARCH_PCALA64_LO20.L1
>> +  9c:030000a5 lu52i.d \$a1, \$a1, 0
>> +9c: R_LARCH_PCALA64_HI12.L1
>> +  a0:00109484 add.d \$a0, \$a0, \$a1
>> +  a4:14000004 lu12i.w \$a0, 0
>> +a4: R_LARCH_MARK_LA\*ABS\*
>> +a4: R_LARCH_ABS_HI20.L1
>> +  a8:03800084 ori \$a0, \$a0, 0x0
>> +a8: R_LARCH_ABS_LO12.L1
>> +  ac:16000004 lu32i.d \$a0, 0
>> +ac: R_LARCH_ABS64_LO20.L1
>> +  b0:03000084 lu52i.d \$a0, \$a0, 0
>> +b0: R_LARCH_ABS64_HI12.L1
>> +  b4:1a000004 pcalau12i \$a0, 0
>> +b4: R_LARCH_PCALA_HI20.L1
>> +b4: R_LARCH_RELAX\*ABS\*
>> +  b8:02c00084 addi.d \$a0, \$a0, 0
>> +b8: R_LARCH_PCALA_LO12.L1
>> +b8: R_LARCH_RELAX\*ABS\*
>> +  bc:1a000004 pcalau12i \$a0, 0
>> +bc: R_LARCH_PCALA_HI20.L1
>> +bc: R_LARCH_RELAX\*ABS\*
>> +  c0:02c00084 addi.d \$a0, \$a0, 0
>> +c0: R_LARCH_PCALA_LO12.L1
>> +c0: R_LARCH_RELAX\*ABS\*
>> +  c4:1a000004 pcalau12i \$a0, 0
>> +c4: R_LARCH_PCALA_HI20.L1
>> +c4: R_LARCH_RELAX\*ABS\*
>> +  c8:02c00005 li.d \$a1, 0
>> +c8: R_LARCH_PCALA_LO12.L1
>> +c8: R_LARCH_RELAX\*ABS\*
>> +  cc:16000005 lu32i.d \$a1, 0
>> +cc: R_LARCH_PCALA64_LO20.L1
>> +  d0:030000a5 lu52i.d \$a1, \$a1, 0
>> +d0: R_LARCH_PCALA64_HI12.L1
>> +  d4:00109484 add.d \$a0, \$a0, \$a1
>> +  d8:1a000004 pcalau12i \$a0, 0
>> +d8: R_LARCH_GOT_PC_HI20.L1
>> +d8: R_LARCH_RELAX\*ABS\*
>> +  dc:28c00084 ld.d \$a0, \$a0, 0
>> +dc: R_LARCH_GOT_PC_LO12.L1
>> +dc: R_LARCH_RELAX\*ABS\*
>> +  e0:1a000004 pcalau12i \$a0, 0
>> +e0: R_LARCH_GOT_PC_HI20.L1
>> +e0: R_LARCH_RELAX\*ABS\*
>> +  e4:02c00005 li.d \$a1, 0
>> +e4: R_LARCH_GOT_PC_LO12.L1
>> +e4: R_LARCH_RELAX\*ABS\*
>> +  e8:16000005 lu32i.d \$a1, 0
>> +e8: R_LARCH_GOT64_PC_LO20.L1
>> +  ec:030000a5 lu52i.d \$a1, \$a1, 0
>> +ec: R_LARCH_GOT64_PC_HI12.L1
>> +  f0:380c1484 ldx.d \$a0, \$a0, \$a1
>> +  f4:14000004 lu12i.w \$a0, 0
>> +f4: R_LARCH_TLS_LE_HI20TLS1
>> +  f8:03800084 ori \$a0, \$a0, 0x0
>> +f8: R_LARCH_TLS_LE_LO12TLS1
>> +  fc:1a000004 pcalau12i \$a0, 0
>> +fc: R_LARCH_TLS_IE_PC_HI20TLS1
>> + 100:28c00084 ld.d \$a0, \$a0, 0
>> +100: R_LARCH_TLS_IE_PC_LO12TLS1
>> + 104:1a000004 pcalau12i \$a0, 0
>> +104: R_LARCH_TLS_IE_PC_HI20TLS1
>> + 108:02c00005 li.d \$a1, 0
>> +108: R_LARCH_TLS_IE_PC_LO12TLS1
>> + 10c:16000005 lu32i.d \$a1, 0
>> +10c: R_LARCH_TLS_IE64_PC_LO20TLS1
>> + 110:030000a5 lu52i.d \$a1, \$a1, 0
>> +110: R_LARCH_TLS_IE64_PC_HI12TLS1
>> + 114:380c1484 ldx.d \$a0, \$a0, \$a1
>> + 118:1a000004 pcalau12i \$a0, 0
>> +118: R_LARCH_TLS_LD_PC_HI20TLS1
>> +118: R_LARCH_RELAX\*ABS\*
>> + 11c:02c00084 addi.d \$a0, \$a0, 0
>> +11c: R_LARCH_GOT_PC_LO12TLS1
>> +11c: R_LARCH_RELAX\*ABS\*
>> + 120:1a000004 pcalau12i \$a0, 0
>> +120: R_LARCH_TLS_LD_PC_HI20TLS1
>> +120: R_LARCH_RELAX\*ABS\*
>> + 124:02c00005 li.d \$a1, 0
>> +124: R_LARCH_GOT_PC_LO12TLS1
>> +124: R_LARCH_RELAX\*ABS\*
>> + 128:16000005 lu32i.d \$a1, 0
>> +128: R_LARCH_GOT64_PC_LO20TLS1
>> + 12c:030000a5 lu52i.d \$a1, \$a1, 0
>> +12c: R_LARCH_GOT64_PC_HI12TLS1
>> + 130:00109484 add.d \$a0, \$a0, \$a1
>> + 134:1a000004 pcalau12i \$a0, 0
>> +134: R_LARCH_TLS_GD_PC_HI20TLS1
>> +134: R_LARCH_RELAX\*ABS\*
>> + 138:02c00084 addi.d \$a0, \$a0, 0
>> +138: R_LARCH_GOT_PC_LO12TLS1
>> +138: R_LARCH_RELAX\*ABS\*
>> + 13c:1a000004 pcalau12i \$a0, 0
>> +13c: R_LARCH_TLS_GD_PC_HI20TLS1
>> +13c: R_LARCH_RELAX\*ABS\*
>> + 140:02c00005 li.d \$a1, 0
>> +140: R_LARCH_GOT_PC_LO12TLS1
>> +140: R_LARCH_RELAX\*ABS\*
>> + 144:16000005 lu32i.d \$a1, 0
>> +144: R_LARCH_GOT64_PC_LO20TLS1
>> + 148:030000a5 lu52i.d \$a1, \$a1, 0
>> +148: R_LARCH_GOT64_PC_HI12TLS1
>> + 14c:00109484 add.d \$a0, \$a0, \$a1
>> diff --git a/ld/testsuite/ld-loongarch-elf/macro_op_32.d 
>> b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
>> index 188026a5780..a7349aa8dc0 100644
>> --- a/ld/testsuite/ld-loongarch-elf/macro_op_32.d
>> +++ b/ld/testsuite/ld-loongarch-elf/macro_op_32.d
>> @@ -2,66 +2,68 @@
>> #objdump: -dr
>> #skip: loongarch64-*-*
>>
>> -.*:[    ]+file format .*
>> +.*:     file format .*
>>
>>
>> Disassembly of section .text:
>>
>> -00000000.* <.L1>:
>> -[ ]+0:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+4:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+8:[ ]+00150004[ ]+move[ ]+\$a0,[ ]+\$zero
>> -[ ]+c:[ ]+02bffc04[ ]+li\.w[ ]+\$a0,[ ]+-1
>> -[ ]+10:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+10:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+10:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+14:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+14:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+14:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+18:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+18:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+18:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+1c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+1c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+1c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+20:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+20:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+20:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+24:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+24:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+24:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+28:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+28:[ ]+R_LARCH_MARK_LA[ ]+\*ABS\*
>> -[ ]+28:[ ]+R_LARCH_ABS_HI20[ ]+.L1
>> -[ ]+2c:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+2c:[ ]+R_LARCH_ABS_LO12[ ]+.L1
>> -[ ]+30:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+30:[ ]+R_LARCH_PCALA_HI20[ ]+.L1
>> -[ ]+30:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+34:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+34:[ ]+R_LARCH_PCALA_LO12[ ]+.L1
>> -[ ]+34:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+38:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+38:[ ]+R_LARCH_GOT_PC_HI20[ ]+.L1
>> -[ ]+38:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+3c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+3c:[ ]+R_LARCH_GOT_PC_LO12[ ]+.L1
>> -[ ]+3c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+40:[ ]+14000004[ ]+lu12i.w[ ]+\$a0,[ ]+0
>> -[ ]+40:[ ]+R_LARCH_TLS_LE_HI20[ ]+TLS1
>> -[ ]+44:[ ]+03800084[ ]+ori[ ]+\$a0,[ ]+\$a0,[ ]+0x0
>> -[ ]+44:[ ]+R_LARCH_TLS_LE_LO12[ ]+TLS1
>> -[ ]+48:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+48:[ ]+R_LARCH_TLS_IE_PC_HI20[ ]+TLS1
>> -[ ]+4c:[ ]+28800084[ ]+ld.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+4c:[ ]+R_LARCH_TLS_IE_PC_LO12[ ]+TLS1
>> -[ ]+50:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+50:[ ]+R_LARCH_TLS_LD_PC_HI20[ ]+TLS1
>> -[ ]+54:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+54:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+54:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> -[ ]+58:[ ]+1a000004[ ]+pcalau12i[ ]+\$a0,[ ]+0
>> -[ ]+58:[ ]+R_LARCH_TLS_GD_PC_HI20[ ]+TLS1
>> -[ ]+5c:[ ]+02800084[ ]+addi.w[ ]+\$a0,[ ]+\$a0,[ ]+0
>> -[ ]+5c:[ ]+R_LARCH_GOT_PC_LO12[ ]+TLS1
>> -[ ]+5c:[ ]+R_LARCH_RELAX[ ]+\*ABS\*
>> +0+ <.L1>:
>> +   0:00150004 move \$a0, \$zero
>> +   4:02bffc04 li.w \$a0, -1
>> +   8:00150004 move \$a0, \$zero
>> +   c:02bffc04 li.w \$a0, -1
>> +  10:1a000004 pcalau12i \$a0, 0
>> +10: R_LARCH_GOT_PC_HI20.L1
>> +10: R_LARCH_RELAX\*ABS\*
>> +  14:28800084 ld.w \$a0, \$a0, 0
>> +14: R_LARCH_GOT_PC_LO12.L1
>> +14: R_LARCH_RELAX\*ABS\*
>> +  18:1a000004 pcalau12i \$a0, 0
>> +18: R_LARCH_GOT_PC_HI20.L1
>> +18: R_LARCH_RELAX\*ABS\*
>> +  1c:28800084 ld.w \$a0, \$a0, 0
>> +1c: R_LARCH_GOT_PC_LO12.L1
>> +1c: R_LARCH_RELAX\*ABS\*
>> +  20:1a000004 pcalau12i \$a0, 0
>> +20: R_LARCH_PCALA_HI20.L1
>> +20: R_LARCH_RELAX\*ABS\*
>> +  24:02800084 addi.w \$a0, \$a0, 0
>> +24: R_LARCH_PCALA_LO12.L1
>> +24: R_LARCH_RELAX\*ABS\*
>> +  28:14000004 lu12i.w \$a0, 0
>> +28: R_LARCH_MARK_LA\*ABS\*
>> +28: R_LARCH_ABS_HI20.L1
>> +  2c:03800084 ori \$a0, \$a0, 0x0
>> +2c: R_LARCH_ABS_LO12.L1
>> +  30:1a000004 pcalau12i \$a0, 0
>> +30: R_LARCH_PCALA_HI20.L1
>> +30: R_LARCH_RELAX\*ABS\*
>> +  34:02800084 addi.w \$a0, \$a0, 0
>> +34: R_LARCH_PCALA_LO12.L1
>> +34: R_LARCH_RELAX\*ABS\*
>> +  38:1a000004 pcalau12i \$a0, 0
>> +38: R_LARCH_GOT_PC_HI20.L1
>> +38: R_LARCH_RELAX\*ABS\*
>> +  3c:28800084 ld.w \$a0, \$a0, 0
>> +3c: R_LARCH_GOT_PC_LO12.L1
>> +3c: R_LARCH_RELAX\*ABS\*
>> +  40:14000004 lu12i.w \$a0, 0
>> +40: R_LARCH_TLS_LE_HI20TLS1
>> +  44:03800084 ori \$a0, \$a0, 0x0
>> +44: R_LARCH_TLS_LE_LO12TLS1
>> +  48:1a000004 pcalau12i \$a0, 0
>> +48: R_LARCH_TLS_IE_PC_HI20TLS1
>> +  4c:28800084 ld.w \$a0, \$a0, 0
>> +4c: R_LARCH_TLS_IE_PC_LO12TLS1
>> +  50:1a000004 pcalau12i \$a0, 0
>> +50: R_LARCH_TLS_LD_PC_HI20TLS1
>> +50: R_LARCH_RELAX\*ABS\*
>> +  54:02800084 addi.w \$a0, \$a0, 0
>> +54: R_LARCH_GOT_PC_LO12TLS1
>> +54: R_LARCH_RELAX\*ABS\*
>> +  58:1a000004 pcalau12i \$a0, 0
>> +58: R_LARCH_TLS_GD_PC_HI20TLS1
>> +58: R_LARCH_RELAX\*ABS\*
>> +  5c:02800084 addi.w \$a0, \$a0, 0
>> +5c: R_LARCH_GOT_PC_LO12TLS1
>> +5c: R_LARCH_RELAX\*ABS\*
>> -- 
>> 2.43.0
>>
>>
>


  reply	other threads:[~2023-12-29 10:36 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-22 11:42 [PATCH v5 0/5] Add support for TLS Descriptors (TLSDESC) Lulu Cai
2023-12-22 11:42 ` [PATCH v5 1/5] LoongArch: Add new relocs and macro for TLSDESC Lulu Cai
2023-12-22 11:42 ` [PATCH v5 2/5] LoongArch: Add support for TLSDESC in ld Lulu Cai
2023-12-28 14:54   ` Tatsuyuki Ishi
2023-12-29 10:24     ` Lulu Cai
2023-12-22 11:42 ` [PATCH v5 3/5] LoongArch: Add tls transition support Lulu Cai
2023-12-28 14:42   ` Tatsuyuki Ishi
2023-12-29 10:31     ` Lulu Cai
2023-12-22 11:42 ` [PATCH v5 4/5] LoongArch: Add support for TLS LD/GD/DESC relaxation Lulu Cai
2023-12-28 14:38   ` Tatsuyuki Ishi
2023-12-29 10:36     ` Lulu Cai [this message]
2023-12-29 10:45     ` Lulu Cai
2024-01-07 23:00       ` Tatsuyuki Ishi
2024-01-08  0:22         ` Fangrui Song
     [not found]         ` <DS7PR12MB5765D250CD96B4F6EF6674BACB6B2@DS7PR12MB5765.namprd12.prod.outlook.com>
2024-01-08  6:00           ` Lulu Cai
2024-01-08  7:59             ` Tatsuyuki Ishi
2024-01-27  2:54 ` [PATCH v5 0/5] Add support for TLS Descriptors (TLSDESC) Fangrui Song
     [not found] ` <DS7PR12MB5765A6FBD6297BAEDB57FF6CCB782@DS7PR12MB5765.namprd12.prod.outlook.com>
2024-01-27  7:26   ` Lulu Cai
2024-01-27 19:18     ` Fangrui Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c22d3baa-27a8-c9af-2786-d1ba5dcf6fb2@loongson.cn \
    --to=cailulu@loongson.cn \
    --cc=binutils@sourceware.org \
    --cc=chenglulu@loongson.cn \
    --cc=hejinyang@loongson.cn \
    --cc=i.swmail@xen0n.name \
    --cc=ishitatsuyuki@gmail.com \
    --cc=liuzhensong@loongson.cn \
    --cc=luweining@loongson.cn \
    --cc=maskray@google.com \
    --cc=mengqinggang@loongson.cn \
    --cc=wanglei@loongson.cn \
    --cc=xry111@xry111.site \
    --cc=xuchenghua@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).