PR ld/1540
[deliverable/binutils-gdb.git] / bfd / elf32-m32c.c
index 3f9bb4e06cec1c055dd577e9f78874dbb1e6d3da..35136af820faa7121bbc41c125f2abbab30f2609 100644 (file)
@@ -132,6 +132,62 @@ static reloc_howto_type m32c_elf_howto_table [] =
         0,                     /* src_mask */
         0,                     /* dst_mask */
         TRUE),                 /* pcrel_offset */
+
+  HOWTO (R_M32C_8,             /* type */
+        0,                     /* rightshift */
+        0,                     /* size (0 = byte, 1 = short, 2 = long) */
+        8,                     /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_unsigned, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_M32C_8",            /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x000000ff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  HOWTO (R_M32C_LO16,          /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_M32C_LO16",         /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  HOWTO (R_M32C_HI8,           /* type */
+        0,                     /* rightshift */
+        0,                     /* size (0 = byte, 1 = short, 2 = long) */
+        8,                     /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_M32C_HI8",          /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x000000ff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
+
+  HOWTO (R_M32C_HI16,          /* type */
+        0,                     /* rightshift */
+        1,                     /* size (0 = byte, 1 = short, 2 = long) */
+        16,                    /* bitsize */
+        FALSE,                 /* pc_relative */
+        0,                     /* bitpos */
+        complain_overflow_dont, /* complain_on_overflow */
+        bfd_elf_generic_reloc, /* special_function */
+        "R_M32C_HI16",         /* name */
+        FALSE,                 /* partial_inplace */
+        0,                     /* src_mask */
+        0x0000ffff,            /* dst_mask */
+        FALSE),                /* pcrel_offset */
 };
 \f
 /* Map BFD reloc types to M32C ELF reloc types.  */
@@ -149,7 +205,11 @@ static const struct m32c_reloc_map m32c_reloc_map [] =
   { BFD_RELOC_24,               R_M32C_24 },
   { BFD_RELOC_32,              R_M32C_32 },
   { BFD_RELOC_8_PCREL,          R_M32C_8_PCREL },
-  { BFD_RELOC_16_PCREL,         R_M32C_16_PCREL }
+  { BFD_RELOC_16_PCREL,         R_M32C_16_PCREL },
+  { BFD_RELOC_8,               R_M32C_8 },
+  { BFD_RELOC_LO16,            R_M32C_LO16 },
+  { BFD_RELOC_HI16,            R_M32C_HI16 },
+  { BFD_RELOC_M32C_HI8,                R_M32C_HI8 }
 };
 
 static reloc_howto_type *
@@ -372,6 +432,11 @@ m32c_elf_relocate_section
              }
          }
          break;
+
+       case R_M32C_HI8:
+       case R_M32C_HI16:
+         relocation >>= 16;
+         break;
        }
 
       r = _bfd_final_link_relocate (howto, input_bfd, input_section,
This page took 0.02705 seconds and 4 git commands to generate.