From 9689e3a3a7895308b7b2eac3fa6e4d560cf4b8c7 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 5 Jan 2011 22:04:09 +0000 Subject: [PATCH] * reloc.c: Add BFD_RELOC_RX_OP_NEG. * libbfd.h: Regenerate. * bfd-in2.h: Regenerate. * elf32-rx.c: Add it to the list, corresponding to R_RX_OPneg. * config/tc-rx.c (tc_gen_reloc): Emit an RX_OP_NEG expression instead of an RH_NEG32 one. --- bfd/ChangeLog | 7 +++++++ bfd/bfd-in2.h | 1 + bfd/elf32-rx.c | 1 + bfd/libbfd.h | 1 + bfd/reloc.c | 2 ++ gas/ChangeLog | 5 +++++ gas/config/tc-rx.c | 18 ++++++++++++++++++ 7 files changed, 35 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0369051236b..eb995889455 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2011-01-05 DJ Delorie + + * reloc.c: Add BFD_RELOC_RX_OP_NEG. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + * elf32-rx.c: Add it to the list, corresponding to R_RX_OPneg. + 2011-01-03 H.J. Lu * cpu-i386.c (bfd_i386_compatible): New. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index e75eb0d409e..8531f8de529 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -3991,6 +3991,7 @@ instructions */ BFD_RELOC_RX_GPRELL, BFD_RELOC_RX_SYM, BFD_RELOC_RX_OP_SUBTRACT, + BFD_RELOC_RX_OP_NEG, BFD_RELOC_RX_ABS8, BFD_RELOC_RX_ABS16, BFD_RELOC_RX_ABS16_REV, diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c index ac587efcaa4..7855d5ed149 100644 --- a/bfd/elf32-rx.c +++ b/bfd/elf32-rx.c @@ -248,6 +248,7 @@ static const struct rx_reloc_map rx_reloc_map [] = { BFD_RELOC_RX_RELAX, R_RX_RH_RELAX }, { BFD_RELOC_RX_SYM, R_RX_SYM }, { BFD_RELOC_RX_OP_SUBTRACT, R_RX_OPsub }, + { BFD_RELOC_RX_OP_NEG, R_RX_OPneg }, { BFD_RELOC_RX_ABS8, R_RX_ABS8 }, { BFD_RELOC_RX_ABS16, R_RX_ABS16 }, { BFD_RELOC_RX_ABS16_REV, R_RX_ABS16_REV }, diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 5687082c468..1cf63ceec4d 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1800,6 +1800,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_RX_GPRELL", "BFD_RELOC_RX_SYM", "BFD_RELOC_RX_OP_SUBTRACT", + "BFD_RELOC_RX_OP_NEG", "BFD_RELOC_RX_ABS8", "BFD_RELOC_RX_ABS16", "BFD_RELOC_RX_ABS16_REV", diff --git a/bfd/reloc.c b/bfd/reloc.c index 6d4eb85232b..30919f2662c 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -4257,6 +4257,8 @@ ENUMX BFD_RELOC_RX_SYM ENUMX BFD_RELOC_RX_OP_SUBTRACT +ENUMX + BFD_RELOC_RX_OP_NEG ENUMX BFD_RELOC_RX_ABS8 ENUMX diff --git a/gas/ChangeLog b/gas/ChangeLog index 0097e8fdb7e..257c83089d3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2011-01-05 DJ Delorie + + * config/tc-rx.c (tc_gen_reloc): Emit an RX_OP_NEG expression + instead of an RH_NEG32 one. + 2011-01-05 Jonathan Wakely * doc/c-i386.texi: Clarify --n32. diff --git a/gas/config/tc-rx.c b/gas/config/tc-rx.c index aa582869d58..d1980509823 100644 --- a/gas/config/tc-rx.c +++ b/gas/config/tc-rx.c @@ -2405,6 +2405,24 @@ tc_gen_reloc (asection * seg ATTRIBUTE_UNUSED, fixS * fixp) reloc[4] = NULL; break; + case BFD_RELOC_RX_NEG32: + reloc[0]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_RX_SYM); + + reloc[1] = (arelent *) xmalloc (sizeof (arelent)); + reloc[1]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_RX_OP_NEG); + reloc[1]->addend = 0; + reloc[1]->sym_ptr_ptr = reloc[0]->sym_ptr_ptr; + reloc[1]->address = fixp->fx_frag->fr_address + fixp->fx_where; + + reloc[2] = (arelent *) xmalloc (sizeof (arelent)); + reloc[2]->howto = bfd_reloc_type_lookup (stdoutput, BFD_RELOC_RX_ABS32); + reloc[2]->addend = 0; + reloc[2]->sym_ptr_ptr = reloc[0]->sym_ptr_ptr; + reloc[2]->address = fixp->fx_frag->fr_address + fixp->fx_where; + + reloc[3] = NULL; + break; + default: reloc[0]->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); reloc[1] = NULL; -- 2.30.2