2011-04-07 Paul Brook <paul@codesourcery.com>
authorPaul Brook <paul@codesourcery.com>
Thu, 7 Apr 2011 11:38:43 +0000 (11:38 +0000)
committerPaul Brook <paul@codesourcery.com>
Thu, 7 Apr 2011 11:38:43 +0000 (11:38 +0000)
bfd/
* elf32-tic6x.c (elf32_tic6x_howto_table): R_C6000_PREL31 is
pc-relative.
(elf32_tic6x_howto_table_rel): Ditto.
(elf32_tic6x_relocate_section): Implement R_C6000_PREL31.
(elf32_tic6x_check_relocs): Ditto.

bfd/ChangeLog
bfd/elf32-tic6x.c

index 785f90faa8a0f3aa12e1146db6a76b418c716be0..2237656f29dd0d572bed572bc29455236b7a52de 100644 (file)
@@ -1,3 +1,11 @@
+2011-04-07  Paul Brook  <paul@codesourcery.com>
+       * elf32-tic6x.c (elf32_tic6x_howto_table): R_C6000_PREL31 is
+       pc-relative.
+       (elf32_tic6x_howto_table_rel): Ditto.
+       (elf32_tic6x_relocate_section): Implement R_C6000_PREL31.
+       (elf32_tic6x_check_relocs): Ditto.
+
 2011-04-06  Joseph Myers  <joseph@codesourcery.com>
 
        * config.bfd (thumb-*-oabi): Don't handle in list of obsolete
index 4836d883b8b5ec79f12a745a296320d7a56e9205..b0474a6240f7b6bda26d8b8e01dc4da858cc76b8 100644 (file)
@@ -433,7 +433,7 @@ static reloc_howto_type elf32_tic6x_howto_table[] =
         1,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         31,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        TRUE,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont,/* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
@@ -441,7 +441,7 @@ static reloc_howto_type elf32_tic6x_howto_table[] =
         FALSE,                 /* partial_inplace */
         0,                     /* src_mask */
         0x7fffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
   HOWTO (R_C6000_COPY,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
@@ -1005,7 +1005,7 @@ static reloc_howto_type elf32_tic6x_howto_table_rel[] =
         1,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
         31,                    /* bitsize */
-        FALSE,                 /* pc_relative */
+        TRUE,                  /* pc_relative */
         0,                     /* bitpos */
         complain_overflow_dont,/* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
@@ -1013,7 +1013,7 @@ static reloc_howto_type elf32_tic6x_howto_table_rel[] =
         TRUE,                  /* partial_inplace */
         0,                     /* src_mask */
         0x7fffffff,            /* dst_mask */
-        FALSE),                /* pcrel_offset */
+        TRUE),                 /* pcrel_offset */
   HOWTO (R_C6000_COPY,         /* type */
         0,                     /* rightshift */
         2,                     /* size (0 = byte, 1 = short, 2 = long) */
@@ -2440,12 +2440,15 @@ elf32_tic6x_relocate_section (bfd *output_bfd,
          break;
 
        case R_C6000_PREL31:
-         /* Shared libraries and exception handling support not
-            implemented.  */
-         (*_bfd_error_handler) (_("%B: relocation type %d not implemented"),
-                                input_bfd, r_type);
-         ok = FALSE;
-         continue;
+         if (h != NULL
+             && h->plt.offset != (bfd_vma) -1
+             && htab->elf.splt != NULL)
+           {
+             relocation = (htab->elf.splt->output_section->vma
+                           + htab->elf.splt->output_offset
+                           + h->plt.offset);
+           }
+         break;
 
        case R_C6000_COPY:
          /* Invalid in relocatable object.  */
@@ -2623,6 +2626,7 @@ elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
       switch (r_type)
        {
        case R_C6000_PCR_S21:
+       case R_C6000_PREL31:
          /* This symbol requires a procedure linkage table entry.  We
             actually build the entry in adjust_dynamic_symbol,
             because this might be a case of linking PIC code which is