2009-07-27 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
* config/tc-cr16.c (md_apply_fix): Put the addend value alone in to object file without symbol values. (tc_gen_reloc): For local symbols resolved or its absolute symbol, then set the relocation type as NULL.
This commit is contained in:
parent
86514226a5
commit
7859b21da5
@ -1,3 +1,10 @@
|
||||
2009-07-27 M R Swami Reddy <MR.Swami.Reddy@nsc.com>
|
||||
|
||||
* config/tc-cr16.c (md_apply_fix): Put the addend value alone in to
|
||||
object file without symbol values.
|
||||
(tc_gen_reloc): For local symbols resolved or its absolute symbol,
|
||||
then set the relocation type as NULL.
|
||||
|
||||
2009-07-25 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/tc-i386.c (cpu_arch): Add l1om.
|
||||
|
@ -523,6 +523,13 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP)
|
||||
arelent * reloc;
|
||||
bfd_reloc_code_real_type code;
|
||||
|
||||
/* If symbols are local and resolved, then no relocation needed. */
|
||||
if ( ((fixP->fx_addsy)
|
||||
&& (S_GET_SEGMENT (fixP->fx_addsy) == absolute_section))
|
||||
|| ((fixP->fx_subsy)
|
||||
&& (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section)))
|
||||
return NULL;
|
||||
|
||||
reloc = xmalloc (sizeof (arelent));
|
||||
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
|
||||
@ -728,39 +735,52 @@ void
|
||||
md_apply_fix (fixS *fixP, valueT *valP, segT seg)
|
||||
{
|
||||
valueT val = * valP;
|
||||
char *buf = fixP->fx_frag->fr_literal + fixP->fx_where;
|
||||
fixP->fx_offset = 0;
|
||||
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_CR16_NUM8:
|
||||
bfd_put_8 (stdoutput, (unsigned char) val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM16:
|
||||
bfd_put_16 (stdoutput, val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM32:
|
||||
bfd_put_32 (stdoutput, val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM32a:
|
||||
bfd_put_32 (stdoutput, val, buf);
|
||||
break;
|
||||
default:
|
||||
/* We shouldn't ever get here because linkrelax is nonzero. */
|
||||
abort ();
|
||||
break;
|
||||
}
|
||||
|
||||
fixP->fx_done = 0;
|
||||
|
||||
if (fixP->fx_addsy == NULL
|
||||
&& fixP->fx_pcrel == 0)
|
||||
fixP->fx_done = 1;
|
||||
|
||||
if (fixP->fx_pcrel == 1
|
||||
else if (fixP->fx_pcrel == 1
|
||||
&& fixP->fx_addsy != NULL
|
||||
&& S_GET_SEGMENT (fixP->fx_addsy) == seg)
|
||||
fixP->fx_done = 1;
|
||||
else
|
||||
fixP->fx_done = 0;
|
||||
|
||||
if (fixP->fx_addsy != NULL && !fixP->fx_pcrel)
|
||||
{
|
||||
val = fixP->fx_offset;
|
||||
fixP->fx_done = 1;
|
||||
}
|
||||
|
||||
if (fixP->fx_done)
|
||||
{
|
||||
char *buf = fixP->fx_frag->fr_literal + fixP->fx_where;
|
||||
|
||||
fixP->fx_offset = 0;
|
||||
|
||||
switch (fixP->fx_r_type)
|
||||
{
|
||||
case BFD_RELOC_CR16_NUM8:
|
||||
bfd_put_8 (stdoutput, (unsigned char) val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM16:
|
||||
bfd_put_16 (stdoutput, val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM32:
|
||||
bfd_put_32 (stdoutput, val, buf);
|
||||
break;
|
||||
case BFD_RELOC_CR16_NUM32a:
|
||||
bfd_put_32 (stdoutput, val, buf);
|
||||
break;
|
||||
default:
|
||||
/* We shouldn't ever get here because linkrelax is nonzero. */
|
||||
abort ();
|
||||
break;
|
||||
}
|
||||
fixP->fx_done = 0;
|
||||
}
|
||||
else
|
||||
fixP->fx_offset = * valP;
|
||||
}
|
||||
|
||||
/* The location from which a PC relative jump should be calculated,
|
||||
|
Loading…
x
Reference in New Issue
Block a user