diff options
Diffstat (limited to 'bfd/elf64-s390.c')
-rw-r--r-- | bfd/elf64-s390.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index f85f8cd..73d0331 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -863,7 +863,7 @@ elf_s390_check_relocs (bfd *abfd, for (rel = relocs; rel < rel_end; rel++) { unsigned int r_type; - unsigned long r_symndx; + unsigned int r_symndx; struct elf_link_hash_entry *h; Elf_Internal_Sym *isym; @@ -2254,10 +2254,10 @@ invalid_tls_insn (bfd *input_bfd, howto = elf_howto_table + ELF64_R_TYPE (rel->r_info); _bfd_error_handler /* xgettext:c-format */ - (_("%B(%A+0x%lx): invalid instruction for TLS relocation %s"), + (_("%B(%A+%#Lx): invalid instruction for TLS relocation %s"), input_bfd, input_section, - (long) rel->r_offset, + rel->r_offset, howto->name); bfd_set_error (bfd_error_bad_value); } @@ -3293,10 +3293,10 @@ elf_s390_relocate_section (bfd *output_bfd, rel->r_offset) != (bfd_vma) -1) _bfd_error_handler /* xgettext:c-format */ - (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"), + (_("%B(%A+%#Lx): unresolvable %s relocation against symbol `%s'"), input_bfd, input_section, - (long) rel->r_offset, + rel->r_offset, howto->name, h->root.root.string); @@ -3350,9 +3350,9 @@ elf_s390_relocate_section (bfd *output_bfd, { _bfd_error_handler /* xgettext:c-format */ - (_("%B(%A+0x%lx): reloc against `%s': error %d"), + (_("%B(%A+%#Lx): reloc against `%s': error %d"), input_bfd, input_section, - (long) rel->r_offset, name, (int) r); + rel->r_offset, name, (int) r); return FALSE; } } @@ -3745,7 +3745,9 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTRELSZ: - dyn.d_un.d_val = htab->elf.srelplt->size + htab->elf.irelplt->size; + dyn.d_un.d_val = htab->elf.srelplt->size; + if (htab->elf.irelplt) + dyn.d_un.d_val += htab->elf.irelplt->size; break; case DT_RELASZ: @@ -3756,7 +3758,9 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, linker script arranges for .rela.plt to follow all other relocation sections, we don't have to worry about changing the DT_RELA entry. */ - dyn.d_un.d_val -= htab->elf.srelplt->size + htab->elf.irelplt->size; + dyn.d_un.d_val -= htab->elf.srelplt->size; + if (htab->elf.irelplt) + dyn.d_un.d_val -= htab->elf.irelplt->size; break; } @@ -3810,6 +3814,9 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, symtab_hdr = &elf_symtab_hdr (ibfd); + if (!is_s390_elf (ibfd)) + continue; + local_plt = elf_s390_local_plt (ibfd); if (local_plt != NULL) for (i = 0; i < symtab_hdr->sh_info; i++) |