mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-24 10:08:58 +08:00
* config/tc-cris.c (cris_number_to_imm): Except for
BFD_RELOC_NONE, always set contents. Where previously this was skipped, set contents to 0.
This commit is contained in:
@ -1,5 +1,9 @@
|
|||||||
2008-11-12 Hans-Peter Nilsson <hp@axis.com>
|
2008-11-12 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
|
* config/tc-cris.c (cris_number_to_imm): Except for
|
||||||
|
BFD_RELOC_NONE, always set contents. Where previously this was
|
||||||
|
skipped, set contents to 0.
|
||||||
|
|
||||||
PR gas/7025
|
PR gas/7025
|
||||||
* input-scrub.c (input_scrub_include_sb): Make the position
|
* input-scrub.c (input_scrub_include_sb): Make the position
|
||||||
after the input have defined contents, a 0 character.
|
after the input have defined contents, a 0 character.
|
||||||
|
@ -3613,10 +3613,12 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Only do this for old-arch binaries. */
|
/* Only use the computed value for old-arch binaries. For all
|
||||||
|
others, where we're going to output a relocation, put 0 in the
|
||||||
|
code. */
|
||||||
if (cris_arch != arch_cris_any_v0_v10
|
if (cris_arch != arch_cris_any_v0_v10
|
||||||
&& (fixP->fx_addsy != NULL || fixP->fx_pcrel))
|
&& (fixP->fx_addsy != NULL || fixP->fx_pcrel))
|
||||||
return;
|
val = 0;
|
||||||
|
|
||||||
switch (fixP->fx_r_type)
|
switch (fixP->fx_r_type)
|
||||||
{
|
{
|
||||||
@ -3643,13 +3645,14 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
|
|||||||
case BFD_RELOC_CRIS_16_TPREL:
|
case BFD_RELOC_CRIS_16_TPREL:
|
||||||
/* We don't want to put in any kind of non-zero bits in the data
|
/* We don't want to put in any kind of non-zero bits in the data
|
||||||
being relocated for these. */
|
being relocated for these. */
|
||||||
|
md_number_to_chars (bufp, 0, n);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_32_PCREL:
|
case BFD_RELOC_32_PCREL:
|
||||||
/* If this one isn't fully resolved, we don't want to put anything
|
/* If this one isn't fully resolved, we don't want to put non-zero
|
||||||
in the object. */
|
in the object. */
|
||||||
if (fixP->fx_addsy != NULL || fixP->fx_pcrel)
|
if (fixP->fx_addsy != NULL || fixP->fx_pcrel)
|
||||||
break;
|
val = 0;
|
||||||
|
|
||||||
/* Fall through. */
|
/* Fall through. */
|
||||||
case BFD_RELOC_32:
|
case BFD_RELOC_32:
|
||||||
@ -3671,38 +3674,30 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
|
|||||||
if (val > 0xffff || val < -32768)
|
if (val > 0xffff || val < -32768)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 16 bit range: %ld"), val);
|
_("Value not in 16 bit range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[1] = (val >> 8) & 0xFF;
|
||||||
{
|
bufp[0] = val & 0xFF;
|
||||||
bufp[1] = (val >> 8) & 0xFF;
|
|
||||||
bufp[0] = val & 0xFF;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_SIGNED_16:
|
case BFD_RELOC_CRIS_SIGNED_16:
|
||||||
if (val > 32767 || val < -32768)
|
if (val > 32767 || val < -32768)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 16 bit signed range: %ld"), val);
|
_("Value not in 16 bit signed range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[1] = (val >> 8) & 0xFF;
|
||||||
{
|
bufp[0] = val & 0xFF;
|
||||||
bufp[1] = (val >> 8) & 0xFF;
|
|
||||||
bufp[0] = val & 0xFF;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_8:
|
case BFD_RELOC_8:
|
||||||
case BFD_RELOC_8_PCREL:
|
case BFD_RELOC_8_PCREL:
|
||||||
if (val > 255 || val < -128)
|
if (val > 255 || val < -128)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 8 bit range: %ld"), val);
|
as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 8 bit range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] = val & 0xFF;
|
||||||
bufp[0] = val & 0xFF;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_SIGNED_8:
|
case BFD_RELOC_CRIS_SIGNED_8:
|
||||||
if (val > 127 || val < -128)
|
if (val > 127 || val < -128)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 8 bit signed range: %ld"), val);
|
_("Value not in 8 bit signed range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] = val & 0xFF;
|
||||||
bufp[0] = val & 0xFF;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_LAPCQ_OFFSET:
|
case BFD_RELOC_CRIS_LAPCQ_OFFSET:
|
||||||
@ -3712,37 +3707,32 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg)
|
|||||||
if (val > 15 || val < 0)
|
if (val > 15 || val < 0)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 4 bit unsigned range: %ld"), val);
|
_("Value not in 4 bit unsigned range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] |= val & 0x0F;
|
||||||
bufp[0] |= val & 0x0F;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_UNSIGNED_5:
|
case BFD_RELOC_CRIS_UNSIGNED_5:
|
||||||
if (val > 31 || val < 0)
|
if (val > 31 || val < 0)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 5 bit unsigned range: %ld"), val);
|
_("Value not in 5 bit unsigned range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] |= val & 0x1F;
|
||||||
bufp[0] |= val & 0x1F;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_SIGNED_6:
|
case BFD_RELOC_CRIS_SIGNED_6:
|
||||||
if (val > 31 || val < -32)
|
if (val > 31 || val < -32)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 6 bit range: %ld"), val);
|
_("Value not in 6 bit range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] |= val & 0x3F;
|
||||||
bufp[0] |= val & 0x3F;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_UNSIGNED_6:
|
case BFD_RELOC_CRIS_UNSIGNED_6:
|
||||||
if (val > 63 || val < 0)
|
if (val > 63 || val < 0)
|
||||||
as_bad_where (fixP->fx_file, fixP->fx_line,
|
as_bad_where (fixP->fx_file, fixP->fx_line,
|
||||||
_("Value not in 6 bit unsigned range: %ld"), val);
|
_("Value not in 6 bit unsigned range: %ld"), val);
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] |= val & 0x3F;
|
||||||
bufp[0] |= val & 0x3F;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_CRIS_BDISP8:
|
case BFD_RELOC_CRIS_BDISP8:
|
||||||
if (! fixP->fx_addsy)
|
bufp[0] = branch_disp (val);
|
||||||
bufp[0] = branch_disp (val);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BFD_RELOC_NONE:
|
case BFD_RELOC_NONE:
|
||||||
|
Reference in New Issue
Block a user