Fixes to legacy ARC relocations.
authorCupertino Miranda <cmiranda@synopsys.com>
Tue, 7 Jun 2016 08:24:37 +0000 (10:24 +0200)
committerCupertino Miranda <cmiranda@synopsys.com>
Fri, 26 Aug 2016 10:09:17 +0000 (12:09 +0200)
Added support for ARC_SDA_12 reloc.
Fixed ARC_N32_ME.
Added ME (middle-endian) to ARC_SDA_12 reloc.

bfd/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>
* reloc.c: Fixed type in ARC_SECTOFF relocations. Added ARC_SDA_12
relocation.
* bfd-in2.h: Regenerated from the previous changes.
* libbfd.h: Regenerated from the previous changes.

include/ChangeLog:

Cupertino Miranda  <cmiranda@synopsys.com>
* elf/arc-reloc.def: Fixed relocation formula for N*, SDA, SDA_12,
SDA_16_LD*, S13_PCREL, N32_ME, SECTOFF_* relocations.
* opcode/arc-func.h (replace_disp12s): Added. Used for SDA_12 relocation.

bfd/ChangeLog
bfd/bfd-in2.h
bfd/libbfd.h
bfd/reloc.c
include/ChangeLog
include/elf/arc-reloc.def
include/opcode/arc-func.h

index 5cb2fc1..b7206ae 100644 (file)
@@ -1,3 +1,10 @@
+2016-08-26  Cupertino Miranda  <cmiranda@synopsys.com>
+
+       * reloc.c: Fixed type in ARC_SECTOFF relocations. Added ARC_SDA_12
+       relocation.
+       * bfd-in2.h: Regenerated from the previous changes.
+       * libbfd.h: Regenerated from the previous changes.
+
 2016-08-26  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add a new parameter for
index ffa6c57..3e74662 100644 (file)
@@ -3713,13 +3713,14 @@ pc-relative or some form of GOT-indirect relocation.  */
   BFD_RELOC_AC_SECTOFF_U8,
   BFD_RELOC_AC_SECTOFF_U8_1,
   BFD_RELOC_AC_SECTOFF_U8_2,
-  BFD_RELOC_AC_SECTFOFF_S9,
-  BFD_RELOC_AC_SECTFOFF_S9_1,
-  BFD_RELOC_AC_SECTFOFF_S9_2,
+  BFD_RELOC_AC_SECTOFF_S9,
+  BFD_RELOC_AC_SECTOFF_S9_1,
+  BFD_RELOC_AC_SECTOFF_S9_2,
   BFD_RELOC_ARC_SECTOFF_ME_1,
   BFD_RELOC_ARC_SECTOFF_ME_2,
   BFD_RELOC_ARC_SECTOFF_1,
   BFD_RELOC_ARC_SECTOFF_2,
+  BFD_RELOC_ARC_SDA_12,
   BFD_RELOC_ARC_SDA16_ST2,
   BFD_RELOC_ARC_32_PCREL,
   BFD_RELOC_ARC_PC32,
index 9d751ee..1eb988f 100644 (file)
@@ -1722,13 +1722,14 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
   "BFD_RELOC_AC_SECTOFF_U8",
   "BFD_RELOC_AC_SECTOFF_U8_1",
   "BFD_RELOC_AC_SECTOFF_U8_2",
-  "BFD_RELOC_AC_SECTFOFF_S9",
-  "BFD_RELOC_AC_SECTFOFF_S9_1",
-  "BFD_RELOC_AC_SECTFOFF_S9_2",
+  "BFD_RELOC_AC_SECTOFF_S9",
+  "BFD_RELOC_AC_SECTOFF_S9_1",
+  "BFD_RELOC_AC_SECTOFF_S9_2",
   "BFD_RELOC_ARC_SECTOFF_ME_1",
   "BFD_RELOC_ARC_SECTOFF_ME_2",
   "BFD_RELOC_ARC_SECTOFF_1",
   "BFD_RELOC_ARC_SECTOFF_2",
