gas: default TC_VALIDATE_FIX_SUB to 0
authorAlan Modra <amodra@gmail.com>
Sat, 10 Jul 2021 06:28:44 +0000 (15:58 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 14 Jul 2021 12:22:20 +0000 (21:52 +0930)
commit9cce9fab90e0951c6816d97801e124e392e74dd9
tree30af6ff2fa37c54f9644201b08d17ede2f8fbc47
parent51d29b8cacd75865a9ffc46cffffe1e47c33ccff
gas: default TC_VALIDATE_FIX_SUB to 0

gas/write.c provides a fallback TC_VALIDATE_FIX_SUB define that can be
a problem for some targets, the problem being that a non-zero
definition of TC_VALIDATE_FIX_SUB says that some uses of fx_subsy are
OK, in effect that the target will handle fx_subsy in md_apply_fix
and/or tc_gen_reloc.  A lot of targets don't have the necessary
md_apply_fix and tc_gen_reloc support.  So a safer default is to
disallow fx_subsy by default.

I've had a good look over target usage of fx_subsy, and think I've
caught all the cases where targets need TC_VALIDATE_FIX_SUB.  Possible
failures would be limited to alpha, microblaze, ppc and s390 (the
targets that define UNDEFINED_DIFFERENCE_OK), or targets that generate
fixups with BFD_RELOC_GPREL32/16 and use a syntax explicitly showing
a difference expression.

* write.c (TC_VALIDATE_FIX_SUB): Default to 0.
* config/tc-hppa.h (TC_VALIDATE_FIX_SUB): Define.
* config/tc-microblaze.h (TC_VALIDATE_FIX_SUB): Define.
* config/tc-alpha.h (TC_VALIDATE_FIX_SUB): Define for ECOFF.
* config/tc-ppc.h (TC_VALIDATE_FIX_SUB): Don't define for ELF.
Do define for XCOFF.
gas/ChangeLog
gas/config/tc-alpha.h
gas/config/tc-hppa.h
gas/config/tc-microblaze.h
gas/config/tc-ppc.h
gas/write.c