X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Felfxx-ia64.c;h=d662c7498cc0cf2bf507e10e0eec2eadad20927e;hb=78bc95e3ba62e558030ff978725cdbbb48564f96;hp=0c975c551c61ac18abd85055edea67d8f575144e;hpb=a30e5f5fca66d525fd44e6a4869b5569441bd464;p=binutils-gdb.git diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index 0c975c551c6..d662c7498cc 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -4188,8 +4188,6 @@ static bfd_vma elfNN_ia64_tprel_base (struct bfd_link_info *info) { asection *tls_sec = elf_hash_table (info)->tls_sec; - - BFD_ASSERT (tls_sec != NULL); return tls_sec->vma - align_power ((bfd_vma) ARCH_SIZE / 4, tls_sec->alignment_power); } @@ -4201,7 +4199,6 @@ elfNN_ia64_tprel_base (struct bfd_link_info *info) static bfd_vma elfNN_ia64_dtprel_base (struct bfd_link_info *info) { - BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); return elf_hash_table (info)->tls_sec->vma; } @@ -4894,24 +4891,11 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_SEGREL64MSB: case R_IA64_SEGREL64LSB: { - struct elf_segment_map *m; - Elf_Internal_Phdr *p; - /* Find the segment that contains the output_section. */ - for (m = elf_tdata (output_bfd)->segment_map, - p = elf_tdata (output_bfd)->phdr; - m != NULL; - m = m->next, p++) - { - int i; - for (i = m->count - 1; i >= 0; i--) - if (m->sections[i] == input_section->output_section) - break; - if (i >= 0) - break; - } + Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section + (output_bfd, input_section->output_section); - if (m == NULL) + if (p == NULL) { r = bfd_reloc_notsupported; } @@ -4984,6 +4968,8 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_TPREL14: case R_IA64_TPREL22: case R_IA64_TPREL64I: + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; value -= elfNN_ia64_tprel_base (info); r = elfNN_ia64_install_value (hit_addr, value, r_type); break; @@ -4995,6 +4981,8 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_DTPREL32MSB: case R_IA64_DTPREL64LSB: case R_IA64_DTPREL64MSB: + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; value -= elfNN_ia64_dtprel_base (info); r = elfNN_ia64_install_value (hit_addr, value, r_type); break; @@ -5013,6 +5001,8 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case R_IA64_LTOFF_TPREL22: if (!dynamic_symbol_p) { + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; if (!info->shared) value -= elfNN_ia64_tprel_base (info); else @@ -5030,7 +5020,11 @@ elfNN_ia64_relocate_section (bfd *output_bfd, break; case R_IA64_LTOFF_DTPREL22: if (!dynamic_symbol_p) - value -= elfNN_ia64_dtprel_base (info); + { + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; + value -= elfNN_ia64_dtprel_base (info); + } got_r_type = R_IA64_DTPRELNNLSB; break; } @@ -5081,6 +5075,7 @@ elfNN_ia64_relocate_section (bfd *output_bfd, case bfd_reloc_outofrange: case bfd_reloc_overflow: default: +missing_tls_sec: { const char *name; @@ -5092,6 +5087,25 @@ elfNN_ia64_relocate_section (bfd *output_bfd, switch (r_type) { + case R_IA64_TPREL14: + case R_IA64_TPREL22: + case R_IA64_TPREL64I: + case R_IA64_DTPREL14: + case R_IA64_DTPREL22: + case R_IA64_DTPREL64I: + case R_IA64_DTPREL32LSB: + case R_IA64_DTPREL32MSB: + case R_IA64_DTPREL64LSB: + case R_IA64_DTPREL64MSB: + case R_IA64_LTOFF_TPREL22: + case R_IA64_LTOFF_DTPMOD22: + case R_IA64_LTOFF_DTPREL22: + (*_bfd_error_handler) + (_("%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."), + input_bfd, input_section, howto->name, name, + rel->r_offset); + break; + case R_IA64_PCREL21B: case R_IA64_PCREL21BI: case R_IA64_PCREL21M: @@ -5715,8 +5729,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, #undef elf_backend_want_p_paddr_set_to_zero #define elf_backend_want_p_paddr_set_to_zero 1 -#undef ELF_MAXPAGESIZE -#define ELF_MAXPAGESIZE 0x1000 /* 4K */ #undef ELF_COMMONPAGESIZE #undef ELF_OSABI #define ELF_OSABI ELFOSABI_HPUX