diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 4f859c5..2eb6f2a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,80 @@ +2016-10-31 Alan Modra + + PR 20748 + * elf32-microblaze.c (microblaze_elf_finish_dynamic_sections): Revert + 2016-05-13 change. + +2016-10-10 Christophe Lyon + Backport from mainline + 2016-09-28 Christophe Lyon + + PR ld/20608 + * elf32-arm.c (arm_type_of_stub): Handle the case when the pre-PLT + Thumb-ARM stub is too far. + +2016-09-06 Senthil Kumar Selvaraj + + Backport from mainline + 2016-09-02 Senthil Kumar Selvaraj + + PR ld/20545 + * elf32-avr.c (elf32_avr_relax_delete_bytes): Add parameter + delete_shrinks_insn. Modify computation of shrinked_insn_address. + Compute shrink_boundary and adjust addend only if + addend_within_shrink_boundary. + (elf32_avr_relax_section): Modify calls to + elf32_avr_relax_delete_bytes to pass extra parameter. + +2016-09-01 Alan Modra + + * elf64-ppc.c (synthetic_opd): New static var. + (compare_symbols): Don't treat symbols in .opd specially for ELFv2. + (ppc64_elf_get_synthetic_symtab): Likewise. Comment. + +2016-08-30 Alan Modra + + PR 20531 + * elf32-ppc.c (_bfd_elf_ppc_set_arch): Add missing "break". + +2016-08-19 Alan Modra + + PR 20472 + * elf64-ppc.c (ppc64_elf_before_check_relocs): Tweak abiversion test. + (readonly_dynrelocs): Comment fix. + (global_entry_stub): New function. + (ppc64_elf_adjust_dynamic_symbol): Tweak abiversion test. Match + ELFv2 code deciding on dynamic relocs vs. global entry stubs to + that in size_global_entry_stubs, handling ifunc too. Delete dead + weak sym code. + (allocate_dynrelocs): Ensure dyn_relocs field is cleared when no + dyn_relocs are needed. Correct handling of ifunc dyn_relocs. + Tidy ELIMINATE_COPY_RELOCS code, only setting dynindx for + undefweak syms. Expand and correct comments. + (size_global_entry_stubs): Ensure symbol is defined. + (ppc64_elf_relocate_section): Match condition under which + dyn_relocs are emitted to that in allocate_dynrelocs. + +2016-08-11 Alan Modra + + * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't exit with + non_got_ref true in any case where we could have generated dynbss + copies but decide not to do so. + +2016-08-02 Nick Clifton + + PR ld/17739 + * elf32-sh.c (sh_elf_gc_sweep_hook): Delete. + (elf_backend_sweep_hook): Delete. + +2016-08-03 Tristan Gingold + + * version.m4: Bump version to 2.27.0 + * configure: Regenerate. + +2016-08-03 Tristan Gingold + + * development.sh: Set development to true. + 2016-08-03 Tristan Gingold * version.m4: Bump version to 2.27 diff --git a/bfd/configure b/bfd/configure index 6e6283d..a437569 100755 --- a/bfd/configure +++ b/bfd/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for bfd 2.27. +# Generated by GNU Autoconf 2.64 for bfd 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bfd' PACKAGE_TARNAME='bfd' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='bfd 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='bfd 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1353,7 +1353,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bfd 2.27 to adapt to many kinds of systems. +\`configure' configures bfd 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1424,7 +1424,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bfd 2.27:";; + short | recursive ) echo "Configuration of bfd 2.27.0:";; esac cat <<\_ACEOF @@ -1545,7 +1545,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bfd configure 2.27 +bfd configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2187,7 +2187,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bfd $as_me 2.27, which was +It was created by bfd $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3996,7 +3996,7 @@ fi # Define the identity of the package. PACKAGE='bfd' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -16576,7 +16576,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bfd $as_me 2.27, which was +This file was extended by bfd $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16640,7 +16640,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -bfd config.status 2.27 +bfd config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/bfd/development.sh b/bfd/development.sh index 5d00fa0..85dae6b 100644 --- a/bfd/development.sh +++ b/bfd/development.sh @@ -16,4 +16,4 @@ # along with this program. If not, see . # Controls whether to enable development-mode features by default. -development=false +development=true diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 3d4a458..700bec3 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -3877,17 +3877,43 @@ arm_type_of_stub (struct bfd_link_info *info, /* Note when dealing with PLT entries: the main PLT stub is in ARM mode, so if the branch is in Thumb mode, another Thumb->ARM stub will be inserted later just before the ARM - PLT stub. We don't take this extra distance into account - here, because if a long branch stub is needed, we'll add a - Thumb->Arm one and branch directly to the ARM PLT entry - because it avoids spreading offset corrections in several - places. */ + PLT stub. If a long branch stub is needed, we'll add a + Thumb->Arm one and branch directly to the ARM PLT entry. + Here, we have to check if a pre-PLT Thumb->ARM stub + is needed and if it will be close enough. */ destination = (splt->output_section->vma + splt->output_offset + root_plt->offset); st_type = STT_FUNC; - branch_type = ST_BRANCH_TO_ARM; + + /* Thumb branch/call to PLT: it can become a branch to ARM + or to Thumb. We must perform the same checks and + corrections as in elf32_arm_final_link_relocate. */ + if ((r_type == R_ARM_THM_CALL) + || (r_type == R_ARM_THM_JUMP24)) + { + if (globals->use_blx + && r_type == R_ARM_THM_CALL + && !thumb_only) + { + /* If the Thumb BLX instruction is available, convert + the BL to a BLX instruction to call the ARM-mode + PLT entry. */ + branch_type = ST_BRANCH_TO_ARM; + } + else + { + if (!thumb_only) + /* Target the Thumb stub before the ARM PLT entry. */ + destination -= PLT_THUMB_STUB_SIZE; + branch_type = ST_BRANCH_TO_THUMB; + } + } + else + { + branch_type = ST_BRANCH_TO_ARM; + } } } /* Calls to STT_GNU_IFUNC symbols should go through a PLT. */ @@ -3923,6 +3949,15 @@ arm_type_of_stub (struct bfd_link_info *info, || (r_type == R_ARM_THM_JUMP19)) && !use_plt)) { + /* If we need to insert a Thumb-Thumb long branch stub to a + PLT, use one that branches directly to the ARM PLT + stub. If we pretended we'd use the pre-PLT Thumb->ARM + stub, undo this now. */ + if ((branch_type == ST_BRANCH_TO_THUMB) && use_plt && !thumb_only) { + branch_type = ST_BRANCH_TO_ARM; + branch_offset += PLT_THUMB_STUB_SIZE; + } + if (branch_type == ST_BRANCH_TO_THUMB) { /* Thumb to thumb. */ diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index a0a5c69..eea76a4 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -1808,13 +1808,17 @@ elf32_avr_adjust_diff_reloc_value (bfd *abfd, /* Delete some bytes from a section while changing the size of an instruction. The parameter "addr" denotes the section-relative offset pointing just behind the shrinked instruction. "addr+count" point at the first - byte just behind the original unshrinked instruction. */ + byte just behind the original unshrinked instruction. If delete_shrinks_insn + is FALSE, we are deleting redundant padding bytes from relax_info prop + record handling. In that case, addr is section-relative offset of start + of padding, and count is the number of padding bytes to delete. */ static bfd_boolean elf32_avr_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, - int count) + int count, + bfd_boolean delete_shrinks_insn) { Elf_Internal_Shdr *symtab_hdr; unsigned int sec_shndx; @@ -1829,6 +1833,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd, struct avr_relax_info *relax_info; struct avr_property_record *prop_record = NULL; bfd_boolean did_shrink = FALSE; + bfd_boolean did_pad = FALSE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); @@ -1909,6 +1914,7 @@ elf32_avr_relax_delete_bytes (bfd *abfd, to remember we didn't delete anything i.e. don't set did_shrink, so that we don't corrupt reloc offsets or symbol values.*/ memset (contents + toaddr - count, fill, count); + did_pad = TRUE; /* Adjust the TOADDR to avoid moving symbols located at the address of the property record, which has not moved. */ @@ -1965,7 +1971,9 @@ elf32_avr_relax_delete_bytes (bfd *abfd, continue; shrinked_insn_address = (sec->output_section->vma - + sec->output_offset + addr - count); + + sec->output_offset + addr); + if (delete_shrinks_insn) + shrinked_insn_address -= count; irel = elf_section_data (isec)->relocs; /* PR 12161: Read in the relocs for this section if necessary. */ @@ -2002,6 +2010,13 @@ elf32_avr_relax_delete_bytes (bfd *abfd, a symbol or section associated with it. */ if (sym_sec == sec) { + /* If there is an alignment boundary, we only need to + adjust addends that end up below the boundary. */ + bfd_vma shrink_boundary = (reloc_toaddr + + sec->output_section->vma + + sec->output_offset); + bfd_boolean addend_within_shrink_boundary = FALSE; + symval += sym_sec->output_section->vma + sym_sec->output_offset; @@ -2015,8 +2030,17 @@ elf32_avr_relax_delete_bytes (bfd *abfd, (unsigned int) (symval + irel->r_addend), (unsigned int) shrinked_insn_address); + /* If we padded bytes, then the boundary didn't change, + so there's no need to adjust addends pointing at the boundary. + If we didn't pad, then we actually shrank the boundary, so + addends pointing at the boundary need to be adjusted too. */ + addend_within_shrink_boundary = did_pad + ? ((symval + irel->r_addend) < shrink_boundary) + : ((symval + irel->r_addend) <= shrink_boundary); + if (symval <= shrinked_insn_address - && (symval + irel->r_addend) > shrinked_insn_address) + && (symval + irel->r_addend) > shrinked_insn_address + && addend_within_shrink_boundary) { if (elf32_avr_is_diff_reloc (irel)) { @@ -2648,7 +2672,8 @@ elf32_avr_relax_section (bfd *abfd, { /* Delete two bytes of data. */ if (!elf32_avr_relax_delete_bytes (abfd, sec, - irel->r_offset + 2, 2)) + irel->r_offset + 2, 2, + TRUE)) goto error_return; /* That will change things, so, we should relax again. @@ -2972,7 +2997,8 @@ elf32_avr_relax_section (bfd *abfd, /* Delete two bytes of data. */ if (!elf32_avr_relax_delete_bytes (abfd, sec, - irel->r_offset + insn_size, 2)) + irel->r_offset + insn_size, 2, + TRUE)) goto error_return; /* That will change things, so, we should relax @@ -3040,7 +3066,7 @@ elf32_avr_relax_section (bfd *abfd, record->offset -= count; elf32_avr_relax_delete_bytes (abfd, sec, addr - count, - count); + count, FALSE); *again = TRUE; } } diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c index 5496d16..d964e17 100644 --- a/bfd/elf32-microblaze.c +++ b/bfd/elf32-microblaze.c @@ -3400,13 +3400,13 @@ microblaze_elf_finish_dynamic_sections (bfd *output_bfd, { asection *s; - s = bfd_get_linker_section (dynobj, name); + s = bfd_get_section_by_name (output_bfd, name); if (s == NULL) dyn.d_un.d_val = 0; else { if (! size) - dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; + dyn.d_un.d_ptr = s->vma; else dyn.d_un.d_val = s->size; } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 95ce1dc..e42ef1c 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2246,6 +2246,7 @@ _bfd_elf_ppc_set_arch (bfd *abfd) case PPC_APUINFO_BRLOCK: if (mach != bfd_mach_ppc_vle) mach = bfd_mach_ppc_e500; + break; case PPC_APUINFO_VLE: mach = bfd_mach_ppc_vle; diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 52a5fd1..5609b55 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -5682,6 +5682,7 @@ sh_elf_gc_mark_hook (asection *sec, return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } +#if 0 /* Update the got entry reference counts for the section being removed. */ static bfd_boolean @@ -5895,6 +5896,7 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, return TRUE; } +#endif /* Copy the extra info we tack onto an elf_link_hash_entry. */ @@ -7455,7 +7457,7 @@ sh_elf_encode_eh_address (bfd *abfd, sh_elf_merge_private_data #define elf_backend_gc_mark_hook sh_elf_gc_mark_hook -#define elf_backend_gc_sweep_hook sh_elf_gc_sweep_hook +//#define elf_backend_gc_sweep_hook sh_elf_gc_sweep_hook #define elf_backend_check_relocs sh_elf_check_relocs #define elf_backend_copy_indirect_symbol \ sh_elf_copy_indirect_symbol diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index d7af888..d236732 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -3085,6 +3085,7 @@ get_opd_info (asection * sec) /* Parameters for the qsort hook. */ static bfd_boolean synthetic_relocatable; +static asection *synthetic_opd; /* qsort comparison function for ppc64_elf_get_synthetic_symtab. */ @@ -3101,12 +3102,15 @@ compare_symbols (const void *ap, const void *bp) return 1; /* then .opd symbols. */ - if (strcmp (a->section->name, ".opd") == 0 - && strcmp (b->section->name, ".opd") != 0) - return -1; - if (strcmp (a->section->name, ".opd") != 0 - && strcmp (b->section->name, ".opd") == 0) - return 1; + if (synthetic_opd != NULL) + { + if (strcmp (a->section->name, ".opd") == 0 + && strcmp (b->section->name, ".opd") != 0) + return -1; + if (strcmp (a->section->name, ".opd") != 0 + && strcmp (b->section->name, ".opd") == 0) + return 1; + } /* then other code symbols. */ if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL)) @@ -3265,6 +3269,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms)); synthetic_relocatable = relocatable; + synthetic_opd = opd; qsort (syms, symcount, sizeof (*syms), compare_symbols); if (!relocatable && symcount > 1) @@ -3281,7 +3286,11 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, } i = 0; - if (strcmp (syms[i]->section->name, ".opd") == 0) + /* Note that here and in compare_symbols we can't compare opd and + sym->section directly. With separate debug info files, the + symbols will be extracted from the debug file while abfd passed + to this function is the real binary. */ + if (opd != NULL && strcmp (syms[i]->section->name, ".opd") == 0) ++i; codesecsym = i; @@ -3297,9 +3306,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, break; secsymend = i; - for (; i < symcount; ++i) - if (strcmp (syms[i]->section->name, ".opd") != 0) - break; + if (opd != NULL) + for (; i < symcount; ++i) + if (strcmp (syms[i]->section->name, ".opd") != 0) + break; opdsymend = i; for (; i < symcount; ++i) @@ -5081,7 +5091,7 @@ ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info) { if (abiversion (ibfd) == 0) set_abiversion (ibfd, 1); - else if (abiversion (ibfd) == 2) + else if (abiversion (ibfd) >= 2) { info->callbacks->einfo (_("%P: %B .opd not allowed in ABI" " version %d\n"), @@ -7102,7 +7112,8 @@ ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED, return TRUE; } -/* Return true if we have dynamic relocs that apply to read-only sections. */ +/* Return true if we have dynamic relocs against H that apply to + read-only sections. */ static bfd_boolean readonly_dynrelocs (struct elf_link_hash_entry *h) @@ -7121,6 +7132,27 @@ readonly_dynrelocs (struct elf_link_hash_entry *h) return FALSE; } + +/* Return true if a global entry stub will be created for H. Valid + for ELFv2 before plt entries have been allocated. */ + +static bfd_boolean +global_entry_stub (struct elf_link_hash_entry *h) +{ + struct plt_entry *pent; + + if (!h->pointer_equality_needed + || h->def_regular) + return FALSE; + + for (pent = h->plt.plist; pent != NULL; pent = pent->next) + if (pent->plt.refcount > 0 + && pent->addend == 0) + return TRUE; + + return FALSE; +} + /* Adjust a symbol defined by a dynamic object and referenced by a regular object. The current definition is in some section of the dynamic object, but we're not including those sections. We have to @@ -7160,35 +7192,25 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, h->needs_plt = 0; h->pointer_equality_needed = 0; } - else if (abiversion (info->output_bfd) == 2) + else if (abiversion (info->output_bfd) >= 2) { /* Taking a function's address in a read/write section doesn't require us to define the function symbol in the executable on a global entry stub. A dynamic reloc can - be used instead. */ - if (h->pointer_equality_needed - && h->type != STT_GNU_IFUNC + be used instead. The reason we prefer a few more dynamic + relocs is that calling via a global entry stub costs a + few more instructions, and pointer_equality_needed causes + extra work in ld.so when resolving these symbols. */ + if (global_entry_stub (h) && !readonly_dynrelocs (h)) { h->pointer_equality_needed = 0; + /* After adjust_dynamic_symbol, non_got_ref set in + the non-pic case means that dyn_relocs for this + symbol should be discarded. */ h->non_got_ref = 0; } - /* After adjust_dynamic_symbol, non_got_ref set in the - non-shared case means that we have allocated space in - .dynbss for the symbol and thus dyn_relocs for this - symbol should be discarded. - If we get here we know we are making a PLT entry for this - symbol, and in an executable we'd normally resolve - relocations against this symbol to the PLT entry. Allow - dynamic relocs if the reference is weak, and the dynamic - relocs will not cause text relocation. */ - else if (!h->ref_regular_nonweak - && h->non_got_ref - && h->type != STT_GNU_IFUNC - && !readonly_dynrelocs (h)) - h->non_got_ref = 0; - /* If making a plt entry, then we don't need copy relocs. */ return TRUE; } @@ -7223,29 +7245,20 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, return TRUE; /* Don't generate a copy reloc for symbols defined in the executable. */ - if (!h->def_dynamic || !h->ref_regular || h->def_regular) - return TRUE; + if (!h->def_dynamic || !h->ref_regular || h->def_regular - /* If -z nocopyreloc was given, don't generate them either. */ - if (info->nocopyreloc) - { - h->non_got_ref = 0; - return TRUE; - } + /* If -z nocopyreloc was given, don't generate them either. */ + || info->nocopyreloc - /* If we didn't find any dynamic relocs in read-only sections, then - we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) - { - h->non_got_ref = 0; - return TRUE; - } + /* If we didn't find any dynamic relocs in read-only sections, then + we'll be keeping the dynamic relocs and avoiding the copy reloc. */ + || (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) - /* Protected variables do not work with .dynbss. The copy in - .dynbss won't be used by the shared library with the protected - definition for the variable. Text relocations are preferable - to an incorrect program. */ - if (h->protected_def) + /* Protected variables do not work with .dynbss. The copy in + .dynbss won't be used by the shared library with the protected + definition for the variable. Text relocations are preferable + to an incorrect program. */ + || h->protected_def) { h->non_got_ref = 0; return TRUE; @@ -9547,7 +9560,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) struct ppc_link_hash_table *htab; asection *s; struct ppc_link_hash_entry *eh; - struct elf_dyn_relocs *p; struct got_entry **pgent, *gent; if (h->root.type == bfd_link_hash_indirect) @@ -9627,10 +9639,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) allocate_got (h, info, gent); } - if (eh->dyn_relocs != NULL - && (htab->elf.dynamic_sections_created - || h->type == STT_GNU_IFUNC)) + if (!htab->elf.dynamic_sections_created + && h->type != STT_GNU_IFUNC) + eh->dyn_relocs = NULL; + + if (eh->dyn_relocs != NULL) { + struct elf_dyn_relocs *p, **pp; + /* In the shared -Bsymbolic case, discard space allocated for dynamic pc-relative relocs against symbols which turn out to be defined in regular objects. For the normal shared case, @@ -9648,8 +9664,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) avoid writing weird assembly. */ if (SYMBOL_CALLS_LOCAL (info, h)) { - struct elf_dyn_relocs **pp; - for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) { p->count -= p->pc_count; @@ -9681,36 +9695,47 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } else if (h->type == STT_GNU_IFUNC) { - if (!h->non_got_ref) + /* A plt entry is always created when making direct calls to + an ifunc, even when building a static executable, but + that doesn't cover all cases. We may have only an ifunc + initialised function pointer for a given ifunc symbol. + + For ELFv2, dynamic relocations are not required when + generating a global entry PLT stub. */ + if (abiversion (info->output_bfd) >= 2) + { + if (global_entry_stub (h)) + eh->dyn_relocs = NULL; + } + + /* For ELFv1 we have function descriptors. Descriptors need + to be treated like PLT entries and thus have dynamic + relocations. One exception is when the function + descriptor is copied into .dynbss (which should only + happen with ancient versions of gcc). */ + else if (h->needs_copy) eh->dyn_relocs = NULL; } else if (ELIMINATE_COPY_RELOCS) { - /* For the non-shared case, discard space for relocs against + /* For the non-pic case, discard space for relocs against symbols which turn out to need copy relocs or are not dynamic. */ - if (!h->non_got_ref - && !h->def_regular) - { - /* Make sure this symbol is output as a dynamic symbol. - Undefined weak syms won't yet be marked as dynamic. */ - if (h->dynindx == -1 - && !h->forced_local) - { - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } - - /* If that succeeded, we know we'll be keeping all the - relocs. */ - if (h->dynindx != -1) - goto keep; - } - - eh->dyn_relocs = NULL; + /* First make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->root.type == bfd_link_hash_undefweak + && !h->non_got_ref + && !h->def_regular + && h->dynindx == -1 + && !h->forced_local + && !bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; - keep: ; + if (h->non_got_ref + || h->def_regular + || h->dynindx == -1) + eh->dyn_relocs = NULL; } /* Finally, allocate space. */ @@ -9827,6 +9852,7 @@ size_global_entry_stubs (struct elf_link_hash_entry *h, void *inf) need to define the symbol in the executable on a call stub. This is to avoid text relocations. */ s->size = (s->size + 15) & -16; + h->root.type = bfd_link_hash_defined; h->root.u.def.section = s; h->root.u.def.value = s->size; s->size += 16; @@ -14679,22 +14705,25 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (NO_OPD_RELOCS && is_opd) break; - if ((bfd_link_pic (info) - && (h == NULL - || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT - || h->elf.root.type != bfd_link_hash_undefweak) - && (must_be_dyn_reloc (info, r_type) - || !SYMBOL_CALLS_LOCAL (info, &h->elf))) - || (ELIMINATE_COPY_RELOCS - && !bfd_link_pic (info) - && h != NULL - && h->elf.dynindx != -1 - && !h->elf.non_got_ref - && !h->elf.def_regular) - || (!bfd_link_pic (info) - && (h != NULL - ? h->elf.type == STT_GNU_IFUNC - : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))) + if (bfd_link_pic (info) + ? ((h == NULL + || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT + || h->elf.root.type != bfd_link_hash_undefweak) + && (must_be_dyn_reloc (info, r_type) + || !SYMBOL_CALLS_LOCAL (info, &h->elf))) + : (h == NULL + ? ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC + : (h->elf.type == STT_GNU_IFUNC + ? (abiversion (output_bfd) >= 2 + ? !(h->elf.pointer_equality_needed + && !h->elf.def_regular + && h->elf.root.type == bfd_link_hash_defined + && h->elf.root.u.def.section == htab->glink) + : !h->elf.needs_copy) + : (ELIMINATE_COPY_RELOCS + && !(h->elf.non_got_ref + || h->elf.def_regular + || h->elf.dynindx == -1))))) { bfd_boolean skip, relocate; asection *sreloc; diff --git a/bfd/version.h b/bfd/version.h index 9ca8ab8..b032cc5 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,4 +1,4 @@ -#define BFD_VERSION_DATE 20160803 +#define BFD_VERSION_DATE 20161129 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ diff --git a/bfd/version.m4 b/bfd/version.m4 index e474848..fdf3606 100644 --- a/bfd/version.m4 +++ b/bfd/version.m4 @@ -1 +1 @@ -m4_define([BFD_VERSION], [2.27]) +m4_define([BFD_VERSION], [2.27.0]) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index b92bf46..a70bdb7 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -2,6 +2,10 @@ * configure: Regenerate. +2016-08-03 Tristan Gingold + + * configure: Regenerate. + 2016-07-01 Nick Clifton * Import this patch from the mainline: diff --git a/binutils/configure b/binutils/configure index ea013d1..6cbf17c 100755 --- a/binutils/configure +++ b/binutils/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for binutils 2.27. +# Generated by GNU Autoconf 2.64 for binutils 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='binutils' PACKAGE_TARNAME='binutils' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='binutils 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='binutils 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1337,7 +1337,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures binutils 2.27 to adapt to many kinds of systems. +\`configure' configures binutils 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1408,7 +1408,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of binutils 2.27:";; + short | recursive ) echo "Configuration of binutils 2.27.0:";; esac cat <<\_ACEOF @@ -1529,7 +1529,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -binutils configure 2.27 +binutils configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2171,7 +2171,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by binutils $as_me 2.27, which was +It was created by binutils $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3980,7 +3980,7 @@ fi # Define the identity of the package. PACKAGE='binutils' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -15179,7 +15179,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by binutils $as_me 2.27, which was +This file was extended by binutils $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15243,7 +15243,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -binutils config.status 2.27 +binutils config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/gas/ChangeLog b/gas/ChangeLog index 5553b6c..50fcf52 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,31 @@ +2016-09-16 Peter Bergner + + Apply from master. + 2016-09-14 Peter Bergner + + * testsuite/gas/ppc/power9.d New tests. + : Remove tests. + : Update tests. + * testsuite/gas/ppc/power9.s: Likewise. + +2016-08-25 Thomas Preud'homme + + Backport from mainline + 2016-08-25 Thomas Preud'homme + + * config/tc-arm.c (v7m_psrs): Remove msp_s, MSP_S, psp_s and PSP_S + special registers. + * testsuite/gas/arm/archv8m-cmse-msr.s: Remove test for above special + registers. + * testsuite/gas/arm/archv8m-cmse-msr-base.d: Likewise. + * testsuite/gas/arm/archv8m-cmse-msr-main.d: Likewise. + * testsuite/gas/arm/archv8m-main-dsp-4.d: Likewise. + +2016-08-03 Tristan Gingold + + * configure: Regenerate. + 2016-08-03 Tristan Gingold * configure: Regenerate. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 73d0531..4fa0bfc 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -18788,8 +18788,8 @@ static const struct asm_psr v7m_psrs[] = {"ipsr", 5 }, {"IPSR", 5 }, {"epsr", 6 }, {"EPSR", 6 }, {"iepsr", 7 }, {"IEPSR", 7 }, - {"msp", 8 }, {"MSP", 8 }, {"msp_s", 8 }, {"MSP_S", 8 }, - {"psp", 9 }, {"PSP", 9 }, {"psp_s", 9 }, {"PSP_S", 9 }, + {"msp", 8 }, {"MSP", 8 }, + {"psp", 9 }, {"PSP", 9 }, {"primask", 16}, {"PRIMASK", 16}, {"basepri", 17}, {"BASEPRI", 17}, {"basepri_max", 18}, {"BASEPRI_MAX", 18}, diff --git a/gas/configure b/gas/configure index 7b48a58..f7753b8 100755 --- a/gas/configure +++ b/gas/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for gas 2.27. +# Generated by GNU Autoconf 2.64 for gas 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gas' PACKAGE_TARNAME='gas' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='gas 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='gas 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1328,7 +1328,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gas 2.27 to adapt to many kinds of systems. +\`configure' configures gas 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1399,7 +1399,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gas 2.27:";; + short | recursive ) echo "Configuration of gas 2.27.0:";; esac cat <<\_ACEOF @@ -1521,7 +1521,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gas configure 2.27 +gas configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1931,7 +1931,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gas $as_me 2.27, which was +It was created by gas $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3740,7 +3740,7 @@ fi # Define the identity of the package. PACKAGE='gas' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -15137,7 +15137,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gas $as_me 2.27, which was +This file was extended by gas $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15201,7 +15201,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -gas config.status 2.27 +gas config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d b/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d index 4bbb82d..0c46a44 100644 --- a/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d +++ b/gas/testsuite/gas/arm/archv8m-cmse-msr-base.d @@ -7,26 +7,18 @@ Disassembly of section .text: 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS diff --git a/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d b/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d index 30a3361..42d3ba9 100644 --- a/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d +++ b/gas/testsuite/gas/arm/archv8m-cmse-msr-main.d @@ -7,26 +7,18 @@ Disassembly of section .text: 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS diff --git a/gas/testsuite/gas/arm/archv8m-cmse-msr.s b/gas/testsuite/gas/arm/archv8m-cmse-msr.s index 897be1a..66a3b64 100644 --- a/gas/testsuite/gas/arm/archv8m-cmse-msr.s +++ b/gas/testsuite/gas/arm/archv8m-cmse-msr.s @@ -1,25 +1,17 @@ T: msr MSP, r0 -msr MSP_S, r0 msr MSP_NS, r0 msr PSP, r0 -msr PSP_S, r0 msr PSP_NS, r0 msr msp, r0 -msr msp_s, r0 msr msp_ns, r0 msr psp, r0 -msr psp_s, r0 msr psp_ns, r0 mrs r0, MSP -mrs r0, MSP_S mrs r0, MSP_NS mrs r0, PSP -mrs r0, PSP_S mrs r0, PSP_NS mrs r0, msp -mrs r0, msp_s mrs r0, msp_ns mrs r0, psp -mrs r0, psp_s mrs r0, psp_ns diff --git a/gas/testsuite/gas/arm/archv8m-main-dsp-4.d b/gas/testsuite/gas/arm/archv8m-main-dsp-4.d index 248f75e..7ebc9c1 100644 --- a/gas/testsuite/gas/arm/archv8m-main-dsp-4.d +++ b/gas/testsuite/gas/arm/archv8m-main-dsp-4.d @@ -7,26 +7,18 @@ Disassembly of section .text: 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f380 8808 msr MSP, r0 -0+.* <[^>]*> f380 8808 msr MSP, r0 0+.* <[^>]*> f380 8888 msr MSP_NS, r0 0+.* <[^>]*> f380 8809 msr PSP, r0 -0+.* <[^>]*> f380 8809 msr PSP, r0 0+.* <[^>]*> f380 8889 msr PSP_NS, r0 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS 0+.* <[^>]*> f3ef 8008 mrs r0, MSP -0+.* <[^>]*> f3ef 8008 mrs r0, MSP 0+.* <[^>]*> f3ef 8088 mrs r0, MSP_NS 0+.* <[^>]*> f3ef 8009 mrs r0, PSP -0+.* <[^>]*> f3ef 8009 mrs r0, PSP 0+.* <[^>]*> f3ef 8089 mrs r0, PSP_NS diff --git a/gas/testsuite/gas/ppc/power9.d b/gas/testsuite/gas/ppc/power9.d index 1135d26..31e4530 100644 --- a/gas/testsuite/gas/ppc/power9.d +++ b/gas/testsuite/gas/ppc/power9.d @@ -280,14 +280,6 @@ Disassembly of section \.text: .*: (7f a8 49 80|80 49 a8 7f) cmprb cr7,1,r8,r9 .*: (7d e0 01 00|00 01 e0 7d) setb r15,cr0 .*: (7d fc 01 00|00 01 fc 7d) setb r15,cr7 -.*: (7e 00 01 01|01 01 00 7e) setbool r16,lt -.*: (7e 01 01 01|01 01 01 7e) setbool r16,gt -.*: (7e 02 01 01|01 01 02 7e) setbool r16,eq -.*: (7e 03 01 01|01 01 03 7e) setbool r16,so -.*: (7e 1c 01 01|01 01 1c 7e) setbool r16,4\*cr7\+lt -.*: (7e 1d 01 01|01 01 1d 7e) setbool r16,4\*cr7\+gt -.*: (7e 1e 01 01|01 01 1e 7e) setbool r16,4\*cr7\+eq -.*: (7e 1f 01 01|01 01 1f 7e) setbool r16,4\*cr7\+so .*: (7f 40 52 1a|1a 52 40 7f) lxvl vs26,0,r10 .*: (7f 14 52 1b|1b 52 14 7f) lxvl vs56,r20,r10 .*: (7f 60 5b 1a|1a 5b 60 7f) stxvl vs27,0,r11 @@ -331,6 +323,7 @@ Disassembly of section \.text: .*: (4c e0 80 04|04 80 e0 4c) addpcis r7,-32768 .*: (4c e0 80 04|04 80 e0 4c) addpcis r7,-32768 .*: (7c 00 02 a4|a4 02 00 7c) slbsync +.*: (7d 40 06 a4|a4 06 40 7d) slbiag r10 .*: (7d 40 5b a4|a4 5b 40 7d) slbieg r10,r11 .*: (7c 60 27 26|26 27 60 7c) slbmfee r3,r4 .*: (7c 60 27 26|26 27 60 7c) slbmfee r3,r4 @@ -344,14 +337,9 @@ Disassembly of section \.text: .*: (7c 00 1a 24|24 1a 00 7c) tlbiel r3 .*: (7c 00 1a 24|24 1a 00 7c) tlbiel r3 .*: (7c 8f 1a 24|24 1a 8f 7c) tlbiel r3,r4,3,1,1 -.*: (7c 0c 6e 0c|0c 6e 0c 7c) copy r12,r13 -.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy_first r12,r13 -.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy_first r12,r13 -.*: (7c 0a 5f 0c|0c 5f 0a 7c) paste r10,r11 -.*: (7c 0a 5f 0c|0c 5f 0a 7c) paste r10,r11 -.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste_last r10,r11 -.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste_last r10,r11 -.*: (7c 00 06 8c|8c 06 00 7c) cp_abort +.*: (7c 2c 6e 0c|0c 6e 2c 7c) copy r12,r13 +.*: (7c 2a 5f 0d|0d 5f 2a 7c) paste\. r10,r11 +.*: (7c 00 06 8c|8c 06 00 7c) cpabort .*: (7c 00 04 ac|ac 04 00 7c) hwsync .*: (7c 00 04 ac|ac 04 00 7c) hwsync .*: (7c 00 04 ac|ac 04 00 7c) hwsync @@ -359,8 +347,6 @@ Disassembly of section \.text: .*: (7c 20 04 ac|ac 04 20 7c) lwsync .*: (7c 40 04 ac|ac 04 40 7c) ptesync .*: (7c 40 04 ac|ac 04 40 7c) ptesync -.*: (7c 07 04 ac|ac 04 07 7c) sync 0,7 -.*: (7c 28 04 ac|ac 04 28 7c) sync 1,8 .*: (7e 80 04 cc|cc 04 80 7e) ldat r20,0,0 .*: (7e 8a e4 cc|cc e4 8a 7e) ldat r20,r10,28 .*: (7e a0 04 8c|8c 04 a0 7e) lwat r21,0,0 @@ -373,8 +359,6 @@ Disassembly of section \.text: .*: (7c 00 f6 e4|e4 f6 00 7c) rmieg r30 .*: (7d 40 7a 6a|6a 7a 40 7d) ldmx r10,0,r15 .*: (7d 43 7a 6a|6a 7a 43 7d) ldmx r10,r3,r15 -.*: (7d 60 83 6a|6a 83 60 7d) lwzmx r11,0,r16 -.*: (7d 63 83 6a|6a 83 63 7d) lwzmx r11,r3,r16 .*: (4c 00 02 e4|e4 02 00 4c) stop .*: (7c 00 00 3c|3c 00 00 7c) wait .*: (7c 00 00 3c|3c 00 00 7c) wait @@ -397,9 +381,6 @@ Disassembly of section \.text: .*: (7d 6c 69 54|54 69 6c 7d) addex r11,r12,r13,0 .*: (7d 6c 6b 54|54 6b 6c 7d) addex r11,r12,r13,1 .*: (7d 6c 6d 54|54 6d 6c 7d) addex r11,r12,r13,2 -.*: (7e b6 b9 55|55 b9 b6 7e) addex\. r21,r22,r23,0 -.*: (7e b6 bb 55|55 bb b6 7e) addex\. r21,r22,r23,1 -.*: (7e b6 bd 55|55 bd b6 7e) addex\. r21,r22,r23,2 .*: (ff 20 04 8e|8e 04 20 ff) mffs f25 .*: (ff 20 04 8f|8f 04 20 ff) mffs\. f25 .*: (ff 41 04 8e|8e 04 41 ff) mffsce f26 @@ -410,12 +391,4 @@ Disassembly of section \.text: .*: (ff d7 04 8e|8e 04 d7 ff) mffscrni f30,0 .*: (ff d7 1c 8e|8e 1c d7 ff) mffscrni f30,3 .*: (ff f8 04 8e|8e 04 f8 ff) mffsl f31 -.*: (7e 8a 01 76|76 01 8a 7e) brd r10,r20 -.*: (7e ab 01 b6|b6 01 ab 7e) brh r11,r21 -.*: (7e cc 01 36|36 01 cc 7e) brw r12,r22 -.*: (11 6a 63 77|77 63 6a 11) nandxor r10,r11,r12,r13 -.*: (12 b4 b5 f6|f6 b5 b4 12) xor3 r20,r21,r22,r23 -.*: (11 6a 60 34|34 60 6a 11) rldixor r10,r11,0,r12 -.*: (11 6a 66 f4|f4 66 6a 11) rldixor r10,r11,27,r12 -.*: (11 6a 67 f5|f5 67 6a 11) rldixor r10,r11,63,r12 #pass diff --git a/gas/testsuite/gas/ppc/power9.s b/gas/testsuite/gas/ppc/power9.s index 21edb9c..469435d 100644 --- a/gas/testsuite/gas/ppc/power9.s +++ b/gas/testsuite/gas/ppc/power9.s @@ -271,14 +271,6 @@ power9: cmprb 7,1,8,9 setb 15,0 setb 15,7 - setbool 16,0 - setbool 16,1 - setbool 16,2 - setbool 16,3 - setbool 16,28 - setbool 16,29 - setbool 16,30 - setbool 16,31 lxvl 26,0,10 lxvl 56,20,10 stxvl 27,0,11 @@ -322,6 +314,7 @@ power9: addpcis 7,-0x8000 subpcis 7,0x8000 slbsync + slbiag 10 slbieg 10,11 slbmfee 3,4 slbmfee 3,4,0 @@ -335,23 +328,16 @@ power9: tlbiel 3 tlbiel 3,0,0,0,0 tlbiel 3,4,3,1,1 - copy 12,13,0 - copy_first 12,13 - copy 12,13,1 - paste 10,11,0 - paste 10,11 - paste. 10,11,1 - paste_last 10,11 - cp_abort + copy 12,13 + paste. 10,11 + cpabort hwsync sync - sync 0,0x0 + sync 0 lwsync - sync 1,0x0 + sync 1 ptesync - sync 2,0x0 - sync 0,0x7 - sync 1,0x8 + sync 2 ldat 20,0,0x0 ldat 20,10,0x1c lwat 21,0,0x0 @@ -364,8 +350,6 @@ power9: rmieg 30 ldmx 10,0,15 ldmx 10,3,15 - lwzmx 11,0,16 - lwzmx 11,3,16 stop wait wait 0 @@ -388,9 +372,6 @@ power9: addex 11,12,13,0 addex 11,12,13,1 addex 11,12,13,2 - addex. 21,22,23,0 - addex. 21,22,23,1 - addex. 21,22,23,2 mffs 25 mffs. 25 mffsce 26 @@ -401,11 +382,3 @@ power9: mffscrni 30,0 mffscrni 30,3 mffsl 31 - brd 10,20 - brh 11,21 - brw 12,22 - nandxor 10,11,12,13 - xor3 20,21,22,23 - rldixor 10,11,0,12 - rldixor 10,11,27,12 - rldixor 10,11,63,12 diff --git a/gold/ChangeLog b/gold/ChangeLog index 239df36..f5005ef 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,6 +1,72 @@ +2016-09-26 Cary Coutant + + PR gold/20238 + * symtab.cc (Symbol_table::define_default_version): Check that + unversioned symbol is defined. + +2016-08-23 Roland McGrath + + * options.h (General_options): Grok -z stack-size. + * output.h (Output_segment::set_size): New method. + * layout.cc (Layout::create_executable_stack_info): Renamed to ... + (Layout::create_stack_segment): ... this. Always create the + segment if -z stack-size was used. + (Layout::set_segment_offsets): Don't call ->set_offset on the + PT_GNU_STACK segment. + +2016-08-17 Cary Coutant + + * i386.cc (Target_i386): Reset skip_call_tls_get_addr_ after printing + error message. + * testsuite/Makefile.am (pr20216a): Add missing dependencies. + (pr20308a): Add -Bgcctestdir/ to compile rules. + * testsuite/Makefile.in: Regenerate. + +2016-08-12 Roland McGrath + + PR gold/20462 + * script-sections.cc (Script_sections::release_segments): + Reset this->segments_created_. + +2016-08-12 Roland McGrath + + * yyscript.y (HIDDEN): New %token. + (assignment): Handle HIDDEN(string = expr) syntax. + * script.cc (script_keyword_parsecodes): Add HIDDEN. + +2016-08-10 Cary Coutant + + PR gold/20216 + * x86_64.cc (Target_x86_64::Relocate::relocate): Add check for + R_X86_64_GOTPCREL. Reset skip_call_tls_get_addr_ after printing + error message. + * testsuite/Makefile.am (pr20216_gd.o): Add -Bgcctestdir/. + (pr20216_ld.o): Likewise. + * testsuite/Makefile.in: Regenerate. + +2016-08-10 James Clarke + + PR gold/20443 + * symtab.cc (Symbol_table::add_from_relobj): Handle NULL symbols, + which will be present for STT_SPARC_REGISTER. + (Symbol_table::add_from_pluginobj): Likewise. + (Symbol_table::add_from_dynobj): Likewise. + (Symbol_table::add_from_incrobj): Removed dead code. + +2016-08-10 James Clarke + + PR gold/20442 + * sparc.cc (Target_sparc::Relocate::relocate): R_SPARC_GOTDATA_OP_LOX10 + should fall back on R_SPARC_GOT10, not R_SPARC_GOT13. + +2016-08-10 James Clarke + + PR gold/20441 + * sparc.cc (Target_sparc::Scan::check_non_pic): Allow R_SPARC_32 on + sparc64. + 2016-06-29 Cary Coutant -gold/ PR gold/20310 * testsuite/dynamic_list.sh: Remove check for _ZdlPv. diff --git a/gold/i386.cc b/gold/i386.cc index 28864cd..ec515c4 100644 --- a/gold/i386.cc +++ b/gold/i386.cc @@ -2794,8 +2794,11 @@ Target_i386::Relocate::relocate(const Relocate_info<32, false>* relinfo, && r_type != elfcpp::R_386_PC32) || gsym == NULL || strcmp(gsym->name(), "___tls_get_addr") != 0) - gold_error_at_location(relinfo, relnum, rel.get_r_offset(), - _("missing expected TLS relocation")); + { + gold_error_at_location(relinfo, relnum, rel.get_r_offset(), + _("missing expected TLS relocation")); + this->skip_call_tls_get_addr_ = false; + } else { this->skip_call_tls_get_addr_ = false; diff --git a/gold/layout.cc b/gold/layout.cc index 376051d..d14f27b 100644 --- a/gold/layout.cc +++ b/gold/layout.cc @@ -2135,7 +2135,7 @@ void Layout::create_notes() { this->create_gold_note(); - this->create_executable_stack_info(); + this->create_stack_segment(); this->create_build_id(); } @@ -2785,7 +2785,7 @@ Layout::finalize(const Input_objects* input_objects, Symbol_table* symtab, if (load_seg != NULL) ehdr_start->set_output_segment(load_seg, Symbol::SEGMENT_START); else - ehdr_start->set_undefined(); + ehdr_start->set_undefined(); } // Set the file offsets of all the non-data sections we've seen so @@ -2985,25 +2985,29 @@ Layout::create_gold_note() // executable. Otherwise, if at least one input file a // .note.GNU-stack section, and some input file has no .note.GNU-stack // section, we use the target default for whether the stack should be -// executable. Otherwise, we don't generate a stack note. When -// generating a object file, we create a .note.GNU-stack section with -// the appropriate marking. When generating an executable or shared -// library, we create a PT_GNU_STACK segment. +// executable. If -z stack-size was used to set a p_memsz value for +// PT_GNU_STACK, we generate the segment regardless. Otherwise, we +// don't generate a stack note. When generating a object file, we +// create a .note.GNU-stack section with the appropriate marking. +// When generating an executable or shared library, we create a +// PT_GNU_STACK segment. void -Layout::create_executable_stack_info() +Layout::create_stack_segment() { bool is_stack_executable; if (parameters->options().is_execstack_set()) { is_stack_executable = parameters->options().is_stack_executable(); if (!is_stack_executable - && this->input_requires_executable_stack_ - && parameters->options().warn_execstack()) + && this->input_requires_executable_stack_ + && parameters->options().warn_execstack()) gold_warning(_("one or more inputs require executable stack, " - "but -z noexecstack was given")); + "but -z noexecstack was given")); } - else if (!this->input_with_gnu_stack_note_) + else if (!this->input_with_gnu_stack_note_ + && (!parameters->options().user_set_stack_size() + || parameters->options().relocatable())) return; else { @@ -3032,7 +3036,12 @@ Layout::create_executable_stack_info() int flags = elfcpp::PF_R | elfcpp::PF_W; if (is_stack_executable) flags |= elfcpp::PF_X; - this->make_output_segment(elfcpp::PT_GNU_STACK, flags); + Output_segment* seg = + this->make_output_segment(elfcpp::PT_GNU_STACK, flags); + seg->set_size(parameters->options().stack_size()); + // BFD lets targets override this default alignment, but the only + // targets that do so are ones that Gold does not support so far. + seg->set_minimum_p_align(16); } } @@ -3718,7 +3727,9 @@ Layout::set_segment_offsets(const Target* target, Output_segment* load_seg, p != this->segment_list_.end(); ++p) { - if ((*p)->type() != elfcpp::PT_LOAD) + // PT_GNU_STACK was set up correctly when it was created. + if ((*p)->type() != elfcpp::PT_LOAD + && (*p)->type() != elfcpp::PT_GNU_STACK) (*p)->set_offset((*p)->type() == elfcpp::PT_GNU_RELRO ? increase_relro : 0); diff --git a/gold/layout.h b/gold/layout.h index c369fef..b2d699f 100644 --- a/gold/layout.h +++ b/gold/layout.h @@ -1037,9 +1037,9 @@ class Layout void create_gold_note(); - // Record whether the stack must be executable. + // Record whether the stack must be executable, and a user-supplied size. void - create_executable_stack_info(); + create_stack_segment(); // Create a build ID note if needed. void diff --git a/gold/options.h b/gold/options.h index 23c9658..4c5b2ae 100644 --- a/gold/options.h +++ b/gold/options.h @@ -647,7 +647,7 @@ class General_options DEFINE_bool(apply_dynamic_relocs, options::TWO_DASHES, '\0', true, N_("Apply link-time values for dynamic relocations (default)"), N_("(aarch64 only) Do not apply link-time values " - "for dynamic relocations")); + "for dynamic relocations")); DEFINE_bool(as_needed, options::TWO_DASHES, '\0', false, N_("Only set DT_NEEDED for shared libraries if used"), @@ -1293,7 +1293,7 @@ class General_options N_("Mark output as requiring executable stack"), NULL); DEFINE_bool(global, options::DASH_Z, '\0', false, N_("Make symbols in DSO available for subsequently loaded " - "objects"), NULL); + "objects"), NULL); DEFINE_bool(initfirst, options::DASH_Z, '\0', false, N_("Mark DSO to be initialized first at runtime"), NULL); @@ -1339,6 +1339,8 @@ class General_options DEFINE_bool(relro, options::DASH_Z, '\0', DEFAULT_LD_Z_RELRO, N_("Where possible mark variables read-only after relocation"), N_("Don't mark variables read-only after relocation")); + DEFINE_uint64(stack_size, options::DASH_Z, '\0', 0, + N_("Set PT_GNU_STACK segment p_memsz to SIZE"), N_("SIZE")); DEFINE_bool(text, options::DASH_Z, '\0', false, N_("Do not permit relocations in read-only segments"), N_("Permit relocations in read-only segments (default)")); diff --git a/gold/output.h b/gold/output.h index d8a8aaa..6b9186b 100644 --- a/gold/output.h +++ b/gold/output.h @@ -2499,7 +2499,7 @@ class Output_data_got : public Output_data_got_base // entry. bool add_local(Relobj* object, unsigned int sym_index, unsigned int got_type, - uint64_t addend); + uint64_t addend); // Like add_local, but use the PLT offset of the local symbol if it // has one. @@ -2643,7 +2643,7 @@ class Output_data_got : public Output_data_got_base // Create a local symbol entry plus addend. Got_entry(Relobj* object, unsigned int local_sym_index, - bool use_plt_or_tls_offset, uint64_t addend) + bool use_plt_or_tls_offset, uint64_t addend) : local_sym_index_(local_sym_index), use_plt_or_tls_offset_(use_plt_or_tls_offset), addend_(addend) { @@ -4796,6 +4796,13 @@ class Output_segment this->min_p_align_ = align; } + // Set the memory size of this segment. + void + set_size(uint64_t size) + { + this->memsz_ = size; + } + // Set the offset of this segment based on the section. This should // only be called for a non-PT_LOAD segment. void diff --git a/gold/script-sections.cc b/gold/script-sections.cc index 96c68de..bf25391 100644 --- a/gold/script-sections.cc +++ b/gold/script-sections.cc @@ -244,10 +244,10 @@ Memory_region::attributes_compatible(elfcpp::Elf_Xword flags, attrs &= ~ (attrs & - attrs); } while (attrs != 0); - + return match; } - + // Print a memory region. void @@ -1503,7 +1503,7 @@ class Input_section_info private: // Input section, can be a relaxed section. Output_section::Input_section input_section_; - // Name of the section. + // Name of the section. std::string section_name_; // Section size. uint64_t size_; @@ -1545,7 +1545,7 @@ Input_section_sorter::get_init_priority(const char* name) // GCC uses the following section names for the init_priority // attribute with numerical values 101 and 65535 inclusive. A // lower value means a higher priority. - // + // // 1: .init_array.NNNN/.fini_array.NNNN: Where NNNN is the // decimal numerical value of the init_priority attribute. // The order of execution in .init_array is forward and @@ -1666,7 +1666,7 @@ Output_section_element_input::set_section_addresses( while (p != input_sections->end()) { Relobj* relobj = p->relobj(); - unsigned int shndx = p->shndx(); + unsigned int shndx = p->shndx(); Input_section_info isi(*p); // Calling section_name and section_addralign is not very @@ -1758,7 +1758,7 @@ Output_section_element_input::set_section_addresses( uint64_t this_subalign = sis.addralign(); if (!sis.is_input_section()) - sis.output_section_data()->finalize_data_size(); + sis.output_section_data()->finalize_data_size(); uint64_t data_size = sis.data_size(); if (this_subalign < subalign) { @@ -2029,7 +2029,7 @@ class Output_section_definition : public Sections_element void set_section_vma(Expression* address) { this->address_ = address; } - + void set_section_lma(Expression* address) { this->load_address_ = address; } @@ -2037,7 +2037,7 @@ class Output_section_definition : public Sections_element const std::string& get_section_name() const { return this->name_; } - + private: static const char* script_section_type_name(Script_section_type); @@ -2402,9 +2402,9 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab, uint64_t old_load_address = *load_address; // If input section sorting is requested via --section-ordering-file or - // linker plugins, then do it here. This is important because we want + // linker plugins, then do it here. This is important because we want // any sorting specified in the linker scripts, which will be done after - // this, to take precedence. The final order of input sections is then + // this, to take precedence. The final order of input sections is then // guaranteed to be according to the linker script specification. if (this->output_section_ != NULL && this->output_section_->input_section_order_specified()) @@ -2495,7 +2495,7 @@ Output_section_definition::set_section_addresses(Symbol_table* symtab, // The LMA address was explicitly set to the given region. laddr = lma_region->get_current_address()->eval(symtab, layout, false); - else + else { // We are not going to use the discovered lma_region, so // make sure that we do not update it in the code below. @@ -2987,9 +2987,9 @@ Orphan_output_section::set_section_addresses(Symbol_table*, Layout*, address = align_address(address, this->os_->addralign()); // If input section sorting is requested via --section-ordering-file or - // linker plugins, then do it here. This is important because we want + // linker plugins, then do it here. This is important because we want // any sorting specified in the linker scripts, which will be done after - // this, to take precedence. The final order of input sections is then + // this, to take precedence. The final order of input sections is then // guaranteed to be according to the linker script specification. if (this->os_ != NULL && this->os_->input_section_order_specified()) @@ -3023,7 +3023,7 @@ Orphan_output_section::set_section_addresses(Symbol_table*, Layout*, { uint64_t addralign = p->addralign(); if (!p->is_input_section()) - p->output_section_data()->finalize_data_size(); + p->output_section_data()->finalize_data_size(); uint64_t size = p->data_size(); address = align_address(address, addralign); this->os_->add_script_input_section(*p); @@ -3605,7 +3605,7 @@ Output_segment* Script_sections::set_section_addresses(Symbol_table* symtab, Layout* layout) { gold_assert(this->saw_sections_clause_); - + // Implement ONLY_IF_RO/ONLY_IF_RW constraints. These are a pain // for our representation. for (Sections_elements::iterator p = this->sections_elements_->begin(); @@ -3674,7 +3674,7 @@ Script_sections::set_section_addresses(Symbol_table* symtab, Layout* layout) Output_section* os = (*p)->get_output_section(); // Handle -Ttext, -Tdata and -Tbss options. We do this by looking for - // the special sections by names and doing dot assignments. + // the special sections by names and doing dot assignments. if (use_tsection_options && os != NULL && (os->flags() & elfcpp::SHF_ALLOC) != 0) @@ -3703,7 +3703,7 @@ Script_sections::set_section_addresses(Symbol_table* symtab, Layout* layout) (*p)->set_section_addresses(symtab, layout, &dot_value, &dot_alignment, &load_address); - } + } if (this->phdrs_elements_ != NULL) { @@ -3890,7 +3890,7 @@ Script_sections::create_segments(Layout* layout, uint64_t dot_alignment) layout->get_allocated_sections(§ions); // Sort the sections by address. - std::stable_sort(sections.begin(), sections.end(), + std::stable_sort(sections.begin(), sections.end(), Sort_output_sections(this->sections_elements_)); this->create_note_and_tls_segments(layout, §ions); @@ -4217,7 +4217,7 @@ Script_sections::attach_sections_using_phdrs_clause(Layout* layout) // Output sections in the script which do not list segments are // attached to the same set of segments as the immediately preceding // output section. - + String_list* phdr_names = NULL; bool load_segments_only = false; for (Sections_elements::const_iterator p = this->sections_elements_->begin(); @@ -4262,7 +4262,7 @@ Script_sections::attach_sections_using_phdrs_clause(Layout* layout) // filtering. if (old_phdr_names != phdr_names) load_segments_only = false; - + // If this is an orphan section--one that was not explicitly // mentioned in the linker script--then it should not inherit // any segment type other than PT_LOAD. Otherwise, e.g., the @@ -4459,6 +4459,7 @@ Script_sections::release_segments() ++p) (*p)->release_segment(); } + this->segments_created_ = false; } // Print the SECTIONS clause to F for debugging. diff --git a/gold/script.cc b/gold/script.cc index d6aa7b2..bb8b437 100644 --- a/gold/script.cc +++ b/gold/script.cc @@ -1755,6 +1755,7 @@ script_keyword_parsecodes[] = { "FLOAT", FLOAT }, { "FORCE_COMMON_ALLOCATION", FORCE_COMMON_ALLOCATION }, { "GROUP", GROUP }, + { "HIDDEN", HIDDEN }, { "HLL", HLL }, { "INCLUDE", INCLUDE }, { "INFO", INFO }, @@ -2696,7 +2697,7 @@ script_add_library(void* closurev, const char* name, size_t length) if (name_string[0] != 'l') gold_error(_("library name must be prefixed with -l")); - + Input_file_argument file(name_string.c_str() + 1, Input_file_argument::INPUT_FILE_TYPE_LIBRARY, "", false, diff --git a/gold/sparc.cc b/gold/sparc.cc index dc4612d..8e66b77 100644 --- a/gold/sparc.cc +++ b/gold/sparc.cc @@ -2150,6 +2150,7 @@ Target_sparc::Scan::check_non_pic(Relobj* object, unsigned int case elfcpp::R_SPARC_RELATIVE: case elfcpp::R_SPARC_IRELATIVE: case elfcpp::R_SPARC_COPY: + case elfcpp::R_SPARC_32: case elfcpp::R_SPARC_64: case elfcpp::R_SPARC_GLOB_DAT: case elfcpp::R_SPARC_JMP_SLOT: @@ -3468,6 +3469,13 @@ Target_sparc::Relocate::relocate( Reloc::lo10(view, object, psymval, addend); break; + case elfcpp::R_SPARC_GOTDATA_OP_LOX10: + if (gdop_valid) + { + Reloc::gdop_lox10(view, got_offset); + break; + } + /* Fall through. */ case elfcpp::R_SPARC_GOT10: Reloc::lo10(view, got_offset, addend); break; @@ -3486,13 +3494,6 @@ Target_sparc::Relocate::relocate( } break; - case elfcpp::R_SPARC_GOTDATA_OP_LOX10: - if (gdop_valid) - { - Reloc::gdop_lox10(view, got_offset); - break; - } - /* Fall through. */ case elfcpp::R_SPARC_GOT13: Reloc::rela32_13(view, got_offset, addend); break; diff --git a/gold/symtab.cc b/gold/symtab.cc index 5ce5c31..c872f47 100644 --- a/gold/symtab.cc +++ b/gold/symtab.cc @@ -882,6 +882,7 @@ Symbol_table::define_default_version(Sized_symbol* sym, ; else if (pdef->second->is_from_dynobj() && sym->is_from_dynobj() + && pdef->second->is_defined() && pdef->second->object() != sym->object()) ; else @@ -1325,6 +1326,9 @@ Symbol_table::add_from_relobj( res = this->add_from_object(relobj, name, name_key, ver, ver_key, is_default_version, *psym, st_shndx, is_ordinary, orig_st_shndx); + + if (res == NULL) + continue; if (is_forced_local) this->force_local(res); @@ -1406,6 +1410,9 @@ Symbol_table::add_from_pluginobj( is_default_version, *sym, st_shndx, is_ordinary, st_shndx); + if (res == NULL) + return NULL; + if (is_forced_local) this->force_local(res); @@ -1602,6 +1609,9 @@ Symbol_table::add_from_dynobj( } } + if (res == NULL) + continue; + // Note that it is possible that RES was overridden by an // earlier object, in which case it can't be aliased here. if (st_shndx != elfcpp::SHN_UNDEF @@ -1640,7 +1650,6 @@ Symbol_table::add_from_incrobj( Stringpool::Key ver_key = 0; bool is_default_version = false; - bool is_forced_local = false; Stringpool::Key name_key; name = this->namepool_.add(name, true, &name_key); @@ -1650,9 +1659,6 @@ Symbol_table::add_from_incrobj( is_default_version, *sym, st_shndx, is_ordinary, st_shndx); - if (is_forced_local) - this->force_local(res); - return res; } diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index c8d3093..3b97673 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -1192,11 +1192,11 @@ pr20216a.so: pr20216_gd.o pr20216_ld.o gcctestdir/ld pr20216b.so: pr20216_def.o gcctestdir/ld $(LINK) -Bgcctestdir/ -shared pr20216_def.o -pr20216_gd.o: pr20216_gd.S - $(COMPILE) -c -o $@ $< +pr20216_gd.o: pr20216_gd.S gcctestdir/as + $(COMPILE) -Bgcctestdir/ -c -o $@ $< -pr20216_ld.o: pr20216_ld.S - $(COMPILE) -c -o $@ $< +pr20216_ld.o: pr20216_ld.S gcctestdir/as + $(COMPILE) -Bgcctestdir/ -c -o $@ $< endif DEFAULT_TARGET_X86_64_OR_X32 @@ -1297,11 +1297,11 @@ pr20308a.so: pr20308_gd.o pr20308_ld.o gcctestdir/ld pr20308b.so: pr20308_def.o gcctestdir/ld $(LINK) -Bgcctestdir/ -shared pr20308_def.o -pr20308_gd.o: pr20308_gd.S - $(COMPILE) -c -o $@ $< +pr20308_gd.o: pr20308_gd.S gcctestdir/as + $(COMPILE) -Bgcctestdir/ -c -o $@ $< -pr20308_ld.o: pr20308_ld.S - $(COMPILE) -c -o $@ $< +pr20308_ld.o: pr20308_ld.S gcctestdir/as + $(COMPILE) -Bgcctestdir/ -c -o $@ $< endif DEFAULT_TARGET_I386 diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 4185287..bb6f44d 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -6145,11 +6145,11 @@ uninstall-am: @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20216b.so: pr20216_def.o gcctestdir/ld @DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -shared pr20216_def.o -@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20216_gd.o: pr20216_gd.S -@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $< +@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20216_gd.o: pr20216_gd.S gcctestdir/as +@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -Bgcctestdir/ -c -o $@ $< -@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20216_ld.o: pr20216_ld.S -@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $< +@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20216_ld.o: pr20216_ld.S gcctestdir/as +@DEFAULT_TARGET_X86_64_OR_X32_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -Bgcctestdir/ -c -o $@ $< @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@i386_mov_to_lea1.o: i386_mov_to_lea1.s @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(TEST_AS) --32 -o $@ $< @@ -6200,11 +6200,11 @@ uninstall-am: @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20308b.so: pr20308_def.o gcctestdir/ld @DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(LINK) -Bgcctestdir/ -shared pr20308_def.o -@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20308_gd.o: pr20308_gd.S -@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $< +@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20308_gd.o: pr20308_gd.S gcctestdir/as +@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -Bgcctestdir/ -c -o $@ $< -@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20308_ld.o: pr20308_ld.S -@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -c -o $@ $< +@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@pr20308_ld.o: pr20308_ld.S gcctestdir/as +@DEFAULT_TARGET_I386_TRUE@@GCC_TRUE@@NATIVE_LINKER_TRUE@ $(COMPILE) -Bgcctestdir/ -c -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@many_sections_define.h: @GCC_TRUE@@NATIVE_LINKER_TRUE@ (for i in `seq 1 70000`; do \ @GCC_TRUE@@NATIVE_LINKER_TRUE@ echo "int var_$$i __attribute__((section(\"section_$$i\"))) = $$i;"; \ diff --git a/gold/x86_64.cc b/gold/x86_64.cc index 6aa489a..8d494ea 100644 --- a/gold/x86_64.cc +++ b/gold/x86_64.cc @@ -3505,6 +3505,7 @@ Target_x86_64::Relocate::relocate( if (this->skip_call_tls_get_addr_) { if ((r_type != elfcpp::R_X86_64_PLT32 + && r_type != elfcpp::R_X86_64_GOTPCREL && r_type != elfcpp::R_X86_64_GOTPCRELX && r_type != elfcpp::R_X86_64_PLT32_BND && r_type != elfcpp::R_X86_64_PC32_BND @@ -3514,6 +3515,7 @@ Target_x86_64::Relocate::relocate( { gold_error_at_location(relinfo, relnum, rela.get_r_offset(), _("missing expected TLS relocation")); + this->skip_call_tls_get_addr_ = false; } else { diff --git a/gold/yyscript.y b/gold/yyscript.y index 7e6bd27..38831d5 100644 --- a/gold/yyscript.y +++ b/gold/yyscript.y @@ -137,6 +137,7 @@ %token FORCE_COMMON_ALLOCATION %token GLOBAL /* global */ %token GROUP +%token HIDDEN %token HLL %token INCLUDE %token INHIBIT_COMMON_ALLOCATION @@ -864,6 +865,8 @@ assignment: Expression_ptr e = script_exp_binary_bitwise_or(s, $3); script_set_symbol(closure, $1.value, $1.length, e, 0, 0); } + | HIDDEN '(' string '=' parse_exp ')' + { script_set_symbol(closure, $3.value, $3.length, $5, 0, 1); } | PROVIDE '(' string '=' parse_exp ')' { script_set_symbol(closure, $3.value, $3.length, $5, 1, 0); } | PROVIDE_HIDDEN '(' string '=' parse_exp ')' diff --git a/gprof/ChangeLog b/gprof/ChangeLog index a02b3ce..19c596a 100644 --- a/gprof/ChangeLog +++ b/gprof/ChangeLog @@ -2,6 +2,10 @@ * configure: Regenerate. +2016-08-03 Tristan Gingold + + * configure: Regenerate. + 2016-07-01 Tristan Gingold * configure: Regenerate. diff --git a/gprof/configure b/gprof/configure index 4c17248..bf3ecaa 100755 --- a/gprof/configure +++ b/gprof/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for gprof 2.27. +# Generated by GNU Autoconf 2.64 for gprof 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gprof' PACKAGE_TARNAME='gprof' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='gprof 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='gprof 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1301,7 +1301,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gprof 2.27 to adapt to many kinds of systems. +\`configure' configures gprof 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1372,7 +1372,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gprof 2.27:";; + short | recursive ) echo "Configuration of gprof 2.27.0:";; esac cat <<\_ACEOF @@ -1478,7 +1478,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gprof configure 2.27 +gprof configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1843,7 +1843,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gprof $as_me 2.27, which was +It was created by gprof $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3652,7 +3652,7 @@ fi # Define the identity of the package. PACKAGE='gprof' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -12743,7 +12743,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gprof $as_me 2.27, which was +This file was extended by gprof $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -12807,7 +12807,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -gprof config.status 2.27 +gprof config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/ld/ChangeLog b/ld/ChangeLog index a57cd66..6cc35c7 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,56 @@ +2016-10-14 Alan Modra + + * scripttempl/DWARF.sc: Add .debug_addr. + +2016-10-10 Christophe Lyon + + Backport from mainline + 2016-09-28 Christophe Lyon + + PR ld/20608 + * testsuite/ld-arm/arm-elf.exp: Handle new testcase. + * testsuite/ld-arm/farcall-mixed-app2.d: New file. + * testsuite/ld-arm/farcall-mixed-app2.r: Likewise. + * testsuite/ld-arm/farcall-mixed-app2.s: Likewise. + * testsuite/ld-arm/farcall-mixed-app2.sym: Likewise. + +2016-09-06 Senthil Kumar Selvaraj + + Backport from mainline + 2016-09-02 Senthil Kumar Selvaraj + + PR ld/20545 + * testsuite/ld-avr/avr-prop-7.d: New test. + * testsuite/ld-avr/avr-prop-7.s: New test. + * testsuite/ld-avr/avr-prop-8.d: New test. + * testsuite/ld-avr/avr-prop-8.s: New test. + +2016-08-09 Roland McGrath + + * emulparams/armelf.sh (GENERATE_PIE_SCRIPT): Set to yes. + +2016-08-02 Nick Clifton + + PR ld/17739 + * emulparams/shelf.sh (CHECK_RELOCS_AFTER_OPEN_INPUT): Define with + valye 'yes'. + * emulparams/shelf32.sh: Likewise. + * emulparams/shelf32.sh: Likewise. + * emulparams/shelf_nto.sh: Likewise. + * emulparams/shelf_nto.sh: Likewise. + * emulparams/shelf_vxworks.sh: Likewise. + * emulparams/shelf_vxworks.sh: Likewise. + * emulparams/shlelf32_linux.sh: Likewise. + * emulparams/shlelf32_linux.sh: Likewise. + * emulparams/shlelf_linux.sh: Likewise. + * emulparams/shlelf_linux.sh: Likewise. + * emulparams/shlelf_nto.sh: Likewise. + * emulparams/shlelf_nto.sh: Likewise. + +2016-08-03 Tristan Gingold + + * configure: Regenerate. + 2016-08-03 Tristan Gingold * configure: Regenerate. diff --git a/ld/configure b/ld/configure index c6f871d..f9be51a 100755 --- a/ld/configure +++ b/ld/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for ld 2.27. +# Generated by GNU Autoconf 2.64 for ld 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ld' PACKAGE_TARNAME='ld' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='ld 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='ld 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1353,7 +1353,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ld 2.27 to adapt to many kinds of systems. +\`configure' configures ld 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1424,7 +1424,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ld 2.27:";; + short | recursive ) echo "Configuration of ld 2.27.0:";; esac cat <<\_ACEOF @@ -1549,7 +1549,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ld configure 2.27 +ld configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -2258,7 +2258,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ld $as_me 2.27, which was +It was created by ld $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -4068,7 +4068,7 @@ fi # Define the identity of the package. PACKAGE='ld' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -17769,7 +17769,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ld $as_me 2.27, which was +This file was extended by ld $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17833,7 +17833,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -ld config.status 2.27 +ld config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/ld/emulparams/armelf.sh b/ld/emulparams/armelf.sh index 672b208..f581c68 100644 --- a/ld/emulparams/armelf.sh +++ b/ld/emulparams/armelf.sh @@ -21,6 +21,7 @@ OTHER_READONLY_SECTIONS=" DATA_START_SYMBOLS='__data_start = . ;'; GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes ARCH=arm MACHINE= diff --git a/ld/emulparams/shelf.sh b/ld/emulparams/shelf.sh index 83680a6..d3f4752 100644 --- a/ld/emulparams/shelf.sh +++ b/ld/emulparams/shelf.sh @@ -11,6 +11,9 @@ MACHINE= TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes EMBEDDED=yes +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes # These are for compatibility with the COFF toolchain. ENTRY=start diff --git a/ld/emulparams/shelf32.sh b/ld/emulparams/shelf32.sh index 966bd30..bf362c5 100644 --- a/ld/emulparams/shelf32.sh +++ b/ld/emulparams/shelf32.sh @@ -11,6 +11,9 @@ ALIGNMENT=8 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes EMBEDDED=yes +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes DATA_START_SYMBOLS='PROVIDE (___data = .);' diff --git a/ld/emulparams/shelf_nto.sh b/ld/emulparams/shelf_nto.sh index c4d71aa..46efd87 100644 --- a/ld/emulparams/shelf_nto.sh +++ b/ld/emulparams/shelf_nto.sh @@ -9,3 +9,6 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes TEXT_START_SYMBOLS='_btext = .;' ENTRY=_start +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes diff --git a/ld/emulparams/shelf_vxworks.sh b/ld/emulparams/shelf_vxworks.sh index 77619cb..759ffac 100644 --- a/ld/emulparams/shelf_vxworks.sh +++ b/ld/emulparams/shelf_vxworks.sh @@ -14,6 +14,10 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes ENTRY=__start SYMPREFIX=_ +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes + GOT=".got ${RELOCATING-0} : { PROVIDE(__GLOBAL_OFFSET_TABLE_ = .); *(.got.plt) *(.got) }" diff --git a/ld/emulparams/shlelf32_linux.sh b/ld/emulparams/shlelf32_linux.sh index 81aea39..0327e57 100644 --- a/ld/emulparams/shlelf32_linux.sh +++ b/ld/emulparams/shlelf32_linux.sh @@ -13,7 +13,9 @@ ALIGNMENT=8 TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes - +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes DATA_START_SYMBOLS='PROVIDE (___data = .);' diff --git a/ld/emulparams/shlelf_linux.sh b/ld/emulparams/shlelf_linux.sh index c14aae2..4e2a581 100644 --- a/ld/emulparams/shlelf_linux.sh +++ b/ld/emulparams/shlelf_linux.sh @@ -12,6 +12,9 @@ MACHINE= TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes GENERATE_PIE_SCRIPT=yes +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes DATA_START_SYMBOLS='PROVIDE (__data_start = .);'; diff --git a/ld/emulparams/shlelf_nto.sh b/ld/emulparams/shlelf_nto.sh index 16f6508..f8ffc13 100644 --- a/ld/emulparams/shlelf_nto.sh +++ b/ld/emulparams/shlelf_nto.sh @@ -9,3 +9,6 @@ TEMPLATE_NAME=elf32 GENERATE_SHLIB_SCRIPT=yes TEXT_START_SYMBOLS='_btext = .;' ENTRY=_start +# PR 17739. Delay checking relocs until after all files have +# been opened and linker garbage collection has taken place. +CHECK_RELOCS_AFTER_OPEN_INPUT=yes diff --git a/ld/scripttempl/DWARF.sc b/ld/scripttempl/DWARF.sc index a8bcb97..cbb2999 100644 --- a/ld/scripttempl/DWARF.sc +++ b/ld/scripttempl/DWARF.sc @@ -42,4 +42,5 @@ cat <: + .*: e52de004 push {lr} ; \(str lr, \[sp, #-4\]!\) + .*: e59fe004 ldr lr, \[pc, #4\] ; .* + .*: e08fe00e add lr, pc, lr + .*: e5bef008 ldr pc, \[lr, #8\]! + .*: .* +.* : + .*: 4778 bx pc + .*: 46c0 nop ; \(mov r8, r8\) + .*: e28fc6.* add ip, pc, #.* + .*: e28cca.* add ip, ip, #.* ; 0x.* + .*: e5bcf.* ldr pc, \[ip, #.*\]!.* +.* : + .*: e28fc6.* add ip, pc, #.* + .*: e28cca.* add ip, ip, #.* ; 0x.* + .*: e5bcf.* ldr pc, \[ip, #.*\]!.* + +Disassembly of section .text: + +.* <_start>: + .*: e1a0c00d mov ip, sp + .*: e92dd800 push {fp, ip, lr, pc} + .*: eb000008 bl .* <__app_func_veneer> + .*: ebfffff6 bl .* + .*: ebfffff2 bl .* + .*: e89d6800 ldm sp, {fp, sp, lr} + .*: e12fff1e bx lr + .*: e1a00000 nop ; \(mov r0, r0\) + +.* : + .*: b500 push {lr} + .*: f7ff efde blx 81e0 + .*: bd00 pop {pc} + .*: 4770 bx lr + .*: 46c0 nop ; \(mov r8, r8\) +#... + +.* <__app_func_veneer>: + .*: e51ff004 ldr pc, \[pc, #-4\] ; 8234 <__app_func_veneer\+0x4> + .*: 02100000 .word 0x02100000 + +Disassembly of section .mid_thumb: + +.* : +#... + .*: f400 9000 b.w .* + .*: f000 b800 b.w .* <__lib_func2_from_thumb> + +.* <__lib_func2_from_thumb>: + .*: 4778 bx pc + .*: 46c0 nop ; \(mov r8, r8\) + .*: e51ff004 ldr pc, \[pc, #-4\] ; 10081e8 <__lib_func2_from_thumb\+0x8> + .*: 000081e0 .word 0x000081e0 + .*: 00000000 .word 0x00000000 + +Disassembly of section .far_arm: + +.* : + .*: e1a0c00d mov ip, sp + .*: e92dd800 push {fp, ip, lr, pc} + .*: eb000006 bl .* <__lib_func1_veneer> + .*: eb000007 bl .* <__lib_func2_veneer> + .*: e89d6800 ldm sp, {fp, sp, lr} + .*: e12fff1e bx lr + .*: e1a00000 nop ; \(mov r0, r0\) + .*: e1a00000 nop ; \(mov r0, r0\) + +.* : + .*: e12fff1e bx lr +#... + +.* <__lib_func1_veneer>: + .*: e51ff004 ldr pc, \[pc, #-4\] ; .* <__lib_func1_veneer\+0x4> + .*: 000081ec .word 0x000081ec +.* <__lib_func2_veneer>: + .*: e51ff004 ldr pc, \[pc, #-4\] ; .* <__lib_func2_veneer\+0x4> + .*: 000081e0 .word 0x000081e0 + +Disassembly of section .far_thumb: + +.* : + .*: b500 push {lr} + .*: f000 e806 blx .* <__lib_func2_from_thumb> + .*: bd00 pop {pc} + .*: 4770 bx lr + .*: 46c0 nop ; \(mov r8, r8\) +#... + +.* <__lib_func2_from_thumb>: + .*: e51ff004 ldr pc, \[pc, #-4\] ; 2200014 <__lib_func2_from_thumb\+0x4> + .*: 000081e0 .word 0x000081e0 diff --git a/ld/testsuite/ld-arm/farcall-mixed-app2.r b/ld/testsuite/ld-arm/farcall-mixed-app2.r new file mode 100644 index 0000000..910a361 --- /dev/null +++ b/ld/testsuite/ld-arm/farcall-mixed-app2.r @@ -0,0 +1,10 @@ + +tmpdir/farcall-mixed-app.*: file format elf32-(little|big)arm + +DYNAMIC RELOCATION RECORDS +OFFSET TYPE VALUE +.* R_ARM_COPY data_obj +.* R_ARM_JUMP_SLOT lib_func2 +.* R_ARM_JUMP_SLOT lib_func1 + + diff --git a/ld/testsuite/ld-arm/farcall-mixed-app2.s b/ld/testsuite/ld-arm/farcall-mixed-app2.s new file mode 100644 index 0000000..ee315e9 --- /dev/null +++ b/ld/testsuite/ld-arm/farcall-mixed-app2.s @@ -0,0 +1,76 @@ + .text + .p2align 4 + .globl _start +_start: + mov ip, sp + stmdb sp!, {r11, ip, lr, pc} + bl app_func + bl lib_func1 + bl lib_func2 + ldmia sp, {r11, sp, lr} + bx lr + + .p2align 4 + .globl app_tfunc_close + .type app_tfunc_close,%function + .thumb_func + .code 16 +app_tfunc_close: + push {lr} + bl lib_func2 + pop {pc} + bx lr + +@ We will place the section .mid_thumb at 0xFFFEF8. +@ Just far enough for XXXX + .section .mid_thumb, "xa" + + .p2align 4 + .globl mid_tfunc + .type mid_tfunc,%function + .thumb_func + .code 16 +mid_tfunc: + .syntax unified + .space 24 + b.w lib_func2 + b.w lib_func2 + +@ We will place the section .far_arm at 0x2100000. + .section .far_arm, "xa" + + .arm + .p2align 4 + .globl app_func + .type app_func,%function +app_func: + mov ip, sp + stmdb sp!, {r11, ip, lr, pc} + bl lib_func1 + bl lib_func2 + ldmia sp, {r11, sp, lr} + bx lr + + .arm + .p2align 4 + .globl app_func2 + .type app_func2,%function +app_func2: + bx lr + +@ We will place the section .far_thumb at 0x2200000. + .section .far_thumb, "xa" + + .p2align 4 + .globl app_tfunc + .type app_tfunc,%function + .thumb_func + .code 16 +app_tfunc: + push {lr} + bl lib_func2 + pop {pc} + bx lr + + .data + .long data_obj diff --git a/ld/testsuite/ld-arm/farcall-mixed-app2.sym b/ld/testsuite/ld-arm/farcall-mixed-app2.sym new file mode 100644 index 0000000..1d3bd1d --- /dev/null +++ b/ld/testsuite/ld-arm/farcall-mixed-app2.sym @@ -0,0 +1,15 @@ + +Symbol table for image: + +Num +Buc: +Value +Size +Type +Bind +Vis +Ndx +Name + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +11 _edata + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 __bss_start__ + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 _end + +.. +..: ........ +4 +OBJECT +GLOBAL +DEFAULT +12 data_obj + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 __bss_end__ + +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func1 + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +11 __data_start + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 __end__ + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 __bss_start + +.. +..: .......0 +0 +FUNC +GLOBAL +DEFAULT +15 app_func2 + +.. +..: 0*[^0]*.* +0 +FUNC +GLOBAL +DEFAULT +UND lib_func2 + +.. +..: ........ +0 +NOTYPE +GLOBAL +DEFAULT +12 _bss_end__ diff --git a/ld/testsuite/ld-avr/avr-prop-7.d b/ld/testsuite/ld-avr/avr-prop-7.d new file mode 100644 index 0000000..9f2cea9 --- /dev/null +++ b/ld/testsuite/ld-avr/avr-prop-7.d @@ -0,0 +1,15 @@ +#name: AVR .avr.prop, AVR_7_PCREL after align +#as: -mavrxmega2 -mlink-relax +#ld: -mavrxmega2 --relax +#source: avr-prop-7.s +#objdump: -S +#target: avr-*-* + +#... +00000000 <__ctors_end>: + 0: 04 d0 rcall .+8 ; 0xa + 2: 00 00 nop + 4: 00 00 nop + 6: 86 e0 ldi r24, 0x06 ; 6 + 8: f0 f7 brcc .-4 ; 0x6 <__ctors_end\+0x6> +#... diff --git a/ld/testsuite/ld-avr/avr-prop-7.s b/ld/testsuite/ld-avr/avr-prop-7.s new file mode 100644 index 0000000..38276ba --- /dev/null +++ b/ld/testsuite/ld-avr/avr-prop-7.s @@ -0,0 +1,8 @@ + call foo + nop + .p2align 1 + nop +.L618: + ldi r24,lo8(6) + brsh .L618 +foo: nop diff --git a/ld/testsuite/ld-avr/avr-prop-8.d b/ld/testsuite/ld-avr/avr-prop-8.d new file mode 100644 index 0000000..2905f98 --- /dev/null +++ b/ld/testsuite/ld-avr/avr-prop-8.d @@ -0,0 +1,13 @@ +#name: AVR .avr.prop, AVR_7_PCREL just before align +#as: -mavrxmega2 -mlink-relax +#ld: -mavrxmega2 --relax +#source: avr-prop-8.s +#objdump: -S +#target: avr-*-* + +#... +00000000 <__ctors_end>: + 0: ff cf rjmp .-2 ; 0x0 <__ctors_end> + 2: fe df rcall .-4 ; 0x0 <__ctors_end> + 4: f8 f7 brcc .-2 ; 0x4 <__ctors_end\+0x4> +#... diff --git a/ld/testsuite/ld-avr/avr-prop-8.s b/ld/testsuite/ld-avr/avr-prop-8.s new file mode 100644 index 0000000..34554f2 --- /dev/null +++ b/ld/testsuite/ld-avr/avr-prop-8.s @@ -0,0 +1,7 @@ +foo: + jmp foo + call foo +.L1: + brsh .L1 +.p2align 1 + nop diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index c420bdd..43841f5 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,26 @@ +2016-09-16 Peter Bergner + + Apply from master. + 2016-09-14 Peter Bergner + + * ppc-opc.c (powerpc_opcodes) : New mnemonic. + : Delete mnemonics. + : Rename mnemonic from ... + : ...to this. + : Change to a X form instruction. + : Change to 1 operand form. + : Delete mnemonic. + : Rename mnemonic from ... + : ...to this. + : Delete mnemonics. + : Rename mnemonic from ... + : ...to this. + +2016-08-03 Tristan Gingold + + * configure: Regenerate. + 2016-08-03 Tristan Gingold * configure: Regenerate. diff --git a/opcodes/configure b/opcodes/configure index 5a4da06..f615634 100755 --- a/opcodes/configure +++ b/opcodes/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for opcodes 2.27. +# Generated by GNU Autoconf 2.64 for opcodes 2.27.0. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software @@ -556,8 +556,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='opcodes' PACKAGE_TARNAME='opcodes' -PACKAGE_VERSION='2.27' -PACKAGE_STRING='opcodes 2.27' +PACKAGE_VERSION='2.27.0' +PACKAGE_STRING='opcodes 2.27.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1321,7 +1321,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures opcodes 2.27 to adapt to many kinds of systems. +\`configure' configures opcodes 2.27.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1392,7 +1392,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of opcodes 2.27:";; + short | recursive ) echo "Configuration of opcodes 2.27.0:";; esac cat <<\_ACEOF @@ -1499,7 +1499,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -opcodes configure 2.27 +opcodes configure 2.27.0 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1909,7 +1909,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by opcodes $as_me 2.27, which was +It was created by opcodes $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -3718,7 +3718,7 @@ fi # Define the identity of the package. PACKAGE='opcodes' - VERSION='2.27' + VERSION='2.27.0' cat >>confdefs.h <<_ACEOF @@ -13260,7 +13260,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by opcodes $as_me 2.27, which was +This file was extended by opcodes $as_me 2.27.0, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13324,7 +13324,7 @@ Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -opcodes config.status 2.27 +opcodes config.status 2.27.0 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c index 8106ab7..7003e0c 100644 --- a/opcodes/ppc-opc.c +++ b/opcodes/ppc-opc.c @@ -3161,7 +3161,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"machhwu.", XO (4, 12,0,1), XO_MASK, MULHW, 0, {RT, RA, RB}}, {"ps_muls1", A (4, 13,0), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, {"ps_muls1.", A (4, 13,1), AFRB_MASK, PPCPS, 0, {FRT, FRA, FRC}}, -{"rldixor", VXASH(4,26), VXASH_MASK, POWER9, 0, {RA, RS, SH6, RB}}, {"ps_madds0", A (4, 14,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_madds0.", A (4, 14,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_madds1", A (4, 15,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, @@ -3203,8 +3202,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"ps_msub.", A (4, 28,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_madd", A (4, 29,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"ps_madd.", A (4, 29,1), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, -{"xor3", VXA(4, 54), VXA_MASK, POWER9, 0, {RA, RS, RB, RC}}, -{"nandxor", VXA(4, 55), VXA_MASK, POWER9, 0, {RA, RS, RB, RC}}, {"vpermr", VXA(4, 59), VXA_MASK, PPCVEC3, 0, {VD, VA, VB, VC}}, {"ps_nmsub", A (4, 30,0), A_MASK, PPCPS, 0, {FRT, FRA, FRC, FRB}}, {"vaddeuqm", VXA(4, 60), VXA_MASK, PPCVEC2, 0, {VD, VA, VB, VC}}, @@ -4943,8 +4940,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"dcbfep", XRT(31,127,0), XRT_MASK, E500MC|PPCA2, 0, {RA0, RB}}, -{"setb", VX(31,256), VXVB_MASK|(3<<16), POWER9, 0, {RT, BFA}}, -{"setbool", VX(31,257), VXVB_MASK, POWER9, 0, {RT, BA}}, +{"setb", X(31,128), XRB_MASK|(3<<16), POWER9, 0, {RT, BFA}}, {"wrtee", X(31,131), XRARB_MASK, PPC403|BOOKE|PPCA2|PPC476, 0, {RS}}, @@ -4994,8 +4990,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"prtyw", X(31,154), XRB_MASK, POWER6|PPCA2|PPC476, 0, {RA, RS}}, -{"brw", X(31,155), XRB_MASK, POWER9, 0, {RA, RS}}, - {"stdepx", X(31,157), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, {"stwepx", X(31,159), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, @@ -5008,7 +5002,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"sthfcmx", APU(31,167,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}}, {"addex", ZRC(31,170,0), Z2_MASK, POWER9, 0, {RT, RA, RB, CY}}, -{"addex.", ZRC(31,170,1), Z2_MASK, POWER9, 0, {RT, RA, RB, CY}}, {"msgclrp", XRTRA(31,174,0,0), XRTRA_MASK, POWER8, 0, {RB}}, {"dcbtlse", X(31,174), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}}, @@ -5033,8 +5026,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"prtyd", X(31,186), XRB_MASK, POWER6|PPCA2, 0, {RA, RS}}, -{"brd", X(31,187), XRB_MASK, POWER9, 0, {RA, RS}}, - {"cmprb", X(31,192), XCMP_MASK, POWER9, 0, {BF, L, RA, RB}}, {"icblq.", XRC(31,198,1), X_MASK, E6500, 0, {CT, RA0, RB}}, @@ -5073,8 +5064,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"sleq", XRC(31,217,0), X_MASK, M601, 0, {RA, RS, RB}}, {"sleq.", XRC(31,217,1), X_MASK, M601, 0, {RA, RS, RB}}, -{"brh", X(31,219), XRB_MASK, POWER9, 0, {RA, RS}}, - {"stbepx", X(31,223), X_MASK, E500MC|PPCA2, 0, {RS, RA0, RB}}, {"cmpeqb", X(31,224), XCMPL_MASK, POWER9, 0, {BF, RA, RB}}, @@ -5541,8 +5530,6 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"mtvsrdd", X(31,435), XX1_MASK, PPCVSX3, 0, {XT6, RA0, RB}}, -{"lwzmx", X(31,437), X_MASK, POWER9, 0, {RT, RA0, RB}}, - {"ecowx", X(31,438), X_MASK, PPC, E500|TITAN, {RT, RA0, RB}}, {"sthux", X(31,439), X_MASK, COM, 0, {RS, RAS, RB}}, @@ -5906,8 +5893,8 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"hwsync", XSYNC(31,598,0), 0xffffffff, POWER4, BOOKE|PPC476, {0}}, {"lwsync", XSYNC(31,598,1), 0xffffffff, PPC, E500, {0}}, {"ptesync", XSYNC(31,598,2), 0xffffffff, PPC64, 0, {0}}, -{"sync", X(31,598), XSYNCLE_MASK, POWER9|E6500, 0, {LS, ESYNC}}, -{"sync", X(31,598), XSYNC_MASK, PPCCOM, BOOKE|PPC476|POWER9, {LS}}, +{"sync", X(31,598), XSYNCLE_MASK, E6500, 0, {LS, ESYNC}}, +{"sync", X(31,598), XSYNC_MASK, PPCCOM, BOOKE|PPC476, {LS}}, {"msync", X(31,598), 0xffffffff, BOOKE|PPCA2|PPC476, 0, {0}}, {"sync", X(31,598), 0xffffffff, BOOKE|PPC476, E6500, {0}}, {"lwsync", X(31,598), 0xffffffff, E500, 0, {0}}, @@ -6072,8 +6059,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"lvsm", X(31,773), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, -{"copy_first", XOPL(31,774,1), XRT_MASK, POWER9, 0, {RA0, RB}}, -{"copy", X(31,774), XLRT_MASK, POWER9, 0, {RA0, RB, L}}, +{"copy", XOPL(31,774,1), XRT_MASK, POWER9, 0, {RA0, RB}}, {"stvepxl", X(31,775), X_MASK, PPCVEC2, 0, {VS, RA0, RB}}, {"lvlxl", X(31,775), X_MASK, CELL, 0, {VD, RA0, RB}}, @@ -6143,7 +6129,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"lvtlxl", X(31,837), X_MASK, PPCVEC2, 0, {VD, RA0, RB}}, -{"cp_abort", X(31,838), XRTRARB_MASK,POWER9, 0, {0}}, +{"cpabort", X(31,838), XRTRARB_MASK,POWER9, 0, {0}}, {"divo", XO(31,331,1,0), XO_MASK, M601, 0, {RT, RA, RB}}, {"divo.", XO(31,331,1,1), XO_MASK, M601, 0, {RT, RA, RB}}, @@ -6155,6 +6141,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"tlbsrx.", XRC(31,850,1), XRT_MASK, PPCA2, 0, {RA0, RB}}, +{"slbiag", X(31,850), XRARB_MASK, POWER9, 0, {RS}}, {"slbmfev", X(31,851), XRLA_MASK, POWER9, 0, {RT, RB, A_L}}, {"slbmfev", X(31,851), XRA_MASK, PPC64, POWER9, {RT, RB}}, @@ -6190,9 +6177,7 @@ const struct powerpc_opcode powerpc_opcodes[] = { {"extswsli", XS(31,445,0), XS_MASK, POWER9, 0, {RA, RS, SH6}}, {"extswsli.", XS(31,445,1), XS_MASK, POWER9, 0, {RA, RS, SH6}}, -{"paste", XRC(31,902,0), XLRT_MASK, POWER9, 0, {RA0, RB, L0}}, -{"paste_last", XRCL(31,902,1,1),XRT_MASK, POWER9, 0, {RA0, RB}}, -{"paste.", XRC(31,902,1), XLRT_MASK, POWER9, 0, {RA0, RB, L1}}, +{"paste.", XRCL(31,902,1,1),XRT_MASK, POWER9, 0, {RA0, RB}}, {"stvlxl", X(31,903), X_MASK, CELL, 0, {VS, RA0, RB}}, {"stdfcmux", APU(31,903,0), APU_MASK, PPC405, 0, {FCRT, RA, RB}},