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