* elf64-mips.c (elf_mips_gnu_rel16_s2): Add internally used
authorThiemo Seufer <ths@networkno.de>
Thu, 22 May 2003 09:27:52 +0000 (09:27 +0000)
committerThiemo Seufer <ths@networkno.de>
Thu, 22 May 2003 09:27:52 +0000 (09:27 +0000)
R_MIPS_GNU_REL16_S2 support.
(bfd_elf64_bfd_reloc_type_lookup): Use it.
(mips_elf64_rtype_to_howto): Use it.
* elfn32-mips.c (elf_mips_gnu_rel16_s2): Add internally used
R_MIPS_GNU_REL16_S2 support.
(bfd_elf32_bfd_reloc_type_lookup): Use it.
(mips_elf_n32_rtype_to_howto): Use it.

bfd/ChangeLog
bfd/elf64-mips.c
bfd/elfn32-mips.c

index a24d725816b42931ce679d9f82a09c7bb7a3c6b2..14f90db7c0fb832acdd3b76401cb5e5bf22be457 100644 (file)
@@ -1,3 +1,14 @@
+2003-05-22  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
+
+       * elf64-mips.c (elf_mips_gnu_rel16_s2): Add internally used
+       R_MIPS_GNU_REL16_S2 support.
+       (bfd_elf64_bfd_reloc_type_lookup): Use it.
+       (mips_elf64_rtype_to_howto): Use it.
+       * elfn32-mips.c (elf_mips_gnu_rel16_s2): Add internally used
+       R_MIPS_GNU_REL16_S2 support.
+       (bfd_elf32_bfd_reloc_type_lookup): Use it.
+       (mips_elf_n32_rtype_to_howto): Use it.
+
 2003-05-21  Stuart F. Downing  <sdowning@fame.com>
 
        * som.h: Define PA_2_0 before including a.out.h
index 6e7321cacc6076327417c0971182ca786af8f081..a43b3da9f706daf88903e9a3b656a748ddb95422 100644 (file)
@@ -1227,6 +1227,38 @@ static reloc_howto_type elf_mips_gnu_vtentry_howto =
         0,                     /* dst_mask */
         FALSE);                /* pcrel_offset */
 \f
+/* 16 bit offset for pc-relative branches.  */
+static reloc_howto_type elf_mips_gnu_rel16_s2 =
+  HOWTO (R_MIPS_GNU_REL16_S2,  /* type */
+        2,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MIPS_GNU_REL16_S2", /* name */
+        TRUE,                  /* partial_inplace */
+        0x0000ffff,            /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        TRUE);                 /* pcrel_offset */
+
+/* 16 bit offset for pc-relative branches.  */
+static reloc_howto_type elf_mips_gnu_rela16_s2 =
+  HOWTO (R_MIPS_GNU_REL16_S2,  /* type */
+        2,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_MIPS_GNU_REL16_S2", /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        TRUE);                 /* pcrel_offset */
+\f
 /* Swap in a MIPS 64-bit Rel reloc.  */
 
 static void
@@ -1960,6 +1992,8 @@ bfd_elf64_bfd_reloc_type_lookup (abfd, code)
       return &elf_mips_gnu_vtinherit_howto;
     case BFD_RELOC_VTABLE_ENTRY:
       return &elf_mips_gnu_vtentry_howto;
+    case BFD_RELOC_16_PCREL_S2:
+      return &elf_mips_gnu_rela16_s2;
     default:
       bfd_set_error (bfd_error_bad_value);
       return NULL;
@@ -1983,6 +2017,11 @@ mips_elf64_rtype_to_howto (r_type, rela_p)
       return &elf_mips_gnu_vtinherit_howto;
     case R_MIPS_GNU_VTENTRY:
       return &elf_mips_gnu_vtentry_howto;
+    case R_MIPS_GNU_REL16_S2:
+      if (rela_p)
+       return &elf_mips_gnu_rela16_s2;
+      else
+       return &elf_mips_gnu_rel16_s2;
     default:
       BFD_ASSERT (r_type < (unsigned int) R_MIPS_max);
       if (rela_p)
index ab255fa697472f150e2065c695c412fd8e855571..2e499488821e8b5e35c80ca93f4edbcb1eb63bd3 100644 (file)
@@ -1199,6 +1199,38 @@ static reloc_howto_type elf_mips_gnu_vtentry_howto =
         0,                     /* dst_mask */
         FALSE);                /* pcrel_offset */
 \f
+/* 16 bit offset for pc-relative branches.  */
+static reloc_howto_type elf_mips_gnu_rel16_s2 =
+  HOWTO (R_MIPS_GNU_REL16_S2,  /* type */
+        2,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        mips_elf_generic_reloc, /* special_function */
+        "R_MIPS_GNU_REL16_S2", /* name */
+        TRUE,                  /* partial_inplace */
+        0x0000ffff,            /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        TRUE);                 /* pcrel_offset */
+
+/* 16 bit offset for pc-relative branches.  */
+static reloc_howto_type elf_mips_gnu_rela16_s2 =
+  HOWTO (R_MIPS_GNU_REL16_S2,  /* type */
+        2,                     /* rightshift */
+        2,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        TRUE,                  /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_signed, /* complain_on_overflow */
+        mips_elf_generic_reloc, /* special_function */
+        "R_MIPS_GNU_REL16_S2", /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        TRUE);                 /* pcrel_offset */
+\f
 /* This is derived from bfd_elf_generic_reloc.  NewABI allows us to have
    several relocations against the same address.  The addend is derived
    from the addends of preceding relocations.  If we don't need to
@@ -1897,6 +1929,8 @@ bfd_elf32_bfd_reloc_type_lookup (abfd, code)
       return &elf_mips_gnu_vtinherit_howto;
     case BFD_RELOC_VTABLE_ENTRY:
       return &elf_mips_gnu_vtentry_howto;
+    case BFD_RELOC_16_PCREL_S2:
+      return &elf_mips_gnu_rela16_s2;
     default:
       bfd_set_error (bfd_error_bad_value);
       return NULL;
@@ -1920,6 +1954,11 @@ mips_elf_n32_rtype_to_howto (r_type, rela_p)
       return &elf_mips_gnu_vtinherit_howto;
     case R_MIPS_GNU_VTENTRY:
       return &elf_mips_gnu_vtentry_howto;
+    case R_MIPS_GNU_REL16_S2:
+      if (rela_p)
+       return &elf_mips_gnu_rela16_s2;
+      else
+       return &elf_mips_gnu_rel16_s2;
     default:
       BFD_ASSERT (r_type < (unsigned int) R_MIPS_max);
       if (rela_p)