From 44e87ecee162597b99f874005694649ae6111bc4 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Thu, 7 Apr 2011 11:38:43 +0000 Subject: [PATCH] 2011-04-07 Paul Brook 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 | 8 ++++++++ bfd/elf32-tic6x.c | 24 ++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 785f90faa8a..2237656f29d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2011-04-07 Paul Brook + + * 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 * config.bfd (thumb-*-oabi): Don't handle in list of obsolete diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index 4836d883b8b..b0474a6240f 100644 --- a/bfd/elf32-tic6x.c +++ b/bfd/elf32-tic6x.c @@ -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 -- 2.30.2