[v1,0/2] LoongArch: Modify the method of obtaining symbolic addresses.

Message ID 20220719130852.2011955-1-chenglulu@loongson.cn
Headers
Series LoongArch: Modify the method of obtaining symbolic addresses. |

Message

Lulu Cheng July 19, 2022, 1:08 p.m. UTC
  1. The original LA macro instruction is split into two instructions to
   obtain the address of the symbol if enable '-mexplicit-relocs'.
2. Currently, '-mcmodel=' only supports 'normal' mode, because other mode
   behaviors are not yet determined. This function is gradually improved
   by the subsequent handling.
3. Modify the method that calls global functions. From 'la.global + jirl'
   to 'bl'.
4. Some R_LARCH_64 in section .eh_frame will to generate  R_LARCH_NONE, we
   change ASM_PREFERRED_EH_DATA_FORMAT from 'WD_EH_PE_absptr' to
   'WD_EH_PE_pcrel | DW_EH_PE_sdata4' then relocation to R_LARCH_32_PCREL
   from R_LARCH_64 in setction .eh_frame and not generate dynamic relocation
   for R_LARCH_32_PCREL.

This new symbol loading method not support by upstream binutils yet,
this GCC port requires the following patches applied to binutils to build.

https://sourceware.org/pipermail/binutils/2022-July/121849.html
https://sourceware.org/pipermail/binutils/2022-July/121850.html
https://sourceware.org/pipermail/binutils/2022-July/121851.html
https://sourceware.org/pipermail/binutils/2022-July/121852.html
https://sourceware.org/pipermail/binutils/2022-July/121853.html

Lulu Cheng (2):
  LoongArch: Modify the method of obtaining symbolic addresses.
  LoongArch: Modify the definition of the ASM_PREFERRED_EH_DATA_FORMAT
    macro.

 .../config/loongarch/loongarch-common.cc      |   1 +
 gcc/config/loongarch/constraints.md           |  24 +-
 gcc/config/loongarch/genopts/loongarch.opt.in |   4 +
 gcc/config/loongarch/loongarch-protos.h       |   9 +-
 gcc/config/loongarch/loongarch.cc             | 660 +++++++++++++-----
 gcc/config/loongarch/loongarch.h              |   4 +-
 gcc/config/loongarch/loongarch.md             | 401 +++--------
 gcc/config/loongarch/loongarch.opt            |   4 +
 gcc/config/loongarch/predicates.md            |  56 +-
 9 files changed, 629 insertions(+), 534 deletions(-)
  

Comments

Lulu Cheng July 26, 2022, 6:36 a.m. UTC | #1
在 2022/7/19 下午9:08, Lulu Cheng 写道:
> 1. The original LA macro instruction is split into two instructions to
>     obtain the address of the symbol if enable '-mexplicit-relocs'.
> 2. Currently, '-mcmodel=' only supports 'normal' mode, because other mode
>     behaviors are not yet determined. This function is gradually improved
>     by the subsequent handling.
> 3. Modify the method that calls global functions. Changed from 'la.global + jirl'
>     to 'bl'.
> 4. Some R_LARCH_64 in section .eh_frame will to generate  R_LARCH_NONE, we
>     change ASM_PREFERRED_EH_DATA_FORMAT from 'WD_EH_PE_absptr' to
>     'WD_EH_PE_pcrel | DW_EH_PE_sdata4' then relocation to R_LARCH_32_PCREL
>     from R_LARCH_64 in setction .eh_frame and not generate dynamic relocation
>     for R_LARCH_32_PCREL.
>
> This new symbol loading method not support by upstream binutils yet,
> this GCC port requires the following patches applied to binutils to build.
>
> https://sourceware.org/pipermail/binutils/2022-July/121849.html
> https://sourceware.org/pipermail/binutils/2022-July/121850.html
> https://sourceware.org/pipermail/binutils/2022-July/121851.html
> https://sourceware.org/pipermail/binutils/2022-July/121852.html
> https://sourceware.org/pipermail/binutils/2022-July/121853.html
>
> Lulu Cheng (2):
>    LoongArch: Modify the method of obtaining symbolic addresses.
>    LoongArch: Modify the definition of the ASM_PREFERRED_EH_DATA_FORMAT
>      macro.
>
>   .../config/loongarch/loongarch-common.cc      |   1 +
>   gcc/config/loongarch/constraints.md           |  24 +-
>   gcc/config/loongarch/genopts/loongarch.opt.in |   4 +
>   gcc/config/loongarch/loongarch-protos.h       |   9 +-
>   gcc/config/loongarch/loongarch.cc             | 660 +++++++++++++-----
>   gcc/config/loongarch/loongarch.h              |   4 +-
>   gcc/config/loongarch/loongarch.md             | 401 +++--------
>   gcc/config/loongarch/loongarch.opt            |   4 +
>   gcc/config/loongarch/predicates.md            |  56 +-
>   9 files changed, 629 insertions(+), 534 deletions(-)
>