diff options
author | Alan Modra <amodra@gmail.com> | 2020-02-20 23:35:21 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-02-21 10:47:05 +1030 |
commit | 10a95fcc1f8fb621dfc82b1097336cc58a3574f5 (patch) | |
tree | fc077d6886c9c078aa8643a97a5bd45e26c16814 /gas/config | |
parent | dda2980f54a0c9437de047f3020f520dd1e0de6a (diff) | |
download | gdb-10a95fcc1f8fb621dfc82b1097336cc58a3574f5.zip gdb-10a95fcc1f8fb621dfc82b1097336cc58a3574f5.tar.gz gdb-10a95fcc1f8fb621dfc82b1097336cc58a3574f5.tar.bz2 |
pdp11 reloc processing
This allows pdp11 to handle 32-bit fixups that can be applied by gas,
and improves the error message emitted when the required reloc isn't
available.
* config/tc-pdp11.c (md_apply_fix): Handle BFD_RELOC_32.
(tc_gen_reloc): Only give a BAD_CASE assertion on pcrel relocs.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-pdp11.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/gas/config/tc-pdp11.c b/gas/config/tc-pdp11.c index 7b3f663..d38a3cd 100644 --- a/gas/config/tc-pdp11.c +++ b/gas/config/tc-pdp11.c @@ -257,6 +257,10 @@ md_apply_fix (fixS *fixP, mask = 0xffff; shift = 0; break; + case BFD_RELOC_32: + mask = 0xffffffff; + shift = 0; + break; case BFD_RELOC_PDP11_DISP_8_PCREL: mask = 0x00ff; shift = 1; @@ -1419,22 +1423,22 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, /* This is taken account for in md_apply_fix(). */ reloc->addend = -symbol_get_bfdsym (fixp->fx_addsy)->section->vma; - switch (fixp->fx_r_type) + code = fixp->fx_r_type; + if (fixp->fx_pcrel) { - case BFD_RELOC_16: - if (fixp->fx_pcrel) - code = BFD_RELOC_16_PCREL; - else - code = BFD_RELOC_16; - break; + switch (code) + { + case BFD_RELOC_16: + code = BFD_RELOC_16_PCREL; + break; - case BFD_RELOC_16_PCREL: - code = BFD_RELOC_16_PCREL; - break; + case BFD_RELOC_16_PCREL: + break; - default: - BAD_CASE (fixp->fx_r_type); - return NULL; + default: + BAD_CASE (code); + return NULL; + } } reloc->howto = bfd_reloc_type_lookup (stdoutput, code); |