On 07.02.19 11:09, Ilya Leoshkevich wrote:
> Bootstrapped and regtested on s390x-redhat-linux.
> 
> Implementation of section anchors in S/390 back-end added in r266741
> broke jump labels in S/390 Linux kernel [1].  Currently jump labels
> pass global variable addresses to .quad directive in inline assembly
> using "X" constraint.  In the past this used to produce regular symbol
> references, however, after r266741 we sometimes get values like
> (plus (reg) (const_int)), where (reg) points to a section anchor.
> Strictly speaking, this is still correct, since "X" accepts anything.
> Thus, now we need another way to support jump labels.
> 
> The existing "i" constraint cannot be used, since with -fPIC it must
> not accept non-local symbols, however, jump labels do require that,
> e.g. __tracepoint_xdp_exception from kernel proper might be referenced
> from kernel modules.
> 
> The existing "ZL" constraint cannot be used for the same reason.
> 
> The existing "b" constraint cannot be used because of the way
> expand_asm_stmt works.  It deduces whether the constraint allows
> regs, subregs or mems, and processes asm operands differently based on
> that.  "b" is supposed to accept values like (mem (symbol_ref)), and
> there appears to be no way to explain to expand_asm_stmt that for "b"
> mem's address must not be in a register.
> 
> This patch introduces the new machine-specific constraint named "jdd" -
> "j" prefix is already used for constants, and "d" stands for "data".
> It accepts anything that fits into the data section, whether or not
> this might require a relocation, that is, anything that passes
> CONSTANT_P check.
> 
> [1] https://lkml.org/lkml/2019/1/23/346
> 
> gcc/ChangeLog:
> 
> 2019-02-06  Ilya Leoshkevich  <i...@linux.ibm.com>
> 
>       * config/s390/constraints.md (jdd): New constraint.
> 
> gcc/testsuite/ChangeLog:
> 
> 2019-02-06  Ilya Leoshkevich  <i...@linux.ibm.com>
> 
>       * gcc.target/s390/jump-label.c: New test.

Ok. Thanks!

Andreas

Reply via email to