+  "BFD_RELOC_ARC_SDA_12",
   "BFD_RELOC_ARC_SDA16_ST2",
   "BFD_RELOC_ARC_32_PCREL",
   "BFD_RELOC_ARC_PC32",
index 0e5fde2..a2bfe2b 100644 (file)
@@ -3613,11 +3613,11 @@ ENUMX
 ENUMX
   BFD_RELOC_AC_SECTOFF_U8_2
 ENUMX
-  BFD_RELOC_AC_SECTFOFF_S9
+  BFD_RELOC_AC_SECTOFF_S9
 ENUMX
-  BFD_RELOC_AC_SECTFOFF_S9_1
+  BFD_RELOC_AC_SECTOFF_S9_1
 ENUMX
-  BFD_RELOC_AC_SECTFOFF_S9_2
+  BFD_RELOC_AC_SECTOFF_S9_2
 ENUMX
   BFD_RELOC_ARC_SECTOFF_ME_1
 ENUMX
@@ -3627,6 +3627,8 @@ ENUMX
 ENUMX
   BFD_RELOC_ARC_SECTOFF_2
 ENUMX
+  BFD_RELOC_ARC_SDA_12
+ENUMX
   BFD_RELOC_ARC_SDA16_ST2
 ENUMX
   BFD_RELOC_ARC_32_PCREL
index 4d51d0b..72d915e 100644 (file)
@@ -1,3 +1,9 @@
+2016-08-26  Cupertino Miranda  <cmiranda@synopsys.com>
+       * elf/arc-reloc.def: Fixed relocation formula for N*, SDA, SDA_12,
+       SDA_16_LD*, S13_PCREL, N32_ME, SECTOFF_* relocations.
+       * opcode/arc-func.h (replace_disp12s): Added. Used for SDA_12
+       relocation.
+
 2016-08-04  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * arm.h (ARM_GET_SYM_CMSE_SPCL): Define macro.
index 17c2429..2d11b3f 100644 (file)
@@ -69,35 +69,35 @@ ARC_RELOC_HOWTO(ARC_N8, 8, \
                 8, \
                 replace_bits8, \
                 bitfield, \
-                ( S - A ))
+                ( A - S ))
 
 ARC_RELOC_HOWTO(ARC_N16, 9, \
                 1, \
                 16, \
                 replace_bits16, \
                 bitfield, \
-                ( S - A ))
+                ( A - S ))
 
 ARC_RELOC_HOWTO(ARC_N24, 10, \
                 2, \
                 24, \
                 replace_bits24, \
                 bitfield, \
-                ( S - A ))
+                ( A - S ))
 
 ARC_RELOC_HOWTO(ARC_N32, 11, \
                 2, \
                 32, \
                 replace_word32, \
                 bitfield, \
-                ( S - A ))
+                ( A - S ))
 
 ARC_RELOC_HOWTO(ARC_SDA, 12, \
                 2, \
                 9, \
                 replace_disp9, \
                 bitfield, \
-                ( S + A ))
+                ( ME ( ( ( S + A ) - _SDA_BASE_ ) ) ))
 
 ARC_RELOC_HOWTO(ARC_SECTOFF, 13, \
                 2, \
@@ -167,28 +167,28 @@ ARC_RELOC_HOWTO(ARC_SDA16_LD, 22, \
                 9, \
                 replace_disp9s, \
                 signed, \
-                ( ( ( S + A ) - _SDA_BASE_ ) ))
+                ( ( S + A ) - _SDA_BASE_ ))
 
 ARC_RELOC_HOWTO(ARC_SDA16_LD1, 23, \
                 1, \
                 9, \
                 replace_disp9s, \
                 signed, \
-                ( ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ) ))
+                ( ( ( S + A ) - _SDA_BASE_ ) >> 1 ))
 
 ARC_RELOC_HOWTO(ARC_SDA16_LD2, 24, \
                 1, \
                 9, \
                 replace_disp9s, \
                 signed, \
-                ( ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ) ))
+                ( ( ( S + A ) - _SDA_BASE_ ) >> 2 ))
 
 ARC_RELOC_HOWTO(ARC_S13_PCREL, 25, \
                 1, \
                 11, \
                 replace_disp13s, \
                 signed, \
-                ( ( ( ( S + A ) - P ) >> 2 ) ))
+                ( ( ( S + A ) - P ) >> 2 ))
 
 ARC_RELOC_HOWTO(ARC_W, 26, \
                 2, \
@@ -216,7 +216,7 @@ ARC_RELOC_HOWTO(ARC_N32_ME, 28, \
                 32, \
                 replace_word32, \
                 bitfield, \
-                ( ME ( ( S - A ) ) ))
+                ( ME ( ( A - S ) ) ))
 
 ARC_RELOC_HOWTO(ARC_SECTOFF_ME, 29, \
                 2, \
@@ -244,42 +244,42 @@ ARC_RELOC_HOWTO(AC_SECTOFF_U8, 35, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( S + A ) - SECTSTART ))
+                ( ME ( ( ( S + A ) - SECTSTART ) ) ))
 
 ARC_RELOC_HOWTO(AC_SECTOFF_U8_1, 36, \
                 2, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( ( S + A ) - SECTSTART ) >> 1 ))
