On 7/12/21 9:23 PM, Ilya Leoshkevich wrote:
> Bootstrapped and regtested on s390x-redhat-linux.  Ok for master?
> 
> v1: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573614.html
> v1 -> v2: Do not use UNSPEC_PLT in 64-bit code and rename it to
>           UNSPEC_PLT31 (Ulrich, Andreas).  Do not append @PLT only to
>           weak symbols in non-PIC code (Ulrich).  Add TLS tests.
> 
> v2: https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574646.html
> v2 -> v3: Use %K in function_profiler() and s390_output_mi_thunk(),
>           add tests for these cases.
> 
> 
> 
> This helps with generating code for kernel hotpatches, which contain
> individual functions and are loaded more than 2G away from vmlinux.
> This should not create performance regressions for the normal use
> cases, because for local functions ld replaces @PLT calls with direct
> calls.
> 
> gcc/ChangeLog:
> 
>       * config/s390/predicates.md (bras_sym_operand): Accept all
>       functions in 64-bit mode, use UNSPEC_PLT31.
>       (larl_operand): Use UNSPEC_PLT31.
>       * config/s390/s390.c (s390_loadrelative_operand_p): Likewise.
>       (legitimize_pic_address): Likewise.
>       (s390_emit_tls_call_insn): Mark __tls_get_offset as function,
>       use UNSPEC_PLT31.
>       (s390_delegitimize_address): Use UNSPEC_PLT31.
>       (s390_output_addr_const_extra): Likewise.
>       (print_operand): Add @PLT to TLS calls, handle %K.
>       (s390_function_profiler): Mark __fentry__/_mcount as function,
>       use %K, use UNSPEC_PLT31.
>       (s390_output_mi_thunk): Use only UNSPEC_GOT, use %K.
>       (s390_emit_call): Use UNSPEC_PLT31.
>       (s390_emit_tpf_eh_return): Mark __tpf_eh_return as function.
>       * config/s390/s390.md (UNSPEC_PLT31): Rename from UNSPEC_PLT.
>       (*movdi_64): Use %K.
>       (reload_base_64): Likewise.
>       (*sibcall_brc): Likewise.
>       (*sibcall_brcl): Likewise.
>       (*sibcall_value_brc): Likewise.
>       (*sibcall_value_brcl): Likewise.
>       (*bras): Likewise.
>       (*brasl): Likewise.
>       (*bras_r): Likewise.
>       (*brasl_r): Likewise.
>       (*bras_tls): Likewise.
>       (*brasl_tls): Likewise.
>       (main_base_64): Likewise.
>       (reload_base_64): Likewise.
>       (@split_stack_call<mode>): Likewise.

Ok. Thanks!

Andreas

Reply via email to