X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=bfd%2Felf64-hppa.c;h=e3de2a6c60c8a98ebc1ffdf49884dd19865c50da;hb=545fd46b6bb24535905e4bc69b91537fee065bf3;hp=9ccb518dbb7e003aa7661e7d85a56c856f20e723;hpb=c7e2358a8849d7540212543e1a2acbac648cb973;p=binutils-gdb.git diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 9ccb518dbb7..e3de2a6c60c 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -1,6 +1,7 @@ /* Support for HPPA 64-bit ELF 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, - 2010 Free Software Foundation, Inc. + 2010, 2011, 2012 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -329,9 +330,9 @@ elf64_hppa_object_p (bfd *abfd) i_ehdrp = elf_elfheader (abfd); if (strcmp (bfd_get_target (abfd), "elf64-hppa-linux") == 0) { - /* GCC on hppa-linux produces binaries with OSABI=Linux, + /* GCC on hppa-linux produces binaries with OSABI=GNU, but the kernel produces corefiles with OSABI=SysV. */ - if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_LINUX + if (i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_GNU && i_ehdrp->e_ident[EI_OSABI] != ELFOSABI_NONE) /* aka SYSV */ return FALSE; } @@ -407,17 +408,10 @@ get_reloc_section (bfd *abfd, srel_name = (bfd_elf_string_from_elf_section (abfd, elf_elfheader(abfd)->e_shstrndx, - elf_section_data(sec)->rel_hdr.sh_name)); + _bfd_elf_single_rel_hdr(sec)->sh_name)); if (srel_name == NULL) return FALSE; - BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - srel_name + 5) == 0) - || (CONST_STRNEQ (srel_name, ".rel") - && strcmp (bfd_get_section_name (abfd, sec), - srel_name + 4) == 0)); - dynobj = hppa_info->root.dynobj; if (!dynobj) hppa_info->root.dynobj = dynobj = abfd; @@ -944,9 +938,6 @@ elf64_hppa_mark_exported_functions (struct elf_link_hash_entry *eh, void *data) if (hppa_info == NULL) return FALSE; - if (eh->root.type == bfd_link_hash_warning) - eh = (struct elf_link_hash_entry *) eh->root.u.i.link; - if (eh && (eh->root.type == bfd_link_hash_defined || eh->root.type == bfd_link_hash_defweak) @@ -1063,10 +1054,6 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) if (hh && hh->want_opd) { - while (hh->eh.root.type == bfd_link_hash_indirect - || hh->eh.root.type == bfd_link_hash_warning) - hh = hppa_elf_hash_entry (hh->eh.root.u.i.link); - /* We never need an opd entry for a symbol which is not defined by this output file. */ if (hh && (hh->eh.root.type == bfd_link_hash_undefined @@ -1519,19 +1506,15 @@ static bfd_boolean elf64_hppa_mark_milli_and_exported_functions (struct elf_link_hash_entry *eh, void *data) { - struct elf_link_hash_entry *elf = eh; - struct bfd_link_info *info = (struct bfd_link_info *)data; - - if (elf->root.type == bfd_link_hash_warning) - elf = (struct elf_link_hash_entry *) elf->root.u.i.link; + struct bfd_link_info *info = (struct bfd_link_info *) data; - if (elf->type == STT_PARISC_MILLI) + if (eh->type == STT_PARISC_MILLI) { - if (elf->dynindx != -1) + if (eh->dynindx != -1) { - elf->dynindx = -1; + eh->dynindx = -1; _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, - elf->dynstr_index); + eh->dynstr_index); } return TRUE; } @@ -2465,7 +2448,7 @@ elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh, static enum elf_reloc_type_class elf64_hppa_reloc_type_class (const Elf_Internal_Rela *rela) { - if (ELF64_R_SYM (rela->r_info) == 0) + if (ELF64_R_SYM (rela->r_info) == STN_UNDEF) return reloc_class_relative; switch ((int) ELF64_R_TYPE (rela->r_info)) @@ -2611,7 +2594,7 @@ elf64_hppa_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 32); + elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 32); /* pr_reg */ offset = 112; @@ -2846,9 +2829,6 @@ elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h, { struct bfd_link_info *info = data; - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - /* If we are not creating a shared library, and this symbol is referenced by a shared library but is not defined anywhere, then the generic code will warn that it is undefined. @@ -2880,9 +2860,6 @@ elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h, { struct bfd_link_info *info = data; - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - /* If we are not creating a shared library, and this symbol is referenced by a shared library but is not defined anywhere, then the generic code will warn that it is undefined. @@ -3296,13 +3273,13 @@ elf_hppa_final_link_relocate (Elf_Internal_Rela *rel, && value + addend + max_branch_offset >= 2*max_branch_offset) { (*_bfd_error_handler) - (_("%B(%A+0x%lx): cannot reach %s"), + (_("%B(%A+0x" BFD_VMA_FMT "x): cannot reach %s"), input_bfd, input_section, offset, - eh->root.root.string); + eh ? eh->root.root.string : "unknown"); bfd_set_error (bfd_error_bad_value); - return bfd_reloc_notsupported; + return bfd_reloc_overflow; } /* Adjust for any field selectors. */ @@ -3943,16 +3920,9 @@ elf64_hppa_relocate_section (bfd *output_bfd, } } - if (sym_sec != NULL && elf_discarded_section (sym_sec)) - { - /* For relocs against symbols from removed linkonce sections, - or sections discarded by a linker script, we just want the - section contents zeroed. Avoid any special processing. */ - _bfd_clear_contents (howto, input_bfd, contents + rel->r_offset); - rel->r_info = 0; - rel->r_addend = 0; - continue; - } + if (sym_sec != NULL && discarded_section (sym_sec)) + RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section, + rel, 1, relend, howto, 0, contents); if (info->relocatable) continue; @@ -4045,6 +4015,7 @@ const struct elf_size_info hppa64_elf_size_info = #define TARGET_BIG_SYM bfd_elf64_hppa_vec #define TARGET_BIG_NAME "elf64-hppa" #define ELF_ARCH bfd_arch_hppa +#define ELF_TARGET_ID HPPA64_ELF_DATA #define ELF_MACHINE_CODE EM_PARISC /* This is not strictly correct. The maximum page size for PA2.0 is 64M. But everything still uses 4k. */ @@ -4127,7 +4098,7 @@ const struct elf_size_info hppa64_elf_size_info = #undef TARGET_BIG_NAME #define TARGET_BIG_NAME "elf64-hppa-linux" #undef ELF_OSABI -#define ELF_OSABI ELFOSABI_LINUX +#define ELF_OSABI ELFOSABI_GNU #undef elf_backend_post_process_headers #define elf_backend_post_process_headers _bfd_elf_set_osabi #undef elf64_bed