IBM Z: Fix pcrel relocs for symA-symB expressions
authorAndreas Krebbel <krebbel@linux.ibm.com>
Mon, 3 Jul 2023 17:51:51 +0000 (19:51 +0200)
committerAndreas Krebbel <krebbel@linux.ibm.com>
Mon, 3 Jul 2023 17:52:02 +0000 (19:52 +0200)
commitd32e20f0bf7dcafd712e532e1274f64f613088e6
tree66ecfe821b115877fd8fdc33a8be12b0e1e3b9d1
parent9dbbe5c948f5adcf7097339337db74d5548b63d0
IBM Z: Fix pcrel relocs for symA-symB expressions

The code in md_apply_fix which tries to deduce from the operand type
which reloc to apply currently does the wrong thing for absolute
relocs which have been re-written by fixup_segment as pc-relative to
implement a subtraction of a local and an external symbol.

In all these cases we wrongly emit an absolute reloc because we ignore
the fx_pcrel flag in md_apply_fix. However, only for the last one we
actually support a pc relative relocation of the proper size and can
implement it accordingly. For the other 3 we have to issue an error.

foo:
  cli 0(%r2),undef-foo
  la %r2,undef-foo(%r2)
  lay %r2,undef-foo(%r2)
  lhi %r2,undef-foo
gas/config/tc-s390.c
gas/testsuite/gas/s390/esa-reloc.d