* config/tc-z8k.c (apply_fix): Handle 7-bit relocations correctly.
Problem found by Tadashi G. Takaoka <tadashi.g.takaoka@gmail.com>.
+2021-03-18 Christian Groessler <chris@groessler.org>
+
+ * config/tc-z8k.c (apply_fix): Handle 7-bit relocations correctly.
+ Problem found by Tadashi G. Takaoka <tadashi.g.takaoka@gmail.com>.
+
2021-03-16 Kuan-Lin Chen <kuanlinchentw@gmail.com>
* config/tc-riscv.c (ext_version_table): Add b, zba, zbb and zbc.
/* size is in nibbles. */
newfix ((ptr - buffer) / 2, type, size + 1, operand);
- switch (size)
+
+ if (type == BFD_RELOC_Z8K_DISP7)
{
- case 8: /* 8 nibbles == 32 bits. */
- *ptr++ = n >> 28;
- *ptr++ = n >> 24;
- *ptr++ = n >> 20;
- *ptr++ = n >> 16;
- /* Fall through. */
- case 4: /* 4 nibbles == 16 bits. */
- *ptr++ = n >> 12;
- *ptr++ = n >> 8;
- /* Fall through. */
- case 2:
- *ptr++ = n >> 4;
- /* Fall through. */
- case 1:
+ /* 2 nibbles, but most significant bit is part of the opcode == 7 bits. */
+ *ptr++ = (n >> 4) & 7;
*ptr++ = n >> 0;
- break;
+ }
+ else
+ {
+ switch (size)
+ {
+ case 8: /* 8 nibbles == 32 bits. */
+ *ptr++ = n >> 28;
+ *ptr++ = n >> 24;
+ *ptr++ = n >> 20;
+ *ptr++ = n >> 16;
+ /* Fall through. */
+ case 4: /* 4 nibbles == 16 bits. */
+ *ptr++ = n >> 12;
+ *ptr++ = n >> 8;
+ /* Fall through. */
+ case 2:
+ *ptr++ = n >> 4;
+ /* Fall through. */
+ case 1:
+ *ptr++ = n >> 0;
+ break;
+ }
}
return ptr;
}