[ARC] 24 bit reloc and overflow detection fix.

bfd/
2016-04-05  Cupertino Miranda  <cmiranda@synopsys.com>

	* elf32-arc.c (name_for_global_symbol): Changed assert.
	(get_replace_function): Created.:
	(struct arc_relocation_data): Changed to signed types.
	(defines S, L, P, PDATA): Casted to signed type.
	(defines SECTSTART, _SDA_BASE_, TLS_REL): Likewise.
	(PRINT_DEBUG_RELOC_INFO_BEFORE): Changed.
	(arc_do_relocation): Changed.

include/
2016-04-05  Cupertino Miranda  <cmiranda@synopsys.com>

	* opcode/arc-func.h (replace_bits24): Changed.
	(replace_bits24_be): Created.
This commit is contained in:
Claudiu Zissulescu 2016-04-05 17:05:09 +02:00
parent 589a7d8830
commit 094fb06395
4 changed files with 80 additions and 30 deletions

View file

@ -65,6 +65,21 @@ replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED)
#define REPLACE_bits24
ATTRIBUTE_UNUSED static unsigned
replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
insn = insn & ~0xffffff;
insn |= ((value >> 0) & 0xffffff) << 0;
return insn;
}
#endif /* REPLACE_bits24 */
/* Special 24 bit replace for big endian. */
/* mask = 111111111111111111111111. */
#ifndef REPLACE_bits24_be
#define REPLACE_bits24_be
ATTRIBUTE_UNUSED static unsigned
replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED)
{
insn = insn & ~0xffffff00;
insn |= ((value >> 0) & 0xffffff) << 8;
@ -72,7 +87,7 @@ replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
return insn;
}
#endif /* REPLACE_bits24 */
#endif /* REPLACE_bits24_be */
/* mask = 11111111111111111111111111111111. */
#ifndef REPLACE_word32