mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 09:14:14 +08:00
Fix PRU GAS for 32-bit hosts
The PRU GAS port I originally submitted does not build on 32bit hosts. This patch fixes it by aligning md_number_to_chars's definition with the global declaration in tc.h. Here is the original bug report I got: https://github.com/rcn-ee/repos/pull/23#issuecomment-269915175 * config/tc-pru.c (md_number_to_chars): Fix parameter to be valueT, as declared in tc.h. (md_apply_fix): Fix to work on 32-bit hosts. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
This commit is contained in:

committed by
Alan Modra

parent
27c3ce29f8
commit
ddb2c6fdfc
@ -1,3 +1,9 @@
|
|||||||
|
2017-01-03 Dimitar Dimitrov <dimitar@dinux.eu>
|
||||||
|
|
||||||
|
* config/tc-pru.c (md_number_to_chars): Fix parameter to be
|
||||||
|
valueT, as declared in tc.h.
|
||||||
|
(md_apply_fix): Fix to work on 32-bit hosts.
|
||||||
|
|
||||||
2017-01-02 Alan Modra <amodra@gmail.com>
|
2017-01-02 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
Update year range in copyright notice of all files.
|
Update year range in copyright notice of all files.
|
||||||
|
@ -175,7 +175,7 @@ md_chars_to_number (char *buf, int n)
|
|||||||
into the series of bytes that represent the number
|
into the series of bytes that represent the number
|
||||||
on the target machine. */
|
on the target machine. */
|
||||||
void
|
void
|
||||||
md_number_to_chars (char *buf, uint64_t val, int n)
|
md_number_to_chars (char *buf, valueT val, int n)
|
||||||
{
|
{
|
||||||
gas_assert (n == 1 || n == 2 || n == 4 || n == 8);
|
gas_assert (n == 1 || n == 2 || n == 4 || n == 8);
|
||||||
number_to_chars_littleendian (buf, val, n);
|
number_to_chars_littleendian (buf, val, n);
|
||||||
@ -808,20 +808,25 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
/* Fix up the instruction. Non-contiguous bitfields need
|
/* Fix up the instruction. Non-contiguous bitfields need
|
||||||
special handling. */
|
special handling. */
|
||||||
if (fixP->fx_r_type == BFD_RELOC_PRU_S10_PCREL)
|
if (fixP->fx_r_type == BFD_RELOC_PRU_LDI32)
|
||||||
SET_BROFF_URAW (insn, fixup);
|
|
||||||
else if (fixP->fx_r_type == BFD_RELOC_PRU_LDI32)
|
|
||||||
{
|
{
|
||||||
/* As the only 64-bit "insn", LDI32 needs special handling. */
|
/* As the only 64-bit "insn", LDI32 needs special handling. */
|
||||||
uint32_t insn1 = insn & 0xffffffff;
|
uint32_t insn1 = insn & 0xffffffff;
|
||||||
uint32_t insn2 = insn >> 32;
|
uint32_t insn2 = insn >> 32;
|
||||||
SET_INSN_FIELD (IMM16, insn1, fixup & 0xffff);
|
SET_INSN_FIELD (IMM16, insn1, fixup & 0xffff);
|
||||||
SET_INSN_FIELD (IMM16, insn2, fixup >> 16);
|
SET_INSN_FIELD (IMM16, insn2, fixup >> 16);
|
||||||
insn = insn1 | ((uint64_t)insn2 << 32);
|
|
||||||
|
md_number_to_chars (buf, insn1, 4);
|
||||||
|
md_number_to_chars (buf + 4, insn2, 4);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
insn = (insn & ~howto->dst_mask) | (fixup << howto->bitpos);
|
{
|
||||||
md_number_to_chars (buf, insn, fixP->fx_size);
|
if (fixP->fx_r_type == BFD_RELOC_PRU_S10_PCREL)
|
||||||
|
SET_BROFF_URAW (insn, fixup);
|
||||||
|
else
|
||||||
|
insn = (insn & ~howto->dst_mask) | (fixup << howto->bitpos);
|
||||||
|
md_number_to_chars (buf, insn, fixP->fx_size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fixP->fx_done = 1;
|
fixP->fx_done = 1;
|
||||||
|
Reference in New Issue
Block a user