diff options
author | Paul Brook <paul@codesourcery.com> | 2011-04-07 11:38:43 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2011-04-07 11:38:43 +0000 |
commit | 44e87ecee162597b99f874005694649ae6111bc4 (patch) | |
tree | e66c3a4b71dadb66754f63b67a95dc46bc9fa2ac /bfd/elf32-tic6x.c | |
parent | bd18283a08463e34d632cb27a21c2962eecf65cd (diff) | |
download | gdb-44e87ecee162597b99f874005694649ae6111bc4.zip gdb-44e87ecee162597b99f874005694649ae6111bc4.tar.gz gdb-44e87ecee162597b99f874005694649ae6111bc4.tar.bz2 |
2011-04-07 Paul Brook <paul@codesourcery.com>
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.
Diffstat (limited to 'bfd/elf32-tic6x.c')
-rw-r--r-- | bfd/elf32-tic6x.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index 4836d88..b0474a6 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 |