summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/bfd-in2.h1
-rw-r--r--bfd/elf32-rx.c1
-rw-r--r--bfd/libbfd.h1
-rw-r--r--bfd/reloc.c2
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-rx.c18
7 files changed, 35 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 0369051236..eb99588945 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2011-01-05 DJ Delorie <dj@redhat.com>
+
+ * 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 <hongjiu.lu@intel.com>
* cpu-i386.c (bfd_i386_compatible): New.
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index e75eb0d409..8531f8de52 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 ac587efcaa..7855d5ed14 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 5687082c46..1cf63ceec4 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 6d4eb85232..30919f2662 100644
--- a/bfd/reloc.c
+++ b/bfd/reloc.c
@@ -4258,6 +4258,8 @@ ENUMX
ENUMX
BFD_RELOC_RX_OP_SUBTRACT
ENUMX
+ BFD_RELOC_RX_OP_NEG
+ENUMX
BFD_RELOC_RX_ABS8
ENUMX
BFD_RELOC_RX_ABS16
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 0097e8fdb7..257c83089d 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2011-01-05 DJ Delorie <dj@redhat.com>
+
+ * config/tc-rx.c (tc_gen_reloc): Emit an RX_OP_NEG expression
+ instead of an RH_NEG32 one.
+
2011-01-05 Jonathan Wakely <jwakely.gcc@gmail.com>
* doc/c-i386.texi: Clarify --n32.
diff --git a/gas/config/tc-rx.c b/gas/config/tc-rx.c
index aa582869d5..d198050982 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;