+                ( ME ( ( ( ( S + A ) - SECTSTART ) >> 1 ) ) ))
 
 ARC_RELOC_HOWTO(AC_SECTOFF_U8_2, 37, \
                 2, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( ( S + A ) - SECTSTART ) >> 2 ))
+                ( ME ( ( ( ( S + A ) - SECTSTART ) >> 2 ) ) ))
 
-ARC_RELOC_HOWTO(AC_SECTFOFF_S9, 38, \
+ARC_RELOC_HOWTO(AC_SECTOFF_S9, 38, \
                 2, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( S + A ) - SECTSTART ))
+                ( ME ( ( ( ( S + A ) - SECTSTART ) - 256 ) ) ))
 
-ARC_RELOC_HOWTO(AC_SECTFOFF_S9_1, 39, \
+ARC_RELOC_HOWTO(AC_SECTOFF_S9_1, 39, \
                 2, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( ( S + A ) - SECTSTART ) >> 1 ))
+                ( ME ( ( ( ( ( S + A ) - SECTSTART ) - 256 ) >> 1 ) ) ))
 
-ARC_RELOC_HOWTO(AC_SECTFOFF_S9_2, 40, \
+ARC_RELOC_HOWTO(AC_SECTOFF_S9_2, 40, \
                 2, \
                 9, \
                 replace_disp9ls, \
                 bitfield, \
-                ( ( ( S + A ) - SECTSTART ) >> 2 ))
+                ( ME ( ( ( ( ( S + A ) - SECTSTART ) - 256 ) >> 2 ) ) ))
 
 ARC_RELOC_HOWTO(ARC_SECTOFF_ME_1, 41, \
                 2, \
@@ -309,6 +309,13 @@ ARC_RELOC_HOWTO(ARC_SECTOFF_2, 44, \
                 bitfield, \
                 ( ( ( S - SECTSTART ) + A ) >> 2 ))
 
+ARC_RELOC_HOWTO(ARC_SDA_12, 45, \
+                2, \
+                12, \
+                replace_disp12s, \
+                signed, \
+                ( ME ( ( ( S + A ) - _SDA_BASE_ ) ) ))
+
 ARC_RELOC_HOWTO(ARC_SDA16_ST2, 48, \
                 1, \
                 9, \
index cafb92f..c92382b 100644 (file)
@@ -264,3 +264,18 @@ replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED)
 }
 
 #endif /* REPLACE_disp9s1 */
+
+/* mask  = 00000000000000000000111111222222.  */
+#ifndef REPLACE_disp12s
+#define REPLACE_disp12s
+ATTRIBUTE_UNUSED static unsigned
+replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
+{
+  insn = insn & ~0xfff;
+  insn |= ((value >> 0) & 0x003f) << 6;
+  insn |= ((value >> 6) & 0x003f) << 0;
+
+  return insn;
+}
+
+#endif /* REPLACE_disp12s */