branch-updates
authorMatthias Klose <doko@debian.org>
Thu, 21 Mar 2019 14:49:23 +0000 (14:49 +0000)
committerMatthias Klose <doko@debian.org>
Thu, 21 Mar 2019 14:49:23 +0000 (14:49 +0000)
# DP: updates from the binutils-2.31 branch

# git diff 0860693812fff944ab0602e72b762a4a2078da5b dba17838ab20a814e6c8ba51afe6962d1c400227

Gbp-Pq: Name branch-updates.diff

154 files changed:
bfd/ChangeLog
bfd/arc-got.h
bfd/bfd-in2.h
bfd/bfd.c
bfd/compress.c
bfd/development.sh
bfd/elf-properties.c
bfd/elf.c
bfd/elf32-arc.c
bfd/elf32-ppc.c
bfd/elf32-sparc.c
bfd/elf32-visium.c
bfd/elf64-ppc.c
bfd/elf64-sparc.c
bfd/elf64-x86-64.c
bfd/elflink.c
bfd/elfnn-aarch64.c
bfd/elfxx-x86.c
bfd/elfxx-x86.h
bfd/version.h
binutils/ChangeLog
binutils/readelf.c
binutils/testsuite/binutils-all/dw2-3.rS
binutils/testsuite/binutils-all/dw2-3.rt
gas/ChangeLog
gas/as.c
gas/config/tc-aarch64.c
gas/config/tc-hppa.c
gas/config/tc-i386.c
gas/config/tc-i386.h
gas/config/tc-visium.c
gas/testsuite/gas/aarch64/illegal-dotproduct.d [new file with mode: 0644]
gas/testsuite/gas/aarch64/illegal-dotproduct.l [new file with mode: 0644]
gas/testsuite/gas/aarch64/illegal-dotproduct.s [new file with mode: 0644]
gas/testsuite/gas/arm/undefined-insn-arm.d [new file with mode: 0644]
gas/testsuite/gas/arm/undefined-insn-thumb.d [new file with mode: 0644]
gas/testsuite/gas/arm/undefined-insn.s [new file with mode: 0644]
gas/testsuite/gas/i386/evex-no-scale-32.d [new file with mode: 0644]
gas/testsuite/gas/i386/evex-no-scale-32.s [new file with mode: 0644]
gas/testsuite/gas/i386/evex-no-scale-64.d [new file with mode: 0644]
gas/testsuite/gas/i386/evex-no-scale-64.s [new file with mode: 0644]
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel-2.d [new file with mode: 0644]
gas/testsuite/gas/i386/mixed-mode-reloc32.d
gas/testsuite/gas/i386/se1.d
gas/testsuite/gas/i386/se1.s
gas/testsuite/gas/i386/x86-64-gotpcrel-2.d [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-gotpcrel-2.s [new file with mode: 0644]
gas/testsuite/gas/i386/x86-64-se1.d
gas/testsuite/gas/i386/x86-64-se1.s
gas/testsuite/gas/i386/xmmword.l
gas/testsuite/gas/i386/xmmword.s
gas/testsuite/gas/visium/allinsn_gr6.d
gas/testsuite/gas/visium/allinsn_gr6.s
gas/testsuite/gas/visium/bra-1.d [new file with mode: 0644]
gas/testsuite/gas/visium/bra-1.s [new file with mode: 0644]
gas/testsuite/gas/visium/visium.exp
gold/ChangeLog
gold/merge.cc
gold/object.cc
gold/object.h
gold/options.h
gold/output.cc
gold/symtab.cc
gold/target.h
gold/x86_64.cc
include/ChangeLog
include/elf/arc-reloc.def
ld/ChangeLog
ld/po/bg.po
ld/testsuite/ld-aarch64/aarch64-elf.exp
ld/testsuite/ld-aarch64/erratum843419_tls_ie.d [new file with mode: 0644]
ld/testsuite/ld-aarch64/erratum843419_tls_ie.s [new file with mode: 0644]
ld/testsuite/ld-aarch64/ifunc-1-local.d
ld/testsuite/ld-aarch64/ifunc-1.d
ld/testsuite/ld-aarch64/ifunc-2-local.d
ld/testsuite/ld-aarch64/ifunc-2.d
ld/testsuite/ld-aarch64/ifunc-21.d
ld/testsuite/ld-aarch64/ifunc-3a.d
ld/testsuite/ld-aarch64/ifunc-9.d
ld/testsuite/ld-elf/dummy.s [new file with mode: 0644]
ld/testsuite/ld-elf/linux-x86.S [new file with mode: 0644]
ld/testsuite/ld-elf/linux-x86.exp [new file with mode: 0644]
ld/testsuite/ld-elf/pr23428.c [new file with mode: 0644]
ld/testsuite/ld-elf/sec64k.exp
ld/testsuite/ld-i386/abs-iamcu.d
ld/testsuite/ld-i386/abs.d
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/pr12718.d
ld/testsuite/ld-i386/pr12921.d
ld/testsuite/ld-i386/pr23486a.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr23486b.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr23854.d [new file with mode: 0644]
ld/testsuite/ld-i386/pr23854.s [new file with mode: 0644]
ld/testsuite/ld-i386/property-3.r
ld/testsuite/ld-i386/property-4.r
ld/testsuite/ld-i386/property-5.r
ld/testsuite/ld-i386/property-x86-ibt3a.d
ld/testsuite/ld-i386/property-x86-ibt3b.d
ld/testsuite/ld-i386/property-x86-shstk3a.d
ld/testsuite/ld-i386/property-x86-shstk3b.d
ld/testsuite/ld-ifunc/ifunc.exp
ld/testsuite/ld-linkonce/zeroeh.ld
ld/testsuite/ld-plugin/lto.exp
ld/testsuite/ld-plugin/pr23818.d [new file with mode: 0644]
ld/testsuite/ld-plugin/pr23818.t [new file with mode: 0644]
ld/testsuite/ld-plugin/pr23818a.c [new file with mode: 0644]
ld/testsuite/ld-plugin/pr23818b.c [new file with mode: 0644]
ld/testsuite/ld-powerpc/powerpc.exp
ld/testsuite/ld-powerpc/pr23937.d [new file with mode: 0644]
ld/testsuite/ld-powerpc/pr23937.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/tlsopt5.d
ld/testsuite/ld-powerpc/tlsopt5.s
ld/testsuite/ld-powerpc/tlsopt5.wf
ld/testsuite/ld-scripts/print-memory-usage.t
ld/testsuite/ld-scripts/size-2.t
ld/testsuite/ld-x86-64/abs-k1om.d
ld/testsuite/ld-x86-64/abs-l1om.d
ld/testsuite/ld-x86-64/abs.d
ld/testsuite/ld-x86-64/pr12718.d
ld/testsuite/ld-x86-64/pr12921.d
ld/testsuite/ld-x86-64/pr23486a-x32.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23486a.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23486a.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23486b-x32.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23486b.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23486b.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23854.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr23854.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr24151a-x32.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr24151a.d [new file with mode: 0644]
ld/testsuite/ld-x86-64/pr24151a.s [new file with mode: 0644]
ld/testsuite/ld-x86-64/property-3.r
ld/testsuite/ld-x86-64/property-4.r
ld/testsuite/ld-x86-64/property-5.r
ld/testsuite/ld-x86-64/property-x86-3.s
ld/testsuite/ld-x86-64/property-x86-ibt3a-x32.d
ld/testsuite/ld-x86-64/property-x86-ibt3a.d
ld/testsuite/ld-x86-64/property-x86-ibt3b-x32.d
ld/testsuite/ld-x86-64/property-x86-ibt3b.d
ld/testsuite/ld-x86-64/property-x86-shstk3a-x32.d
ld/testsuite/ld-x86-64/property-x86-shstk3a.d
ld/testsuite/ld-x86-64/property-x86-shstk3b-x32.d
ld/testsuite/ld-x86-64/property-x86-shstk3b.d
ld/testsuite/ld-x86-64/x86-64.exp
ld/testsuite/lib/ld-lib.exp
opcodes/ChangeLog
opcodes/aarch64-opc.c
opcodes/arm-dis.c
opcodes/i386-dis.c
opcodes/i386-opc.h
opcodes/i386-opc.tbl
opcodes/i386-tbl.h
opcodes/s390-opc.txt

index 5ec906aa8e83fe89f7851cf0dbda74e21a0bffa7..eb32e2dd679347e5c623e4fb76c1a378dc0608f9 100644 (file)
@@ -1,8 +1,235 @@
+2019-03-18  Alan Modra  <amodra@gmail.com>
+
+       PR 24355
+       * elf32-ppc.c (ppc_finish_symbols): Don't call write_glink_stub
+       for local iplt syms with ent->plt.offset == -1.  Remove ineffective
+       attempt at writing glink stubs only once.
+
+2019-02-18  Nick Clifton  <nickc@redhat.com>
+
+       Import from the mainline:
+       2018-11-27  Mark Wielaard  <mark@klomp.org>
+
+       PR binutils/23919
+       * bfd.c (bfd_update_compression_header): Explicitly set alignment.
+       (bfd_check_compression_header): Add uncompressed_alignment_power
+       argument. Check ch_addralign is a power of 2.
+       * bfd-in2.h: Regenerated.
+       * compress.c (bfd_compress_section_contents): Get and set
+       orig_uncompressed_alignment_pow if section is decompressed.
+       (bfd_is_section_compressed_with_header): Add and get
+       uncompressed_align_pow_p argument.
+       (bfd_is_section_compressed): Add uncompressed_align_power argument
+       to bfd_is_section_compressed_with_header call.
+       (bfd_init_section_decompress_status): Get and set
+       uncompressed_alignment_power.
+       * elf.c (_bfd_elf_make_section_from_shdr): Add
+       uncompressed_align_power argument to
+       bfd_is_section_compressed_with_header call.
+
+       2018-11-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/23919
+       * compress.c (bfd_is_section_compressed_with_header): Initialize
+       * uncompressed_align_pow_p to 0.
+
+2019-02-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/24151
+       * elf64-x86-64.c (elf_x86_64_need_pic): Check
+       SYMBOL_DEFINED_NON_SHARED_P instead of def_regular.
+       (elf_x86_64_relocate_section): Move PIC check for PC-relative
+       relocations to ...
+       (elf_x86_64_check_relocs): Here.
+       (elf_x86_64_finish_dynamic_symbol): Use SYMBOL_DEFINED_NON_SHARED_P
+       to check if a symbol is defined in a non-shared object.
+       * elfxx-x86.h (SYMBOL_DEFINED_NON_SHARED_P): New.
+
+2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR ld/18841
+       * elf32-sparc.c (elf32_sparc_reloc_type_class): Return
+       reloc_class_ifunc for ifunc symbols.
+       * elf64-sparc.c (elf64_sparc_reloc_type_class): Likewise.
+
+2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * elf32-visium.c (visium_elf_howto_parity_reloc): Minor tweak.
+       <R_VISIUM_PC16>: Use explicit range test to detect an overflow.
+
+2018-12-12  Alan Modra  <amodra@gmail.com>
+
+       Apply from master
+       2018-10-20  Alan Modra  <amodra@gmail.com>
+       PR 23788
+       * elf.c (section_match): Don't require a size match for SHT_SYMTAB
+       or SHT_STRTAB.
+
+2018-12-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23929
+       * elf-properties.c (_bfd_elf_link_setup_gnu_properties): Don't
+       merge .note.gnu.property section in IR inputs.
+
+2018-11-30  Alan Modra  <amodra@gmail.com>
+
+       PR 23937
+       * elf64-ppc.c (write_plt_relocs_for_local_syms): Don't add local
+       entry offset for ifuncs.
+
+2018-11-27  Tamar Christina  <tamar.christina@arm.com>
+
+       Backport from mainline
+       PR ld/23904
+       * elfnn-aarch64.c (_bfd_aarch64_adrp_p): Use existing constants.
+       (_bfd_aarch64_erratum_843419_branch_to_stub): Use _bfd_aarch64_adrp_p.
+       (struct erratum_835769_branch_to_stub_clear_data): New.
+       (_bfd_aarch64_erratum_843419_clear_stub): New.
+       (clear_erratum_843419_entry): New.
+       (elfNN_aarch64_tls_relax): Use it.
+       (elfNN_aarch64_relocate_section): Pass input_section.
+       (aarch64_map_one_stub): Handle branch type none as valid.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-11-09  Cupertino Miranda  <cmiranda@synopsys.com>
+       * arc-got.h (arc_got_entry_type_for_reloc): Changed to
+         correct static TLS relocs.
+       * elf32-arc.c (elf_arc_check_relocs): Introduced warning to
+         TLS relocs which require -fPIC.
+         (arc_create_forced_local_got_entries_for_tls): Created.
+         Traverses list of GOT entries to be resolved statically
+         when needed.
+         (elf_arc_finish_dynamic_sections): Changed. Calls
+         arc_create_forced_local_got_entries_for_tls for each known
+         possibly GOT symbol.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-11-09  Claudiu Zissulescu  <claziss@synopsys.com>
+       * arc-got.h (arc_get_local_got_ents): Revamp it; use
+       elf_local_got_ents to store the local got list.
+       (get_got_entry_list_for_symbo): Restructure it.
+       * elf32-arc.c (elf_arc_relocate_section): Correct the call to
+       get_got_entry_list_for_symbol.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-09-06  Cupertino Miranda <cmiranda@synopsys.com>
+       * arc-got.h (relocate_fix_got_relocs_for_got_info): Changed. Take
+       TLS section alignment in consideration for this relocation.
+       * elf32-arc.c (FINAL_SECTSTART): Added this formula macro.
+       (ARC_TLS_DTPOFF) Updated reloc to use new created macro instead.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-08-01  Cupertino Miranda <cmiranda@synopsys.com>
+       * arc-got.h (relocate_fix_got_relocs_for_got_info): Changed, fixed
+       TCB_SIZE offsize to include section alignment.
+       * elf32-arc.c (arc_special_overflow_checks): Likewise.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-03-02  Cupertino Miranda <cmiranda@synopsys.com>
+       * elf32-arc.c (elf_arc_check_relocs): Changed.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-03-02  Cupertino Miranda <cmiranda@synopsys.com>
+       * elf32-arc.c (elf_arc_check_relocs): Changed.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-03-02  Cupertino Miranda <cmiranda@synopsys.com>
+       * elf32-arc.c (elf_arc_finish_dynamic_symbol) Return FALSE in case
+       arc_htab is NULL.
+
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-03-02  Cupertino Miranda  <cmiranda@synopsys.com>a
+       * arc-got.h (get_got_entry_list_for_symbol): Changed.
+       * ef32-arc.c (struct elf_arc_link_hash_entry): Moved and changed.
+       (elf_arc_link_hash_newfunc): Changed.
+       (arc_elf_link_hash_table_create): Removed old initializations.
+       (elf_arc_relocate_section, elf_arc_finish_dynamic_symbol): Changed.
+
+2018-11-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23818
+       * elflink.c (_bfd_elf_link_assign_sym_version): Hide symbols
+       defined in discarded input sections.
+
+2018-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23499
+       * elf.c (_bfd_elf_get_symbol_version_string): Return
+       _("<corrupt>") for corrupt symbol version info.
+
+2018-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23499
+       * elflink.c (bfd_elf_record_link_assignment): Always clear
+       h->verinfo.verdef when overriding a dynamic definition.
+
+2018-08-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23428
+       * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): Don't
+       add X86_ISA_1_NEEDED property only if existing properties won't
+       be removed.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23486
+       * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Remove
+       GNU_PROPERTY_X86_ISA_1_USED if an input file doesn't have it.
+       (_bfd_x86_elf_link_setup_gnu_properties): Adding the
+       GNU_PROPERTY_X86_ISA_1_NEEDED, instead of
+       GNU_PROPERTY_X86_ISA_1_USED, property.
+
+2018-08-07  Alan Modra  <amodra@gmail.com>
+
+       * elf64-ppc.c (ppc64_elf_relocate_section): Don't skip first
+       instruction of __tls_get_addr_opt stub.
+       (plt_stub_size): Omit ALWAYS_EMIT_R2SAVE condition when
+       dealing with __tls_get_addr_opt stub.
+       (build_tls_get_addr_stub, ppc_size_one_stub): Likewise.
+
+2018-08-01  Alan Modra  <amodra@gmail.com>
+
+       * elf64-ppc.c (plt_stub_pad): Delay plt_stub_size call until needed.
+       (ppc_build_one_stub): Don't set stub_offset, instead assert that
+       it is sane.  Don't adjust stub_offset for alignment.  Adjust size
+       calculation.  Use "targ" temp when calculating offsets.
+       (ppc_size_one_stub): Set stub_offset here.  Use "targ" temp when
+       calculating offsets.  Adjust for alignment before setting
+       tls_get_addr_opt_bctrl.
+
+2018-07-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23428
+       * elfxx-x86.c (_bfd_x86_elf_link_setup_gnu_properties): If the
+       separate code program header is needed, make sure that the first
+       read-only PT_LOAD segment has no code by adding a
+       GNU_PROPERTY_X86_ISA_1_USED note.
+
+2018-07-18  Nick Clifton  <nickc@redhat.com>
+
+       * development.sh: Set to true.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
        * version.m4: Set to 2.31.1
-       * development.sh: Set to true.
+       * development.sh: Set to false.
        * configure: Regenerate.
        * po/bfd.pot: Regenerate.
 
index a86061bcb38f32a33cddb4b0531863c00d7851fc..253578b90c42cc4ce0b07924a76e1b6697dc7f90 100644 (file)
@@ -24,6 +24,9 @@
 
 #define TCB_SIZE (8)
 
+#define        align_power(addr, align)        \
+  (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
+
 enum tls_type_e
 {
   GOT_UNKNOWN = 0,
@@ -51,27 +54,26 @@ struct got_entry
   enum tls_got_entries existing_entries;
 };
 
+/* Return the local got list, if not defined, create an empty one.  */
+
 static struct got_entry **
 arc_get_local_got_ents (bfd * abfd)
 {
-  static struct got_entry **local_got_ents = NULL;
-
-  if (local_got_ents == NULL)
+  if (elf_local_got_ents (abfd) == NULL)
     {
-      size_t      size;
-      Elf_Internal_Shdr *symtab_hdr = &((elf_tdata (abfd))->symtab_hdr);
-
-      size = symtab_hdr->sh_info * sizeof (bfd_vma);
-      local_got_ents = (struct got_entry **)
-       bfd_alloc (abfd, sizeof (struct got_entry *) * size);
-      if (local_got_ents == NULL)
-       return FALSE;
-
-      memset (local_got_ents, 0, sizeof (struct got_entry *) * size);
-      elf_local_got_ents (abfd) = local_got_ents;
+      bfd_size_type amt = (elf_tdata (abfd)->symtab_hdr.sh_info
+                          * sizeof (*elf_local_got_ents (abfd)));
+      elf_local_got_ents (abfd) = bfd_zmalloc (amt);
+      if (elf_local_got_ents (abfd) == NULL)
+       {
+         _bfd_error_handler (_("%pB: cannot allocate memory for local "
+                               "GOT entries"), abfd);
+         bfd_set_error (bfd_error_bad_value);
+         return NULL;
+       }
     }
 
-  return local_got_ents;
+  return elf_local_got_ents (abfd);
 }
 
 static struct got_entry *
@@ -156,15 +158,15 @@ get_got_entry_list_for_symbol (bfd *abfd,
                               unsigned long r_symndx,
                               struct elf_link_hash_entry *h)
 {
-  if (h != NULL)
+  struct elf_arc_link_hash_entry *h1 =
+    ((struct elf_arc_link_hash_entry *) h);
+  if (h1 != NULL)
     {
-      return &h->got.glist;
+      return &h1->got_ents;
     }
   else
     {
-      struct got_entry **local_got_ents
-       = arc_get_local_got_ents (abfd);
-      return &local_got_ents[r_symndx];
+      return arc_get_local_got_ents (abfd) + r_symndx;
     }
 }
 
@@ -206,7 +208,7 @@ arc_got_entry_type_for_reloc (reloc_howto_type *howto)
                     __LINE__, name_for_global_symbol (H));             \
       }                                                                        \
     if (H)                                                             \
-      if (h->dynindx == -1 && !h->forced_local)                                \
+      if (H->dynindx == -1 && !H->forced_local)                                \
        if (! bfd_elf_link_record_dynamic_symbol (info, H))             \
          return FALSE;                                                 \
      htab->s##SECNAME->size += 4;                                      \
@@ -282,6 +284,7 @@ relocate_fix_got_relocs_for_got_info (struct got_entry **      list_p,
   BFD_ASSERT (entry);
 
   if (h == NULL
+      || h->forced_local == TRUE
       || (! elf_hash_table (info)->dynamic_sections_created
          || (bfd_link_pic (info)
              && SYMBOL_REFERENCES_LOCAL (info, h))))
@@ -329,23 +332,31 @@ relocate_fix_got_relocs_for_got_info (struct got_entry **    list_p,
                BFD_ASSERT (tls_sec && tls_sec->output_section);
                bfd_vma sec_vma = tls_sec->output_section->vma;
 
-               bfd_put_32 (output_bfd,
-                           sym_value - sec_vma,
+               if (h == NULL || h->forced_local
+                  || !elf_hash_table (info)->dynamic_sections_created)
+                 {
+                   bfd_put_32 (output_bfd,
+                           sym_value - sec_vma
+                           + (elf_hash_table (info)->dynamic_sections_created
+                              ? 0
+                              : (align_power (0,
+                                              tls_sec->alignment_power))),
                            htab->sgot->contents + entry->offset
                            + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
                               ? 4 : 0));
 
-               ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx "
-                          "@ %lx, for symbol %s\n",
-                          (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" :
-                           "GOT_TLS_IE"),
-                          (long) (sym_value - sec_vma),
-                          (long) (htab->sgot->output_section->vma
-                             + htab->sgot->output_offset->vma
-                             + entry->offset
-                             + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
-                                ? 4 : 0)),
-                          symbol_name);
+                   ARC_DEBUG ("arc_info: FIXED -> %s value = %#lx "
+                         "@ %lx, for symbol %s\n",
+                         (entry->type == GOT_TLS_GD ? "GOT_TLS_GD" :
+                          "GOT_TLS_IE"),
+                         (long) (sym_value - sec_vma),
+                         (long) (htab->sgot->output_section->vma
+                            + htab->sgot->output_offset
+                            + entry->offset
+                            + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
+                               ? 4 : 0)),
+                         symbol_name);
+                 }
              }
              break;
 
@@ -357,7 +368,10 @@ relocate_fix_got_relocs_for_got_info (struct got_entry **     list_p,
 
                bfd_put_32 (output_bfd,
                            sym_value - sec_vma
-                           + (elf_hash_table (info)->dynamic_sections_created ? 0 : TCB_SIZE),
+                           + (elf_hash_table (info)->dynamic_sections_created
+                              ? 0
+                              : (align_power (TCB_SIZE,
+                                              tls_sec->alignment_power))),
                            htab->sgot->contents + entry->offset
                            + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
                               ? 4 : 0));
@@ -368,7 +382,7 @@ relocate_fix_got_relocs_for_got_info (struct got_entry **      list_p,
                            "GOT_TLS_IE"),
                           (long) (sym_value - sec_vma),
                           (long) (htab->sgot->output_section->vma
-                             + htab->sgot->output_offset->vma
+                             + htab->sgot->output_offset
                              + entry->offset
                              + (entry->existing_entries == TLS_GOT_MOD_AND_OFF
                                 ? 4 : 0)),
index f53dbb5e8cb3619839019686b11d75747c723583..d0c2190d0b88dd3e66835c7490d491ad1629d2a9 100644 (file)
@@ -7279,7 +7279,8 @@ void bfd_update_compression_header
 
 bfd_boolean bfd_check_compression_header
    (bfd *abfd, bfd_byte *contents, asection *sec,
-    bfd_size_type *uncompressed_size);
+    bfd_size_type *uncompressed_size,
+    unsigned int *uncompressed_alignment_power);
 
 int bfd_get_compression_header_size (bfd *abfd, asection *sec);
 
@@ -7855,7 +7856,8 @@ void bfd_cache_section_contents
 bfd_boolean bfd_is_section_compressed_with_header
    (bfd *abfd, asection *section,
     int *compression_header_size_p,
-    bfd_size_type *uncompressed_size_p);
+    bfd_size_type *uncompressed_size_p,
+    unsigned int *uncompressed_alignment_power_p);
 
 bfd_boolean bfd_is_section_compressed
    (bfd *abfd, asection *section);
index 851710401e036fa79d9d08844adcf2b392cbfec5..b859d65e0e1bb3aa363e756724dc5835d4c7646c 100644 (file)
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -2332,6 +2332,8 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                  bfd_put_32 (abfd, sec->size, &echdr->ch_size);
                  bfd_put_32 (abfd, 1 << sec->alignment_power,
                              &echdr->ch_addralign);
+                 /* bfd_log2 (alignof (Elf32_Chdr)).  */
+                 bfd_set_section_alignment (abfd, sec, 2);
                }
              else
                {
@@ -2342,6 +2344,8 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                  bfd_put_64 (abfd, sec->size, &echdr->ch_size);
                  bfd_put_64 (abfd, 1 << sec->alignment_power,
                              &echdr->ch_addralign);
+                 /* bfd_log2 (alignof (Elf64_Chdr)).  */
+                 bfd_set_section_alignment (abfd, sec, 3);
                }
            }
          else
@@ -2354,6 +2358,8 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
                 order.  */
              memcpy (contents, "ZLIB", 4);
              bfd_putb64 (sec->size, contents + 4);
+             /* No way to keep the original alignment, just use 1 always.  */
+             bfd_set_section_alignment (abfd, sec, 0);
            }
        }
     }
@@ -2368,12 +2374,15 @@ bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
    SYNOPSIS
        bfd_boolean bfd_check_compression_header
          (bfd *abfd, bfd_byte *contents, asection *sec,
-         bfd_size_type *uncompressed_size);
+          bfd_size_type *uncompressed_size,
+          unsigned int *uncompressed_alignment_power);
+
 
 DESCRIPTION
        Check the compression header at CONTENTS of SEC in ABFD and
-       store the uncompressed size in UNCOMPRESSED_SIZE if the
-       compression header is valid.
+        store the uncompressed size in UNCOMPRESSED_SIZE and the
+        uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER
+        if the compression header is valid.
 
 RETURNS
        Return TRUE if the compression header is valid.
@@ -2382,7 +2391,8 @@ RETURNS
 bfd_boolean
 bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
                              asection *sec,
-                             bfd_size_type *uncompressed_size)
+                             bfd_size_type *uncompressed_size,
+                             unsigned int *uncompressed_alignment_power)
 {
   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
       && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
@@ -2404,9 +2414,10 @@ bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
          chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
        }
       if (chdr.ch_type == ELFCOMPRESS_ZLIB
-         && chdr.ch_addralign == 1U << sec->alignment_power)
+         && chdr.ch_addralign == (1U << bfd_log2 (chdr.ch_addralign)))
        {
          *uncompressed_size = chdr.ch_size;
+         *uncompressed_alignment_power = bfd_log2 (chdr.ch_addralign);
          return TRUE;
        }
     }
index 53e566e498e13b29b8c6095e230efee145d6e12b..38803eb0575648d5f050161e6b5739d21d653dcd 100644 (file)
@@ -84,11 +84,13 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec,
   int zlib_size = 0;
   int orig_compression_header_size;
   bfd_size_type orig_uncompressed_size;
+  unsigned int orig_uncompressed_alignment_pow;
   int header_size = bfd_get_compression_header_size (abfd, NULL);
   bfd_boolean compressed
     = bfd_is_section_compressed_with_header (abfd, sec,
                                             &orig_compression_header_size,
-                                            &orig_uncompressed_size);
+                                            &orig_uncompressed_size,
+                                            &orig_uncompressed_alignment_pow);
 
   /* Either ELF compression header or the 12-byte, "ZLIB" + 8-byte size,
      overhead in .zdebug* section.  */
@@ -153,6 +155,8 @@ bfd_compress_section_contents (bfd *abfd, sec_ptr sec,
              return 0;
            }
          free (uncompressed_buffer);
+         bfd_set_section_alignment (abfd, sec,
+                                    orig_uncompressed_alignment_pow);
          sec->contents = buffer;
          sec->compress_status = COMPRESS_SECTION_DONE;
          return orig_uncompressed_size;
@@ -364,20 +368,25 @@ SYNOPSIS
        bfd_boolean bfd_is_section_compressed_with_header
          (bfd *abfd, asection *section,
          int *compression_header_size_p,
-         bfd_size_type *uncompressed_size_p);
+         bfd_size_type *uncompressed_size_p,
+         unsigned int *uncompressed_alignment_power_p);
+
 
 DESCRIPTION
        Return @code{TRUE} if @var{section} is compressed.  Compression
-       header size is returned in @var{compression_header_size_p} and
-       uncompressed size is returned in @var{uncompressed_size_p}.  If
-       compression is unsupported, compression header size is returned
-       with -1 and uncompressed size is returned with 0.
+       header size is returned in @var{compression_header_size_p},
+        uncompressed size is returned in @var{uncompressed_size_p}
+        and the uncompressed data alignement power is returned in
+        @var{uncompressed_align_pow_p}.  If compression is
+        unsupported, compression header size is returned with -1
+        and uncompressed size is returned with 0.
 */
 
 bfd_boolean
 bfd_is_section_compressed_with_header (bfd *abfd, sec_ptr sec,
                                       int *compression_header_size_p,
-                                      bfd_size_type *uncompressed_size_p)
+                                      bfd_size_type *uncompressed_size_p,
+                                      unsigned int *uncompressed_align_pow_p)
 {
   bfd_byte header[MAX_COMPRESSION_HEADER_SIZE];
   int compression_header_size;
@@ -385,6 +394,8 @@ bfd_is_section_compressed_with_header (bfd *abfd, sec_ptr sec,
   unsigned int saved = sec->compress_status;
   bfd_boolean compressed;
 
+  *uncompressed_align_pow_p = 0;
+
   compression_header_size = bfd_get_compression_header_size (abfd, sec);
   if (compression_header_size > MAX_COMPRESSION_HEADER_SIZE)
     abort ();
@@ -412,7 +423,8 @@ bfd_is_section_compressed_with_header (bfd *abfd, sec_ptr sec,
       if (compression_header_size != 0)
        {
          if (!bfd_check_compression_header (abfd, header, sec,
-                                            uncompressed_size_p))
+                                            uncompressed_size_p,
+                                            uncompressed_align_pow_p))
            compression_header_size = -1;
        }
       /* Check for the pathalogical case of a debug string section that
@@ -449,9 +461,11 @@ bfd_is_section_compressed (bfd *abfd, sec_ptr sec)
 {
   int compression_header_size;
   bfd_size_type uncompressed_size;
+  unsigned int uncompressed_align_power;
   return (bfd_is_section_compressed_with_header (abfd, sec,
                                                 &compression_header_size,
-                                                &uncompressed_size)
+                                                &uncompressed_size,
+                                                &uncompressed_align_power)
          && compression_header_size >= 0
          && uncompressed_size > 0);
 }
@@ -480,6 +494,7 @@ bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
   int compression_header_size;
   int header_size;
   bfd_size_type uncompressed_size;
+  unsigned int uncompressed_alignment_power = 0;
 
   compression_header_size = bfd_get_compression_header_size (abfd, sec);
   if (compression_header_size > MAX_COMPRESSION_HEADER_SIZE)
@@ -508,7 +523,8 @@ bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
       uncompressed_size = bfd_getb64 (header + 4);
     }
   else if (!bfd_check_compression_header (abfd, header, sec,
-                                        &uncompressed_size))
+                                         &uncompressed_size,
+                                         &uncompressed_alignment_power))
     {
       bfd_set_error (bfd_error_wrong_format);
       return FALSE;
@@ -516,6 +532,7 @@ bfd_init_section_decompress_status (bfd *abfd, sec_ptr sec)
 
   sec->compressed_size = sec->size;
   sec->size = uncompressed_size;
+  bfd_set_section_alignment (abfd, sec, uncompressed_alignment_power);
   sec->compress_status = DECOMPRESS_SECTION_SIZED;
 
   return TRUE;
index 918150f30b3ca835424412d744fd29d656002b56..27a7150e6ded073f53dd378a5a8a6da6ab286bf4 100644 (file)
@@ -16,4 +16,4 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Controls whether to enable development-mode features by default.
-development=false
+development=true
index 50c0e9d7035a76efaa27e9957521f6d5b90b18d0..944e1744a81ddcb1a1bd692b94b8a09e5faa3f71 100644 (file)
@@ -350,7 +350,8 @@ _bfd_elf_link_setup_gnu_properties (struct bfd_link_info *info)
 
   /* Merge .note.gnu.property sections.  */
   for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link.next)
-    if (abfd != first_pbfd && (abfd->flags & DYNAMIC) == 0)
+    if (abfd != first_pbfd
+       && (abfd->flags & (DYNAMIC | BFD_PLUGIN)) == 0)
       {
        elf_property_list *null_ptr = NULL;
        elf_property_list **listp = &null_ptr;
index 0f753751284ded1f030deac228d53cf067db7740..dfeedf91c7dc0b864a41cac848546a391b715380 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1177,10 +1177,12 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
       enum { nothing, compress, decompress } action = nothing;
       int compression_header_size;
       bfd_size_type uncompressed_size;
+      unsigned int uncompressed_align_power;
       bfd_boolean compressed
        = bfd_is_section_compressed_with_header (abfd, newsect,
                                                 &compression_header_size,
-                                                &uncompressed_size);
+                                                &uncompressed_size,
+                                                &uncompressed_align_power);
 
       if (compressed)
        {
@@ -1299,15 +1301,15 @@ static bfd_boolean
 section_match (const Elf_Internal_Shdr * a,
               const Elf_Internal_Shdr * b)
 {
-  return
-    a->sh_type        == b->sh_type
-    && (a->sh_flags & ~ SHF_INFO_LINK)
-    == (b->sh_flags & ~ SHF_INFO_LINK)
-    && a->sh_addralign == b->sh_addralign
-    && a->sh_size      == b->sh_size
-    && a->sh_entsize   == b->sh_entsize
-    /* FIXME: Check sh_addr ?  */
-    ;
+  if (a->sh_type != b->sh_type
+      || ((a->sh_flags ^ b->sh_flags) & ~SHF_INFO_LINK) != 0
+      || a->sh_addralign != b->sh_addralign
+      || a->sh_entsize != b->sh_entsize)
+    return FALSE;
+  if (a->sh_type == SHT_SYMTAB
+      || a->sh_type == SHT_STRTAB)
+    return TRUE;
+  return a->sh_size == b->sh_size;
 }
 
 /* Find a section in OBFD that has the same characteristics
@@ -1877,7 +1879,7 @@ _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
        {
          Elf_Internal_Verneed *t;
 
-         version_string = "";
+         version_string = _("<corrupt>");
          for (t = elf_tdata (abfd)->verref;
               t != NULL;
               t = t->vn_nextref)
index a48ef0ca15fb1effb0d0aea0538515bfc817c98d..495fa342d3fe9bf75c4eb53d719c59bb87459fcf 100644 (file)
@@ -160,6 +160,18 @@ struct arc_relocation_data
   const char *    symbol_name;
 };
 
+/* ARC ELF linker hash entry.  */
+struct elf_arc_link_hash_entry
+{
+  struct elf_link_hash_entry root;
+
+  /* Track dynamic relocs copied for this symbol.  */
+  struct elf_dyn_relocs *dyn_relocs;
+
+  struct got_entry *got_ents;
+};
+
+
 /* Should be included at this location due to static declarations
    defined before this point.  */
 #include "arc-got.h"
@@ -281,15 +293,6 @@ struct arc_reloc_map
   unsigned char                    elf_reloc_val;
 };
 
-/* ARC ELF linker hash entry.  */
-struct elf_arc_link_hash_entry
-{
-  struct elf_link_hash_entry root;
-
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-};
-
 /* ARC ELF linker hash table.  */
 struct elf_arc_link_hash_table
 {
@@ -301,28 +304,28 @@ elf_arc_link_hash_newfunc (struct bfd_hash_entry *entry,
                           struct bfd_hash_table *table,
                           const char *string)
 {
+  struct elf_arc_link_hash_entry * ret =
+    (struct elf_arc_link_hash_entry *) entry;
+
   /* Allocate the structure if it has not already been allocated by a
      subclass.  */
-  if (entry == NULL)
-    {
-      entry = (struct bfd_hash_entry *)
-         bfd_hash_allocate (table,
-                            sizeof (struct elf_arc_link_hash_entry));
-      if (entry == NULL)
-       return entry;
-    }
+  if (ret == NULL)
+    ret = (struct elf_arc_link_hash_entry *)
+       bfd_hash_allocate (table, sizeof (struct elf_arc_link_hash_entry));
+  if (ret == NULL)
+    return (struct bfd_hash_entry *) ret;
 
   /* Call the allocation method of the superclass.  */
-  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
-  if (entry != NULL)
+  ret = ((struct elf_arc_link_hash_entry *)
+        _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+                                    table, string));
+  if (ret != NULL)
     {
-      struct elf_arc_link_hash_entry *eh;
-
-      eh = (struct elf_arc_link_hash_entry *) entry;
-      eh->dyn_relocs = NULL;
+      ret->dyn_relocs = NULL;
+      ret->got_ents = NULL;
     }
 
-  return entry;
+  return (struct bfd_hash_entry *) ret;
 }
 
 /* Destroy an ARC ELF linker hash table.  */
@@ -352,11 +355,6 @@ arc_elf_link_hash_table_create (bfd *abfd)
       return NULL;
     }
 
-  ret->elf.init_got_refcount.refcount = 0;
-  ret->elf.init_got_refcount.glist = NULL;
-  ret->elf.init_got_offset.offset = 0;
-  ret->elf.init_got_offset.glist = NULL;
-
   ret->elf.root.hash_table_free = elf_arc_link_hash_table_free;
 
   return &ret->elf.root;
@@ -1200,11 +1198,14 @@ arc_special_overflow_checks (const struct arc_relocation_data reloc_data,
             + (reloc_data.reloc_offset))))
 #define SECTSTART (bfd_signed_vma) (reloc_data.sym_section->output_section->vma \
                                    + reloc_data.sym_section->output_offset)
+#define FINAL_SECTSTART \
+  (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define JLI (bfd_signed_vma) (reloc_data.sym_section->output_section->vma)
 #define _SDA_BASE_ (bfd_signed_vma) (reloc_data.sdata_begin_symbol_vma)
 #define TLS_REL (bfd_signed_vma) \
   ((elf_hash_table (info))->tls_sec->output_section->vma)
-#define TLS_TBSS (8)
+#define TLS_TBSS (align_power(TCB_SIZE, \
+                 reloc_data.sym_section->alignment_power))
 
 #define none (0)
 
@@ -1615,10 +1616,14 @@ elf_arc_relocate_section (bfd *                   output_bfd,
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
          {
-           struct elf_link_hash_entry *h_old = h;
+           struct elf_arc_link_hash_entry *ah_old =
+             (struct elf_arc_link_hash_entry *) h;
            h = (struct elf_link_hash_entry *) h->root.u.i.link;
-           if (h->got.glist == 0 && h_old->got.glist != h->got.glist)
-             h->got.glist = h_old->got.glist;
+           struct elf_arc_link_hash_entry *ah =
+             (struct elf_arc_link_hash_entry *) h;
+
+           if (ah->got_ents == 0 && ah_old->got_ents != ah->got_ents)
+             ah->got_ents = ah_old->got_ents;
          }
 
          /* TODO: Need to validate what was the intention.  */
@@ -1636,6 +1641,8 @@ elf_arc_relocate_section (bfd *                     output_bfd,
 
              if (is_reloc_for_GOT (howto) && !bfd_link_pic (info))
                {
+                 struct elf_arc_link_hash_entry *ah =
+                   (struct elf_arc_link_hash_entry *) h;
                  /* TODO: Change it to use arc_do_relocation with
                    ARC_32 reloc.  Try to use ADD_RELA macro.  */
                  bfd_vma relocation =
@@ -1645,8 +1652,8 @@ elf_arc_relocate_section (bfd *                     output_bfd,
                         + reloc_data.sym_section->output_section->vma)
                      : 0);
 
-                 BFD_ASSERT (h->got.glist);
-                 bfd_vma got_offset = h->got.glist->offset;
+                 BFD_ASSERT (ah->got_ents);
+                 bfd_vma got_offset = ah->got_ents->offset;
                  bfd_put_32 (output_bfd, relocation,
                              htab->sgot->contents + got_offset);
                }
@@ -1717,7 +1724,7 @@ elf_arc_relocate_section (bfd *                     output_bfd,
          reloc_data.should_relocate = TRUE;
 
          struct got_entry **list
-           = get_got_entry_list_for_symbol (output_bfd, r_symndx, h);
+           = get_got_entry_list_for_symbol (input_bfd, r_symndx, h);
 
          reloc_data.got_offset_value
            = relocate_fix_got_relocs_for_got_info (list,
@@ -1956,40 +1963,45 @@ elf_arc_check_relocs (bfd *                      abfd,
       if (r_symndx < symtab_hdr->sh_info) /* Is a local symbol.  */
        h = NULL;
       else /* Global one.  */
-       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+       {
+         h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+         while (h->root.type == bfd_link_hash_indirect
+                || h->root.type == bfd_link_hash_warning)
+           h = (struct elf_link_hash_entry *) h->root.u.i.link;
+       }
+
 
       switch (r_type)
        {
-         case R_ARC_32:
-         case R_ARC_32_ME:
-           /* During shared library creation, these relocs should not
-              appear in a shared library (as memory will be read only
-              and the dynamic linker can not resolve these.  However
-              the error should not occur for e.g. debugging or
-              non-readonly sections.  */
-           if (h != NULL
-               && (bfd_link_dll (info) && !bfd_link_pie (info))
-               && (sec->flags & SEC_ALLOC) != 0
-               && (sec->flags & SEC_READONLY) != 0
-               && ((sec->flags & SEC_CODE) != 0
-                   || (sec->flags & SEC_DEBUGGING) != 0))
-             {
-               const char *name;
-               if (h)
-                 name = h->root.root.string;
-               else
-                 /* bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);  */
-                 name = "UNKNOWN";
-               _bfd_error_handler
-                 /* xgettext:c-format */
-                 (_("%pB: relocation %s against `%s' can not be used"
-                    " when making a shared object; recompile with -fPIC"),
-                  abfd,
-                  arc_elf_howto (r_type)->name,
-                  name);
-               bfd_set_error (bfd_error_bad_value);
-               return FALSE;
-             }
+       case R_ARC_32:
+       case R_ARC_32_ME:
+         /* During shared library creation, these relocs should not
+            appear in a shared library (as memory will be read only
+            and the dynamic linker can not resolve these.  However
+            the error should not occur for e.g. debugging or
+            non-readonly sections.  */
+         if (h != NULL
+             && (bfd_link_dll (info) && !bfd_link_pie (info))
+             && (sec->flags & SEC_ALLOC) != 0
+             && (sec->flags & SEC_READONLY) != 0
+             && ((sec->flags & SEC_CODE) != 0
+                 || (sec->flags & SEC_DEBUGGING) != 0))
+           {
+             const char *name;
+             if (h)
+               name = h->root.root.string;
+             else
+               name = "UNKNOWN";
+             _bfd_error_handler
+             /* xgettext:c-format */
+             (_("%pB: relocation %s against `%s' can not be used"
+                " when making a shared object; recompile with -fPIC"),
+                abfd,
+                arc_elf_howto (r_type)->name,
+                name);
+             bfd_set_error (bfd_error_bad_value);
+             return FALSE;
+           }
 
            /* In some cases we are not setting the 'non_got_ref'
               flag, even though the relocations don't require a GOT
@@ -2031,13 +2043,33 @@ elf_arc_check_relocs (bfd *                      abfd,
          if (h == NULL)
            continue;
          else
-           h->needs_plt = 1;
+           if (h->forced_local == 0)
+             h->needs_plt = 1;
        }
 
       /* Add info to the symbol got_entry_list.  */
       if (is_reloc_for_GOT (howto)
          || is_reloc_for_TLS (howto))
        {
+         if (bfd_link_dll (info) && !bfd_link_pie (info)
+             && (r_type == R_ARC_TLS_LE_32 || r_type == R_ARC_TLS_LE_S9))
+           {
+             const char *name;
+             if (h)
+               name = h->root.root.string;
+             else
+               /* bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL);  */
+               name = "UNKNOWN";
+             _bfd_error_handler
+               /* xgettext:c-format */
+               (_("%pB: relocation %s against `%s' can not be used"
+                  " when making a shared object; recompile with -fPIC"),
+                  abfd,
+                  arc_elf_howto (r_type)->name,
+                  name);
+             bfd_set_error (bfd_error_bad_value);
+             return FALSE;
+           }
          if (! _bfd_elf_create_got_section (dynobj, info))
            return FALSE;
 
@@ -2404,7 +2436,9 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd,
      create respective dynamic relocs.  */
   /* TODO: Make function to get list and not access the list directly.  */
   /* TODO: Move function to relocate_section create this relocs eagerly.  */
-  create_got_dynrelocs_for_got_info (&h->got.glist,
+  struct elf_arc_link_hash_entry *ah =
+    (struct elf_arc_link_hash_entry *) h;
+  create_got_dynrelocs_for_got_info (&ah->got_ents,
                                     output_bfd,
                                     info,
                                     h);
@@ -2413,6 +2447,9 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd,
     {
       struct elf_arc_link_hash_table *arc_htab = elf_arc_hash_table (info);
 
+      if (arc_htab == NULL)
+       return FALSE;
+
       if (h->dynindx == -1
          || (h->root.type != bfd_link_hash_defined
              && h->root.type != bfd_link_hash_defweak)
@@ -2455,6 +2492,39 @@ elf_arc_finish_dynamic_symbol (bfd * output_bfd,
     s = bfd_get_linker_section (dynobj, SECTION);              \
   break;
 
+
+struct obfd_info_group {
+  bfd *output_bfd;
+  struct bfd_link_info *info;
+};
+
+static bfd_boolean
+arc_create_forced_local_got_entries_for_tls (struct bfd_hash_entry *bh,
+                                            void *data)
+{
+  struct elf_arc_link_hash_entry * h =
+    (struct elf_arc_link_hash_entry *) bh;
+  struct obfd_info_group *tmp = (struct obfd_info_group *) data;
+
+  if (h->got_ents != NULL)
+    {
+      BFD_ASSERT (h);
+
+      struct got_entry *list = h->got_ents;
+
+      while (list != NULL)
+       {
+         create_got_dynrelocs_for_single_entry (list, tmp->output_bfd,
+           tmp->info,
+           (struct elf_link_hash_entry *) h);
+         list = list->next;
+       }
+    }
+
+  return TRUE;
+}
+
+
 /* Function :  elf_arc_finish_dynamic_sections
    Brief    :  Finish up the dynamic sections handling.
    Args     :  output_bfd :
@@ -2588,6 +2658,12 @@ elf_arc_finish_dynamic_sections (bfd * output_bfd,
        }
     }
 
+  struct obfd_info_group group;
+  group.output_bfd = output_bfd;
+  group.info = info;
+  bfd_hash_traverse (&info->hash->table,
+                    arc_create_forced_local_got_entries_for_tls, &group);
+
   return TRUE;
 }
 
index 5e9251bdb9faad12b85d26fb03c41a50e243cfb9..f4a329a13270bd986f9e08d3c499bf7529ccefb3 100644 (file)
@@ -10828,6 +10828,7 @@ ppc_finish_symbols (struct bfd_link_info *info)
                bfd_byte *loc;
                bfd_vma val;
                Elf_Internal_Rela rela;
+               unsigned char *p;
 
                if (!get_sym_h (NULL, &sym, &sym_sec, NULL, &local_syms,
                                lplt - local_plt, ibfd))
@@ -10872,14 +10873,9 @@ ppc_finish_symbols (struct bfd_link_info *info)
                loc = relplt->contents + (relplt->reloc_count++
                                          * sizeof (Elf32_External_Rela));
                bfd_elf32_swap_reloca_out (info->output_bfd, &rela, loc);
-             }
-           if ((ent->glink_offset & 1) == 0)
-             {
-               unsigned char *p = ((unsigned char *) htab->glink->contents
-                                   + ent->glink_offset);
 
+               p = (unsigned char *) htab->glink->contents + ent->glink_offset;
                write_glink_stub (NULL, ent, htab->elf.iplt, p, info);
-               ent->glink_offset |= 1;
              }
          }
 
index 4378b6177c5cf9dd98428d09e7c77aacc3ca757e..80e807f86212509ba3dba01010c8963915e29b37 100644 (file)
@@ -157,13 +157,44 @@ elf32_sparc_final_write_processing (bfd *abfd,
     }
 }
 
+/* Used to decide how to sort relocs in an optimal manner for the
+   dynamic linker, before writing them out.  */
+
 static enum elf_reloc_type_class
-elf32_sparc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+elf32_sparc_reloc_type_class (const struct bfd_link_info *info,
                              const asection *rel_sec ATTRIBUTE_UNUSED,
                              const Elf_Internal_Rela *rela)
 {
+  bfd *abfd = info->output_bfd;
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  struct _bfd_sparc_elf_link_hash_table *htab
+    = _bfd_sparc_elf_hash_table (info);
+  BFD_ASSERT (htab != NULL);
+
+  if (htab->elf.dynsym != NULL
+      && htab->elf.dynsym->contents != NULL)
+    {
+      /* Check relocation against STT_GNU_IFUNC symbol if there are
+        dynamic symbols.  */
+      unsigned long r_symndx = htab->r_symndx (rela->r_info);
+      if (r_symndx != STN_UNDEF)
+       {
+         Elf_Internal_Sym sym;
+         if (!bed->s->swap_symbol_in (abfd,
+                                      (htab->elf.dynsym->contents
+                                       + r_symndx * bed->s->sizeof_sym),
+                                      0, &sym))
+           abort ();
+
+         if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
+           return reloc_class_ifunc;
+       }
+    }
+
   switch ((int) ELF32_R_TYPE (rela->r_info))
     {
+    case R_SPARC_IRELATIVE:
+      return reloc_class_ifunc;
     case R_SPARC_RELATIVE:
       return reloc_class_relative;
     case R_SPARC_JMP_SLOT:
index e8f1c4c9e4c27641a019e5fac83815cd91c4224d..2846140e4c48feb58bf98bff80ae0fb3aade58f9 100644 (file)
@@ -312,7 +312,6 @@ visium_elf_howto_parity_reloc (bfd * input_bfd, arelent *reloc_entry,
   bfd_vma relocation;
   bfd_byte *inplace_address;
   bfd_vma insn;
-  const bfd_vma signmask = 0xffff8000;
 
   /* This part is from bfd_elf_generic_reloc.
      If we're relocating, and this an external symbol, we don't want
@@ -351,19 +350,19 @@ visium_elf_howto_parity_reloc (bfd * input_bfd, arelent *reloc_entry,
 
   if (reloc_entry->howto->pc_relative)
     {
-      relocation -= input_section->output_section->vma
-       + input_section->output_offset;
+      relocation -= input_section->output_section->vma;
+      relocation -= input_section->output_offset;
       relocation -= reloc_entry->address;
     }
 
   switch (reloc_entry->howto->type)
     {
     case R_VISIUM_PC16:
-      relocation >>= 2;
-      if (ret == bfd_reloc_ok && (relocation & signmask) != 0
-         && (relocation & signmask) != signmask)
+      if (ret == bfd_reloc_ok
+         && ((bfd_signed_vma) relocation < -0x20000
+             || (bfd_signed_vma) relocation > 0x1ffff))
        ret = bfd_reloc_overflow;
-      relocation &= 0xffff;
+      relocation = (relocation >> 2) & 0xffff;
       break;
     case R_VISIUM_HI16:
     case R_VISIUM_HI16_PCREL:
index 45d81777eb7019379c53c987beaa89245b6a72bd..746506ef09e9f135a4460ea0429011608093efac 100644 (file)
@@ -10810,8 +10810,7 @@ plt_stub_size (struct ppc_link_hash_table *htab,
       && htab->params->tls_get_addr_opt)
     {
       size += 7 * 4;
-      if (ALWAYS_EMIT_R2SAVE
-         || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+      if (stub_entry->stub_type == ppc_stub_plt_call_r2save)
        size += 6 * 4;
     }
   return size;
@@ -10829,7 +10828,7 @@ plt_stub_pad (struct ppc_link_hash_table *htab,
              bfd_vma plt_off)
 {
   int stub_align;
-  unsigned stub_size = plt_stub_size (htab, stub_entry, plt_off);
+  unsigned stub_size;
   bfd_vma stub_off = stub_entry->group->stub_sec->size;
 
   if (htab->params->plt_stub_align >= 0)
@@ -10841,6 +10840,7 @@ plt_stub_pad (struct ppc_link_hash_table *htab,
     }
 
   stub_align = 1 << -htab->params->plt_stub_align;
+  stub_size = plt_stub_size (htab, stub_entry, plt_off);
   if (((stub_off + stub_size - 1) & -stub_align) - (stub_off & -stub_align)
       > ((stub_size - 1) & -stub_align))
     return stub_align - (stub_off & (stub_align - 1));
@@ -11055,8 +11055,7 @@ build_tls_get_addr_stub (struct ppc_link_hash_table *htab,
   bfd_put_32 (obfd, MR_R3_R0, p),              p += 4;
   if (r != NULL)
     r[0].r_offset += 7 * 4;
-  if (!ALWAYS_EMIT_R2SAVE
-      && stub_entry->stub_type != ppc_stub_plt_call_r2save)
+  if (stub_entry->stub_type != ppc_stub_plt_call_r2save)
     return build_plt_stub (htab, stub_entry, p, offset, r);
 
   bfd_put_32 (obfd, MFLR_R11, p),              p += 4;
@@ -11148,7 +11147,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
   struct ppc_link_hash_table *htab;
   bfd_byte *loc;
   bfd_byte *p;
-  bfd_vma dest, off;
+  bfd_vma targ, off;
   Elf_Internal_Rela *r;
   asection *plt;
 
@@ -11160,8 +11159,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
   if (htab == NULL)
     return FALSE;
 
-  /* Make a note of the offset within the stubs for this entry.  */
-  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+  BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
   loc = stub_entry->group->stub_sec->contents + stub_entry->stub_offset;
 
   htab->stub_count[stub_entry->stub_type - 1] += 1;
@@ -11170,16 +11168,16 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
     case ppc_stub_long_branch:
     case ppc_stub_long_branch_r2off:
       /* Branches are relative.  This is where we are going to.  */
-      dest = (stub_entry->target_value
+      targ = (stub_entry->target_value
              + stub_entry->target_section->output_offset
              + stub_entry->target_section->output_section->vma);
-      dest += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
-      off = dest;
+      targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
 
       /* And this is where we are coming from.  */
-      off -= (stub_entry->stub_offset
-             + stub_entry->group->stub_sec->output_offset
-             + stub_entry->group->stub_sec->output_section->vma);
+      off = (stub_entry->stub_offset
+            + stub_entry->group->stub_sec->output_offset
+            + stub_entry->group->stub_sec->output_section->vma);
+      off = targ - off;
 
       p = loc;
       if (stub_entry->stub_type == ppc_stub_long_branch_r2off)
@@ -11226,7 +11224,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
            return FALSE;
          r->r_offset = p - 4 - stub_entry->group->stub_sec->contents;
          r->r_info = ELF64_R_INFO (0, R_PPC64_REL24);
-         r->r_addend = dest;
+         r->r_addend = targ;
          if (stub_entry->h != NULL)
            {
              struct elf_link_hash_entry **hashes;
@@ -11278,13 +11276,13 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          return FALSE;
        }
 
-      dest = (stub_entry->target_value
+      targ = (stub_entry->target_value
              + stub_entry->target_section->output_offset
              + stub_entry->target_section->output_section->vma);
       if (stub_entry->stub_type != ppc_stub_plt_branch_r2off)
-       dest += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
+       targ += PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
 
-      bfd_put_64 (htab->brlt->owner, dest,
+      bfd_put_64 (htab->brlt->owner, targ,
                  htab->brlt->contents + br_entry->offset);
 
       if (br_entry->iter == htab->stub_iteration)
@@ -11301,7 +11299,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
                               + htab->brlt->output_offset
                               + htab->brlt->output_section->vma);
              rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
-             rela.r_addend = dest;
+             rela.r_addend = targ;
 
              rl = htab->relbrlt->contents;
              rl += (htab->relbrlt->reloc_count++
@@ -11321,17 +11319,17 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
                             + htab->brlt->output_offset
                             + htab->brlt->output_section->vma);
              r->r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE);
-             r->r_addend = dest;
+             r->r_addend = targ;
            }
        }
 
-      dest = (br_entry->offset
+      targ = (br_entry->offset
              + htab->brlt->output_offset
              + htab->brlt->output_section->vma);
 
-      off = (dest
-            - elf_gp (info->output_bfd)
-            - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      off = (elf_gp (info->output_bfd)
+            + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      off = targ - off;
 
       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
        {
@@ -11354,7 +11352,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          if (stub_entry->stub_type == ppc_stub_plt_branch_r2off)
            r[0].r_offset += 4;
          r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS);
-         r[0].r_addend = dest;
+         r[0].r_addend = targ;
          if (PPC_HA (off) != 0)
            {
              r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA);
@@ -11439,8 +11437,8 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
        }
 
       /* Now build the stub.  */
-      dest = stub_entry->plt_ent->plt.offset & ~1;
-      if (dest >= (bfd_vma) -2)
+      targ = stub_entry->plt_ent->plt.offset & ~1;
+      if (targ >= (bfd_vma) -2)
        abort ();
 
       plt = htab->elf.splt;
@@ -11453,12 +11451,11 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          else
            plt = htab->pltlocal;
        }
+      targ += plt->output_offset + plt->output_section->vma;
 
-      dest += plt->output_offset + plt->output_section->vma;
-
-      off = (dest
-            - elf_gp (info->output_bfd)
-            - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      off = (elf_gp (info->output_bfd)
+            + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      off = targ - off;
 
       if (off + 0x80008000 > 0xffffffff || (off & 7) != 0)
        {
@@ -11473,15 +11470,6 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          return FALSE;
        }
 
-      if (htab->params->plt_stub_align != 0)
-       {
-         unsigned pad = plt_stub_pad (htab, stub_entry, off);
-
-         stub_entry->group->stub_sec->size += pad;
-         stub_entry->stub_offset = stub_entry->group->stub_sec->size;
-         loc += pad;
-       }
-
       r = NULL;
       if (info->emitrelocations)
        {
@@ -11496,7 +11484,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          r[0].r_offset = loc - stub_entry->group->stub_sec->contents;
          if (bfd_big_endian (info->output_bfd))
            r[0].r_offset += 2;
-         r[0].r_addend = dest;
+         r[0].r_addend = targ;
        }
       if (stub_entry->h != NULL
          && (stub_entry->h == htab->tls_get_addr_fd
@@ -11515,7 +11503,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       return FALSE;
     }
 
-  stub_entry->group->stub_sec->size += p - loc;
+  stub_entry->group->stub_sec->size = stub_entry->stub_offset + (p - loc);
 
   if (htab->params->emit_stub_syms)
     {
@@ -11567,7 +11555,7 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
   struct ppc_stub_hash_entry *stub_entry;
   struct bfd_link_info *info;
   struct ppc_link_hash_table *htab;
-  bfd_vma off;
+  bfd_vma targ, off;
   int size;
 
   /* Massage our args to the form they really have.  */
@@ -11578,6 +11566,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
   if (htab == NULL)
     return FALSE;
 
+  /* Make a note of the offset within the stubs for this entry.  */
+  stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+
   if (stub_entry->h != NULL
       && stub_entry->h->save_res
       && stub_entry->h->elf.root.type == bfd_link_hash_defined
@@ -11594,8 +11585,8 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       || stub_entry->stub_type == ppc_stub_plt_call_r2save)
     {
       asection *plt;
-      off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
-      if (off >= (bfd_vma) -2)
+      targ = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1;
+      if (targ >= (bfd_vma) -2)
        abort ();
       plt = htab->elf.splt;
       if (!htab->elf.dynamic_sections_created
@@ -11607,23 +11598,30 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
          else
            plt = htab->pltlocal;
        }
-      off += (plt->output_offset
-             + plt->output_section->vma
-             - elf_gp (info->output_bfd)
-             - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      targ += plt->output_offset + plt->output_section->vma;
+
+      off = (elf_gp (info->output_bfd)
+            + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+      off = targ - off;
+
+      if (htab->params->plt_stub_align != 0)
+       {
+         unsigned pad = plt_stub_pad (htab, stub_entry, off);
+
+         stub_entry->group->stub_sec->size += pad;
+         stub_entry->stub_offset = stub_entry->group->stub_sec->size;
+       }
 
       size = plt_stub_size (htab, stub_entry, off);
+
       if (stub_entry->h != NULL
          && (stub_entry->h == htab->tls_get_addr_fd
              || stub_entry->h == htab->tls_get_addr)
          && htab->params->tls_get_addr_opt
-         && (ALWAYS_EMIT_R2SAVE
-             || stub_entry->stub_type == ppc_stub_plt_call_r2save))
+         && stub_entry->stub_type == ppc_stub_plt_call_r2save)
        stub_entry->group->tls_get_addr_opt_bctrl
-         = stub_entry->group->stub_sec->size + size - 5 * 4;
+         = stub_entry->stub_offset + size - 5 * 4;
 
-      if (htab->params->plt_stub_align)
-       size += plt_stub_pad (htab, stub_entry, off);
       if (info->emitrelocations)
        {
          stub_entry->group->stub_sec->reloc_count
@@ -11642,12 +11640,12 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       bfd_vma r2off = 0;
       bfd_vma local_off = 0;
 
-      off = (stub_entry->target_value
-            + stub_entry->target_section->output_offset
-            + stub_entry->target_section->output_section->vma);
-      off -= (stub_entry->group->stub_sec->size
-             + stub_entry->group->stub_sec->output_offset
-             + stub_entry->group->stub_sec->output_section->vma);
+      targ = (stub_entry->target_value
+             + stub_entry->target_section->output_offset
+             + stub_entry->target_section->output_section->vma);
+      off = (stub_entry->stub_offset
+            + stub_entry->group->stub_sec->output_offset
+            + stub_entry->group->stub_sec->output_section->vma);
 
       /* Reset the stub type from the plt variant in case we now
         can reach with a shorter stub.  */
@@ -11668,8 +11666,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
            size += 4;
          if (PPC_LO (r2off) != 0)
            size += 4;
-         off -= size - 4;
+         off += size - 4;
        }
+      off = targ - off;
 
       local_off = PPC64_LOCAL_ENTRY_OFFSET (stub_entry->other);
 
@@ -11709,11 +11708,12 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
            }
 
          stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch;
-         off = (br_entry->offset
-                + htab->brlt->output_offset
-                + htab->brlt->output_section->vma
-                - elf_gp (info->output_bfd)
-                - htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+         targ = (br_entry->offset
+                 + htab->brlt->output_offset
+                 + htab->brlt->output_section->vma);
+         off = (elf_gp (info->output_bfd)
+                + htab->sec_info[stub_entry->group->link_sec->id].toc_off);
+         off = targ - off;
 
          if (info->emitrelocations)
            {
@@ -13530,7 +13530,8 @@ write_plt_relocs_for_local_syms (struct bfd_link_info *info)
                }
 
              val = sym->st_value + ent->addend;
-             val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
+             if (ELF_ST_TYPE (sym->st_info) != STT_GNU_IFUNC)
+               val += PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
              if (sym_sec != NULL && sym_sec->output_section != NULL)
                val += sym_sec->output_offset + sym_sec->output_section->vma;
 
@@ -14877,10 +14878,13 @@ ppc64_elf_relocate_section (bfd *output_bfd,
              addend = 0;
              reloc_dest = DEST_STUB;
 
-             if ((stub_entry->stub_type == ppc_stub_plt_call
+             if (((stub_entry->stub_type == ppc_stub_plt_call
+                   && ALWAYS_EMIT_R2SAVE)
                   || stub_entry->stub_type == ppc_stub_plt_call_r2save)
-                 && (ALWAYS_EMIT_R2SAVE
-                     || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+                 && !(h != NULL
+                      && (h == htab->tls_get_addr_fd
+                          || h == htab->tls_get_addr)
+                      && htab->params->tls_get_addr_opt)
                  && rel + 1 < relend
                  && rel[1].r_offset == rel->r_offset + 4
                  && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOCSAVE)
index 8c45d3257e43511658a89b2f3ef8de70d72639f2..86004d1d87216b430aa9d7509060ca03990574dd 100644 (file)
@@ -784,13 +784,44 @@ elf64_sparc_print_symbol_all (bfd *abfd ATTRIBUTE_UNUSED, void * filep,
     return symbol->name;
 }
 \f
+/* Used to decide how to sort relocs in an optimal manner for the
+   dynamic linker, before writing them out.  */
+
 static enum elf_reloc_type_class
-elf64_sparc_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
+elf64_sparc_reloc_type_class (const struct bfd_link_info *info,
                              const asection *rel_sec ATTRIBUTE_UNUSED,
                              const Elf_Internal_Rela *rela)
 {
+  bfd *abfd = info->output_bfd;
+  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
+  struct _bfd_sparc_elf_link_hash_table *htab
+    = _bfd_sparc_elf_hash_table (info);
+  BFD_ASSERT (htab != NULL);
+
+  if (htab->elf.dynsym != NULL
+      && htab->elf.dynsym->contents != NULL)
+    {
+      /* Check relocation against STT_GNU_IFUNC symbol if there are
+        dynamic symbols.  */
+      unsigned long r_symndx = htab->r_symndx (rela->r_info);
+      if (r_symndx != STN_UNDEF)
+       {
+         Elf_Internal_Sym sym;
+         if (!bed->s->swap_symbol_in (abfd,
+                                      (htab->elf.dynsym->contents
+                                       + r_symndx * bed->s->sizeof_sym),
+                                      0, &sym))
+           abort ();
+
+         if (ELF_ST_TYPE (sym.st_info) == STT_GNU_IFUNC)
+           return reloc_class_ifunc;
+       }
+    }
+
   switch ((int) ELF64_R_TYPE (rela->r_info))
     {
+    case R_SPARC_IRELATIVE:
+      return reloc_class_ifunc;
     case R_SPARC_RELATIVE:
       return reloc_class_relative;
     case R_SPARC_JMP_SLOT:
index c3a6c31ed2247514bb86f873eeed3570f1d82a30..e265cf324e48d24f8357397e9dae73683cedfa17 100644 (file)
@@ -1426,7 +1426,7 @@ elf_x86_64_need_pic (struct bfd_link_info *info,
          break;
        }
 
-      if (!h->def_regular && !h->def_dynamic)
+      if (!SYMBOL_DEFINED_NON_SHARED_P (h) && !h->def_dynamic)
        und = _("undefined ");
     }
   else
@@ -1855,6 +1855,7 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
       const char *name;
       bfd_boolean size_reloc;
       bfd_boolean converted_reloc;
+      bfd_boolean do_check_pic;
 
       r_symndx = htab->r_sym (rel->r_info);
       r_type = ELF32_R_TYPE (rel->r_info);
@@ -2130,6 +2131,13 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
          size_reloc = TRUE;
          goto do_size;
 
+       case R_X86_64_PC8:
+       case R_X86_64_PC16:
+       case R_X86_64_PC32:
+       case R_X86_64_PC32_BND:
+         do_check_pic = TRUE;
+         goto check_pic;
+
        case R_X86_64_32:
          if (!ABI_64_P (abfd))
            goto pointer;
@@ -2153,13 +2161,11 @@ elf_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info,
                                        &x86_64_elf_howto_table[r_type]);
          /* Fall through.  */
 
-       case R_X86_64_PC8:
-       case R_X86_64_PC16:
-       case R_X86_64_PC32:
-       case R_X86_64_PC32_BND:
        case R_X86_64_PC64:
        case R_X86_64_64:
 pointer:
+         do_check_pic = FALSE;
+check_pic:
          if (eh != NULL && (sec->flags & SEC_CODE) != 0)
            eh->zero_undefweak |= 0x2;
          /* We are called after all symbols have been resolved.  Only
@@ -2223,6 +2229,67 @@ pointer:
                }
            }
 
+         if (do_check_pic)
+           {
+             /* Don't complain about -fPIC if the symbol is undefined
+                when building executable unless it is unresolved weak
+                symbol, references a dynamic definition in PIE or
+                -z nocopyreloc is used.  */
+             bfd_boolean no_copyreloc_p
+               = (info->nocopyreloc
+                  || (h != NULL
+                      && eh->def_protected
+                      && elf_has_no_copy_on_protected (h->root.u.def.section->owner)));
+             if ((sec->flags & SEC_ALLOC) != 0
+                 && (sec->flags & SEC_READONLY) != 0
+                 && h != NULL
+                 && ((bfd_link_executable (info)
+                      && ((h->root.type == bfd_link_hash_undefweak
+                           && (eh == NULL
+                               || !UNDEFINED_WEAK_RESOLVED_TO_ZERO (info,
+                                                                    eh)))
+                          || (bfd_link_pie (info)
+                              && !SYMBOL_DEFINED_NON_SHARED_P (h)
+                              && h->def_dynamic)
+                          || (no_copyreloc_p
+                              && h->def_dynamic
+                              && !(h->root.u.def.section->flags & SEC_CODE))))
+                     || bfd_link_dll (info)))
+               {
+                 bfd_boolean fail = FALSE;
+                 if (SYMBOL_REFERENCES_LOCAL_P (info, h))
+                   {
+                     /* Symbol is referenced locally.  Make sure it is
+                        defined locally.  */
+                     fail = !SYMBOL_DEFINED_NON_SHARED_P (h);
+                   }
+                 else if (bfd_link_pie (info))
+                   {
+                     /* We can only use PC-relative relocations in PIE
+                        from non-code sections.  */
+                     if (h->type == STT_FUNC
+                         && (sec->flags & SEC_CODE) != 0)
+                       fail = TRUE;
+                   }
+                 else if (no_copyreloc_p || bfd_link_dll (info))
+                   {
+                     /* Symbol doesn't need copy reloc and isn't
+                        referenced locally.  Don't allow PC-relative
+                        relocations against default and protected
+                        symbols since address of protected function
+                        and location of protected data may not be in
+                        the shared object.   */
+                     fail = (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
+                             || ELF_ST_VISIBILITY (h->other) == STV_PROTECTED);
+                   }
+
+                 if (fail)
+                   return elf_x86_64_need_pic (info, abfd, sec, h,
+                                               symtab_hdr, isym,
+                                               &x86_64_elf_howto_table[r_type]);
+               }
+           }
+
          size_reloc = FALSE;
 do_size:
          if (NEED_DYNAMIC_RELOCATION_P (info, TRUE, h, sec, r_type,
@@ -3066,56 +3133,14 @@ use_plt:
        case R_X86_64_PC16:
        case R_X86_64_PC32:
        case R_X86_64_PC32_BND:
-         /* Don't complain about -fPIC if the symbol is undefined when
-            building executable unless it is unresolved weak symbol,
-            references a dynamic definition in PIE or -z nocopyreloc
-            is used.  */
-         if ((input_section->flags & SEC_ALLOC) != 0
-             && (input_section->flags & SEC_READONLY) != 0
-             && h != NULL
-             && ((bfd_link_executable (info)
-                  && ((h->root.type == bfd_link_hash_undefweak
-                       && !resolved_to_zero)
-                      || (bfd_link_pie (info)
-                          && !h->def_regular
-                          && h->def_dynamic)
-                      || ((info->nocopyreloc
-                           || (eh->def_protected
-                               && elf_has_no_copy_on_protected (h->root.u.def.section->owner)))
-                          && h->def_dynamic
-                          && !(h->root.u.def.section->flags & SEC_CODE))))
-                 || bfd_link_dll (info)))
-           {
-             bfd_boolean fail = FALSE;
-             if (SYMBOL_REFERENCES_LOCAL_P (info, h))
-               {
-                 /* Symbol is referenced locally.  Make sure it is
-                    defined locally.  */
-                 fail = !(h->def_regular || ELF_COMMON_DEF_P (h));
-               }
-             else if (!(bfd_link_pie (info)
-                        && (h->needs_copy || eh->needs_copy)))
-               {
-                 /* Symbol doesn't need copy reloc and isn't referenced
-                    locally.  Address of protected function may not be
-                    reachable at run-time.  */
-                 fail = (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-                         || (ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
-                             && h->type == STT_FUNC));
-               }
-
-             if (fail)
-               return elf_x86_64_need_pic (info, input_bfd, input_section,
-                                           h, NULL, NULL, howto);
-           }
          /* Since x86-64 has PC-relative PLT, we can use PLT in PIE
             as function address.  */
-         else if (h != NULL
-                  && (input_section->flags & SEC_CODE) == 0
-                  && bfd_link_pie (info)
-                  && h->type == STT_FUNC
-                  && !h->def_regular
-                  && h->def_dynamic)
+         if (h != NULL
+             && (input_section->flags & SEC_CODE) == 0
+             && bfd_link_pie (info)
+             && h->type == STT_FUNC
+             && !h->def_regular
+             && h->def_dynamic)
            goto use_plt;
          /* Fall through.  */
 
@@ -4272,7 +4297,7 @@ elf_x86_64_finish_dynamic_symbol (bfd *output_bfd,
       else if (bfd_link_pic (info)
               && SYMBOL_REFERENCES_LOCAL_P (info, h))
        {
-         if (!(h->def_regular || ELF_COMMON_DEF_P (h)))
+         if (!SYMBOL_DEFINED_NON_SHARED_P (h))
            return FALSE;
          BFD_ASSERT((h->got.offset & 1) != 0);
          rela.r_info = htab->r_info (0, R_X86_64_RELATIVE);
index b24fb95848d6990a2496600d910a400b2648a58c..46091b63411e6b6220b496afe617eb07163d47a2 100644 (file)
@@ -686,13 +686,11 @@ bfd_elf_record_link_assignment (bfd *output_bfd,
       && !h->def_regular)
     h->root.type = bfd_link_hash_undefined;
 
-  /* If this symbol is not being provided by the linker script, and it is
-     currently defined by a dynamic object, but not by a regular object,
-     then clear out any version information because the symbol will not be
-     associated with the dynamic object any more.  */
-  if (!provide
-      && h->def_dynamic
-      && !h->def_regular)
+  /* If this symbol is currently defined by a dynamic object, but not
+     by a regular object, then clear out any version information because
+     the symbol will not be associated with the dynamic object any
+     more.  */
+  if (h->def_dynamic && !h->def_regular)
     h->verinfo.verdef = NULL;
 
   /* Make sure this symbol is not garbage collected.  */
@@ -2360,10 +2358,19 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data)
       return FALSE;
     }
 
+  bed = get_elf_backend_data (info->output_bfd);
+
   /* We only need version numbers for symbols defined in regular
      objects.  */
   if (!h->def_regular)
-    return TRUE;
+    {
+      /* Hide symbols defined in discarded input sections.  */
+      if ((h->root.type == bfd_link_hash_defined
+          || h->root.type == bfd_link_hash_defweak)
+         && discarded_section (h->root.u.def.section))
+       (*bed->elf_backend_hide_symbol) (info, h, TRUE);
+      return TRUE;
+    }
 
   hide = FALSE;
   bed = get_elf_backend_data (info->output_bfd);
index cf321f32c209755c1e9e86386c2fbba066f41f90..d4964b1b11258ba8fc4cb8ba2fd48e209b609cbc 100644 (file)
@@ -3845,7 +3845,7 @@ _bfd_aarch64_erratum_835769_scan (bfd *input_bfd,
 static bfd_boolean
 _bfd_aarch64_adrp_p (uint32_t insn)
 {
-  return ((insn & 0x9f000000) == 0x90000000);
+  return ((insn & AARCH64_ADRP_OP_MASK) == AARCH64_ADRP_OP);
 }
 
 
@@ -5074,7 +5074,7 @@ _bfd_aarch64_erratum_843419_branch_to_stub (struct bfd_hash_entry *gen_entry,
           + stub_entry->adrp_offset);
   insn = bfd_getl32 (contents + stub_entry->adrp_offset);
 
-  if ((insn & AARCH64_ADRP_OP_MASK) !=  AARCH64_ADRP_OP)
+  if (!_bfd_aarch64_adrp_p (insn))
     abort ();
 
   bfd_signed_vma imm =
@@ -5939,6 +5939,64 @@ bad_ifunc_reloc:
 # define movz_hw_R0    (0x52c00000)
 #endif
 
+/* Structure to hold payload for _bfd_aarch64_erratum_843419_clear_stub,
+   it is used to identify the stub information to reset.  */
+
+struct erratum_843419_branch_to_stub_clear_data
+{
+  bfd_vma adrp_offset;
+  asection *output_section;
+};
+
+/* Clear the erratum information for GEN_ENTRY if the ADRP_OFFSET and
+   section inside IN_ARG matches.  The clearing is done by setting the
+   stub_type to none.  */
+
+static bfd_boolean
+_bfd_aarch64_erratum_843419_clear_stub (struct bfd_hash_entry *gen_entry,
+                                       void *in_arg)
+{
+  struct elf_aarch64_stub_hash_entry *stub_entry
+    = (struct elf_aarch64_stub_hash_entry *) gen_entry;
+  struct erratum_843419_branch_to_stub_clear_data *data
+    = (struct erratum_843419_branch_to_stub_clear_data *) in_arg;
+
+  if (stub_entry->target_section != data->output_section
+      || stub_entry->stub_type != aarch64_stub_erratum_843419_veneer
+      || stub_entry->adrp_offset != data->adrp_offset)
+    return TRUE;
+
+  /* Change the stub type instead of removing the entry, removing from the hash
+     table would be slower and we have already reserved the memory for the entry
+     so there wouldn't be much gain.  Changing the stub also keeps around a
+     record of what was there before.  */
+  stub_entry->stub_type = aarch64_stub_none;
+
+  /* We're done and there could have been only one matching stub at that
+     particular offset, so abort further traversal.  */
+  return FALSE;
+}
+
+/* TLS Relaxations may relax an adrp sequence that matches the erratum 843419
+   sequence.  In this case the erratum no longer applies and we need to remove
+   the entry from the pending stub generation.  This clears matching adrp insn
+   at ADRP_OFFSET in INPUT_SECTION in the stub table defined in GLOBALS.  */
+
+static void
+clear_erratum_843419_entry (struct elf_aarch64_link_hash_table *globals,
+                           bfd_vma adrp_offset, asection *input_section)
+{
+  if (globals->fix_erratum_843419)
+    {
+      struct erratum_843419_branch_to_stub_clear_data data;
+      data.adrp_offset = adrp_offset;
+      data.output_section = input_section;
+
+      bfd_hash_traverse (&globals->stub_hash_table,
+                        _bfd_aarch64_erratum_843419_clear_stub, &data);
+    }
+}
+
 /* Handle TLS relaxations.  Relaxing is possible for symbols that use
    R_AARCH64_TLSDESC_ADR_{PAGE, LD64_LO12_NC, ADD_LO12_NC} during a static
    link.
@@ -5949,8 +6007,9 @@ bad_ifunc_reloc:
 
 static bfd_reloc_status_type
 elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals,
-                        bfd *input_bfd, bfd_byte *contents,
-                        Elf_Internal_Rela *rel, struct elf_link_hash_entry *h)
+                        bfd *input_bfd, asection *input_section,
+                        bfd_byte *contents, Elf_Internal_Rela *rel,
+                        struct elf_link_hash_entry *h)
 {
   bfd_boolean is_local = h == NULL;
   unsigned int r_type = ELFNN_R_TYPE (rel->r_info);
@@ -5971,6 +6030,9 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals,
 
             Where R is x for LP64, and w for ILP32.  */
          bfd_putl32 (movz_R0, contents + rel->r_offset);
+         /* We have relaxed the adrp into a mov, we may have to clear any
+            pending erratum fixes.  */
+         clear_erratum_843419_entry (globals, rel->r_offset, input_section);
          return bfd_reloc_continue;
        }
       else
@@ -6261,6 +6323,9 @@ elfNN_aarch64_tls_relax (struct elf_aarch64_link_hash_table *globals,
        {
          insn = bfd_getl32 (contents + rel->r_offset);
          bfd_putl32 (movz_R0 | (insn & 0x1f), contents + rel->r_offset);
+         /* We have relaxed the adrp into a mov, we may have to clear any
+            pending erratum fixes.  */
+         clear_erratum_843419_entry (globals, rel->r_offset, input_section);
        }
       return bfd_reloc_continue;
 
@@ -6485,7 +6550,8 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
          howto = elfNN_aarch64_howto_from_bfd_reloc (bfd_r_type);
          BFD_ASSERT (howto != NULL);
          r_type = howto->type;
-         r = elfNN_aarch64_tls_relax (globals, input_bfd, contents, rel, h);
+         r = elfNN_aarch64_tls_relax (globals, input_bfd, input_section,
+                                      contents, rel, h);
          unresolved_reloc = 0;
        }
       else
@@ -8076,6 +8142,8 @@ aarch64_map_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg)
       if (!elfNN_aarch64_output_map_sym (osi, AARCH64_MAP_INSN, addr))
        return FALSE;
       break;
+    case aarch64_stub_none:
+      break;
 
     default:
       abort ();
index a2497aab8630a0fd675f515577f5e89e487fb4ae..2d8f7b640b5b16be9e71c7e300402f4f22f05cc8 100644 (file)
@@ -2407,12 +2407,27 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
   switch (pr_type)
     {
     case GNU_PROPERTY_X86_ISA_1_USED:
+      if (aprop == NULL || bprop == NULL)
+       {
+         /* Only one of APROP and BPROP can be NULL.  */
+         if (aprop != NULL)
+           {
+             /* Remove this property since the other input file doesn't
+                have it.  */
+             aprop->pr_kind = property_remove;
+             updated = TRUE;
+           }
+         break;
+       }
+      goto or_property;
+
     case GNU_PROPERTY_X86_ISA_1_NEEDED:
       if (aprop != NULL && bprop != NULL)
        {
+or_property:
          number = aprop->u.number;
          aprop->u.number = number | bprop->u.number;
-         /* Remove the property if ISA bits are empty.  */
+         /* Remove the property if all bits are empty.  */
          if (aprop->u.number == 0)
            {
              aprop->pr_kind = property_remove;
@@ -2428,14 +2443,14 @@ _bfd_x86_elf_merge_gnu_properties (struct bfd_link_info *info,
            {
              if (aprop->u.number == 0)
                {
-                 /* Remove APROP if ISA bits are empty.  */
+                 /* Remove APROP if all bits are empty.  */
                  aprop->pr_kind = property_remove;
                  updated = TRUE;
                }
            }
          else
            {
-             /* Return TRUE if APROP is NULL and ISA bits of BPROP
+             /* Return TRUE if APROP is NULL and all bits of BPROP
                 aren't empty to indicate that BPROP should be added
                 to ABFD.  */
              updated = bprop->u.number != 0;
@@ -2524,6 +2539,7 @@ _bfd_x86_elf_link_setup_gnu_properties
   const struct elf_backend_data *bed;
   unsigned int class_align = ABI_64_P (info->output_bfd) ? 3 : 2;
   unsigned int got_align;
+  bfd_boolean has_text = FALSE;
 
   features = 0;
   if (info->ibt)
@@ -2538,24 +2554,75 @@ _bfd_x86_elf_link_setup_gnu_properties
     if (bfd_get_flavour (pbfd) == bfd_target_elf_flavour
        && bfd_count_sections (pbfd) != 0)
       {
+       if (!has_text)
+         {
+           /* Check if there is no non-empty text section.  */
+           sec = bfd_get_section_by_name (pbfd, ".text");
+           if (sec != NULL && sec->size != 0)
+             has_text = TRUE;
+         }
+
        ebfd = pbfd;
 
        if (elf_properties (pbfd) != NULL)
          break;
       }
 
-  if (ebfd != NULL && features)
+  bed = get_elf_backend_data (info->output_bfd);
+
+  htab = elf_x86_hash_table (info, bed->target_id);
+  if (htab == NULL)
+    return pbfd;
+
+  if (ebfd != NULL)
     {
-      /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
-        GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
-      prop = _bfd_elf_get_property (ebfd,
-                                   GNU_PROPERTY_X86_FEATURE_1_AND,
-                                   4);
-      prop->u.number |= features;
-      prop->pr_kind = property_number;
+      prop = NULL;
+      if (features)
+       {
+         /* If features is set, add GNU_PROPERTY_X86_FEATURE_1_IBT and
+            GNU_PROPERTY_X86_FEATURE_1_SHSTK.  */
+         prop = _bfd_elf_get_property (ebfd,
+                                       GNU_PROPERTY_X86_FEATURE_1_AND,
+                                       4);
+         prop->u.number |= features;
+         prop->pr_kind = property_number;
+       }
+      else if (has_text
+              && elf_tdata (info->output_bfd)->o->build_id.sec == NULL
+              && !htab->elf.dynamic_sections_created
+              && !info->traditional_format
+              && (info->output_bfd->flags & D_PAGED) != 0
+              && info->separate_code)
+       {
+         /* If the separate code program header is needed, make sure
+            that the first read-only PT_LOAD segment has no code by
+            adding a GNU_PROPERTY_X86_ISA_1_NEEDED note.  */
+         elf_property_list *list;
+         bfd_boolean need_property = TRUE;
+
+         for (list = elf_properties (ebfd); list; list = list->next)
+           switch (list->property.pr_type)
+             {
+             case GNU_PROPERTY_STACK_SIZE:
+             case GNU_PROPERTY_NO_COPY_ON_PROTECTED:
+             case GNU_PROPERTY_X86_ISA_1_NEEDED:
+               /* These properties won't be removed during merging.  */
+               need_property = FALSE;
+               break;
+             }
+
+         if (need_property)
+           {
+             prop = _bfd_elf_get_property (ebfd,
+                                           GNU_PROPERTY_X86_ISA_1_NEEDED,
+                                           4);
+             prop->u.number = GNU_PROPERTY_X86_ISA_1_486;
+             prop->pr_kind = property_number;
+           }
+       }
 
       /* Create the GNU property note section if needed.  */
-      if (pbfd == NULL)
+      if (prop != NULL && pbfd == NULL)
        {
          sec = bfd_make_section_with_flags (ebfd,
                                             NOTE_GNU_PROPERTY_SECTION_NAME,
@@ -2581,12 +2648,6 @@ error_alignment:
 
   pbfd = _bfd_elf_link_setup_gnu_properties (info);
 
-  bed = get_elf_backend_data (info->output_bfd);
-
-  htab = elf_x86_hash_table (info, bed->target_id);
-  if (htab == NULL)
-    return pbfd;
-
   htab->r_info = init_table->r_info;
   htab->r_sym = init_table->r_sym;
 
index 6a5609467d5e5c031264db7cc1cf563eb06e1ee6..1f757fda0c152a887a43f66e23284c9adda34658 100644 (file)
        || (ELF_ST_VISIBILITY ((H)->other) \
           && (H)->root.type == bfd_link_hash_undefweak))
 
+/* TRUE if this symbol isn't defined by a shared object.  */
+#define SYMBOL_DEFINED_NON_SHARED_P(H) \
+  ((H)->def_regular \
+   || (H)->root.linker_def \
+   || (H)->root.ldscript_def \
+   || ELF_COMMON_DEF_P (H))
+
 /* TRUE if relative relocation should be generated.  GOT reference to
    global symbol in PIC will lead to dynamic symbol.  It becomes a
    problem when "time" or "times" is defined as a variable in an
index 222d2e62c393455ef81d7ce62d269533d3908c08..38bee253c8e8e4cf7556288490daf13957e60f9b 100644 (file)
@@ -16,7 +16,7 @@
 
    In releases, the date is not included in either version strings or
    sonames.  */
-#define BFD_VERSION_DATE 20180718
+#define BFD_VERSION_DATE 20190122
 #define BFD_VERSION @bfd_version@
 #define BFD_VERSION_STRING  @bfd_version_package@ @bfd_version_string@
 #define REPORT_BUGS_TO @report_bugs_to@
index 32f47d5e0701ec0901d11cedcf6cbd8f853a54b6..2bb000a3c55b944071dd342f8fcec6f1e4330ba8 100644 (file)
@@ -1,3 +1,21 @@
+2019-02-18  Nick Clifton  <nickc@redhat.com>
+
+       Import from the mainline:
+       2018-11-27  Mark Wielaard  <mark@klomp.org>
+
+       PR binutils/23919
+       * readelf.c (dump_sections_as_strings): Remove bogus addralign check.
+       (dump_sections_as_bytes): Likewise.
+       (load_specific_debug_sections): Likewise.
+       * testsuite/binutils-all/dw2-3.rS: Adjust alignment.
+       * testsuite/binutils-all/dw2-3.rt: Likewise.
+
+2018-09-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23499
+       * readelf.c (get_symbol_version_string): Return _("<corrupt>")
+       for corrupt symbol version info.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index 1b50ba763137149a9d1e83d5e0baaf93f6cf2788..4b0efa884f89322378c9fd52b6a8030796a7a788 100644 (file)
@@ -11252,6 +11252,7 @@ get_symbol_version_string (Filedata *                   filedata,
   unsigned char data[2];
   unsigned short vers_data;
   unsigned long offset;
+  unsigned short max_vd_ndx;
 
   if (!is_dynsym
       || version_info[DT_VERSIONTAGIDX (DT_VERSYM)] == 0)
@@ -11269,6 +11270,8 @@ get_symbol_version_string (Filedata *                   filedata,
   if ((vers_data & VERSYM_HIDDEN) == 0 && vers_data == 0)
     return NULL;
 
+  max_vd_ndx = 0;
+
   /* Usually we'd only see verdef for defined symbols, and verneed for
      undefined symbols.  However, symbols defined by the linker in
      .dynbss for variables copied from a shared library in order to
@@ -11311,6 +11314,9 @@ get_symbol_version_string (Filedata *                   filedata,
              ivd.vd_flags = BYTE_GET (evd.vd_flags);
            }
 
+         if ((ivd.vd_ndx & VERSYM_VERSION) > max_vd_ndx)
+           max_vd_ndx = ivd.vd_ndx & VERSYM_VERSION;
+
          off += ivd.vd_next;
        }
       while (ivd.vd_ndx != (vers_data & VERSYM_VERSION) && ivd.vd_next != 0);
@@ -11402,6 +11408,9 @@ get_symbol_version_string (Filedata *                   filedata,
          return (ivna.vna_name < strtab_size
                  ? strtab + ivna.vna_name : _("<corrupt>"));
        }
+      else if ((max_vd_ndx || (vers_data & VERSYM_VERSION) != 1)
+              && (vers_data & VERSYM_VERSION) > max_vd_ndx)
+       return _("<corrupt>");
     }
   return NULL;
 }
@@ -13336,12 +13345,6 @@ dump_section_as_strings (Elf_Internal_Shdr * section, Filedata * filedata)
                    printable_section_name (filedata, section), chdr.ch_type);
              return FALSE;
            }
-         else if (chdr.ch_addralign != section->sh_addralign)
-           {
-             warn (_("compressed section '%s' is corrupted\n"),
-                   printable_section_name (filedata, section));
-             return FALSE;
-           }
          uncompressed_size = chdr.ch_size;
          start += compression_header_size;
          new_size -= compression_header_size;
@@ -13483,12 +13486,6 @@ dump_section_as_bytes (Elf_Internal_Shdr *  section,
                    printable_section_name (filedata, section), chdr.ch_type);
              return FALSE;
            }
-         else if (chdr.ch_addralign != section->sh_addralign)
-           {
-             warn (_("compressed section '%s' is corrupted\n"),
-                   printable_section_name (filedata, section));
-             return FALSE;
-           }
          uncompressed_size = chdr.ch_size;
          start += compression_header_size;
          new_size -= compression_header_size;
@@ -13658,12 +13655,6 @@ load_specific_debug_section (enum dwarf_section_display_enum  debug,
                    section->name, chdr.ch_type);
              return FALSE;
            }
-         else if (chdr.ch_addralign != sec->sh_addralign)
-           {
-             warn (_("compressed section '%s' is corrupted\n"),
-                   section->name);
-             return FALSE;
-           }
          uncompressed_size = chdr.ch_size;
          start += compression_header_size;
          size -= compression_header_size;
index f1637e9149fe70e68ec690ef29bb399184287af6..86bc73d9a2944fd6c3284cccc18f3992e7a42fab 100644 (file)
@@ -1,3 +1,3 @@
 #...
- +\[[ 0-9]+\] .debug_info +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +C +0 +0 +1
+ +\[[ 0-9]+\] .debug_info +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ [0-9a-f]+ +C +0 +0 +(4|8)
 #pass
index f59cbaa22b24ac87e7e14420104aee4b0dd9c6c7..74e7f8deca8129465b5188462b41b3eabd82d9cb 100644 (file)
@@ -1,6 +1,6 @@
 #...
  +\[[ 0-9]+\] .debug_info
- +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +0 +0 +1
+ +(PROGBITS|MIPS_DWARF) +0+ +[0-9a-f]+ +[0-9a-f]+ +[0-9a-f]+ +0 +0 +(4|8)
  +\[0+800\]: COMPRESSED
  +ZLIB, 0+9d, 1
 #pass
index bb4541900dd79243e2e8931b68cb4cdbe7ef4637..97d370dad36602dd9bdbfcc9fcceea0dd0990b1b 100644 (file)
@@ -1,3 +1,112 @@
+2019-02-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/24165
+       * config/tc-i386.h (MAX_MEM_FOR_RS_ALIGN_CODE): Set to
+       (alignment ? ((1 << alignment) - 1) : 1)
+       (i386_tc_frag_data): Add max_bytes.
+       (TC_FRAG_INIT): Track max_chars in max_bytes.
+       (HANDLE_ALIGN): Replace MAX_MEM_FOR_RS_ALIGN_CODE with
+       fragP->tc_frag_data.max_bytes.
+
+2019-02-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * config/tc-visium.c (md_assemble) <mode_cad>: Align instruction on
+       64-bit boundaries for the GR6.
+       * testsuite/gas/visium/allinsn_gr6.s: Tweak.
+       * testsuite/gas/visium/allinsn_gr6.d: Likewise.
+       * testsuite/gas/visium/bra-1.d: New test.
+       * testsuite/gas/visium/bra-1.s: Likewise.
+       * testsuite/gas/visium/visium.exp: Run bra-1 test.
+
+2018-12-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/23968
+       * config/tc-i386.h (TC_FORCE_RELOCATION_LOCAL): Put back
+       BFD_RELOC_X86_64_GOTPCREL.
+       * testsuite/gas/i386/i386.exp: Run x86-64-gotpcrel-2.
+       * testsuite/gas/i386/x86-64-gotpcrel-2.d: New file.
+       * testsuite/gas/i386/x86-64-gotpcrel-2.s: Likewise.
+       * testsuite/gas/i386/ilp32/x86-64-gotpcrel-2.d: Likewise.
+
+2018-11-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/23854
+       * config/tc-i386.c (output_disp): Disable GOT relaxation with
+       data prefix.
+       * testsuite/gas/i386/mixed-mode-reloc32.d: Updated.
+
+2018-10-19  Tamar Christina  <tamar.christina@arm.com>
+
+       * testsuite/gas/arm/undefined-insn-arm.d: Widen pe skip.
+       * testsuite/gas/arm/undefined-insn-thumb.d: Likewise.
+
+2018-10-19  Tamar Christina  <tamar.christina@arm.com>
+
+       * testsuite/gas/arm/undefined-insn-arm.d: New test.
+       * testsuite/gas/arm/undefined-insn-thumb.d: New test.
+       * testsuite/gas/arm/undefined-insn.s: New test.
+
+2018-10-16  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * testsuite/gas/aarch64/illegal-dotproduct.d: New test.
+       * testsuite/gas/aarch64/illegal-dotproduct.l: New test.
+       * testsuite/gas/aarch64/illegal-dotproduct.s: New test.
+
+2018-10-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/gas/i386/se1.s: Add enclv.
+       * testsuite/gas/i386/x86-64-se1.s: Likewise.
+       * testsuite/gas/i386/se1.d: Updated.
+       * testsuite/gas/i386/x86-64-se1.d: Likewise.
+
+2018-09-18  Tamar Christina  <tamar.christina@arm.com>
+
+       * config/tc-aarch64.c (output_operand_error_report): Apply filtering to
+       current instead of head message.
+
+2018-09-17  Nick Clifton  <nickc@redhat.com>
+
+       backport from mainline:
+       * 2018-08-14  Robert Yang  <liezhi.yang@windriver.com>
+
+       * as.c (main): Improve check for input file matching output file.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/gas/i386/evex-no-scale.s: Removed.
+       * testsuite/gas/i386/evex-no-scale-32.d: Don't use
+       evex-no-scale.s.
+       * testsuite/gas/i386/evex-no-scale-64.d: Likewise.
+       * testsuite/gas/i386/evex-no-scale-32.s: New file.
+       * testsuite/gas/i386/evex-no-scale-64.s: Likewise.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/gas/i386/i386.exp: Run evex-no-scale-32 and
+       evex-no-scale-64 only for ELF targets.
+
+2018-07-31  Jan Beulich  <jbeulich@suse.com>
+
+       PR gas/23465
+       * config/tc-i386.c (output_disp): Restrict scaling.
+       * testsuite/gas/i386/evex-no-scale.s,
+         testsuite/gas/i386/evex-no-scale-32.d
+         testsuite/gas/i386/evex-no-scale-64.d: New.
+       * testsuite/gas/i386/i386.exp: Run new tests.
+
+2018-07-30  John David Anglin  <danglin@gcc.gnu.org>
+
+       * config/tc-hppa.c: Include "struc-symbol.h".
+       (pa_build_unwind_subspace): Use call_info->start_symbol->sy_frag
+       instead of frag_now for local symbol replacement.
+
+2018-07-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/23418
+       * testsuite/gas/i386/xmmword.s: Add tests for vcvtps2qq,
+       vcvtps2uqq, vcvttps2qq and vcvttps2uqq.
+       * testsuite/gas/i386/xmmword.l: Updated.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index 02c7d2970bf3c4690aa684c9d6446f6731395a79..919c24a24a5f8ffc122f59b84c86054ca94bf4f4 100644 (file)
--- a/gas/as.c
+++ b/gas/as.c
@@ -1254,14 +1254,27 @@ main (int argc, char ** argv)
        {
          struct stat sib;
 
-         if (stat (argv[i], &sib) == 0)
+         /* Check that the input file and output file are different.  */
+         if (stat (argv[i], &sib) == 0
+             && sib.st_ino == sob.st_ino
+             /* POSIX emulating systems may support stat() but if the
+                underlying file system does not support a file serial number
+                of some kind then they will return 0 for the inode.  So
+                two files with an inode of 0 may not actually be the same.
+                On real POSIX systems no ordinary file will ever have an
+                inode of 0.  */
+             && sib.st_ino != 0
+             /* Different files may have the same inode number if they
+                reside on different devices, so check the st_dev field as
+                well.  */
+             && sib.st_dev == sob.st_dev)
            {
-             if (sib.st_ino == sob.st_ino && sib.st_ino != 0)
-               {
-                 /* Don't let as_fatal remove the output file!  */
-                 out_file_name = NULL;
-                 as_fatal (_("The input and output files must be distinct"));
-               }
+             const char *saved_out_file_name = out_file_name;
+
+             /* Don't let as_fatal remove the output file!  */
+             out_file_name = NULL;
+             as_fatal (_("The input '%s' and output '%s' files are the same"),
+                       argv[i], saved_out_file_name);
            }
        }
     }
index 31985963e314cbe772afbd190d4b0ca6e9608466..c77de21d19dc1cc73df05f17c0e985152f3992ed 100644 (file)
@@ -4809,7 +4809,7 @@ output_operand_error_report (char *str, bfd_boolean non_fatal_only)
       /* If we don't want to print non-fatal errors then don't consider them
         at all.  */
       if (curr->detail.kind != kind
-         || (non_fatal_only && !head->detail.non_fatal))
+         || (non_fatal_only && !curr->detail.non_fatal))
        continue;
       /* If there are multiple errors, pick up the one with the highest
         mismatching operand index.  In the case of multiple errors with
index e69fdb2b397cf7563edab6fddbb652d8c4155917..ccae68cb4060688e282f4662065fe2a380fe80df 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "as.h"
 #include "safe-ctype.h"
+#include "struc-symbol.h"
 #include "subsegs.h"
 #include "dw2gencfi.h"
 
@@ -5989,7 +5990,8 @@ pa_build_unwind_subspace (struct call_info *call_info)
   else
     {
       symbolP = symbol_new (name, now_seg,
-                           S_GET_VALUE (call_info->start_symbol), frag_now);
+                           S_GET_VALUE (call_info->start_symbol),
+                           call_info->start_symbol->sy_frag);
       gas_assert (symbolP);
       S_CLEAR_EXTERNAL (symbolP);
       symbol_table_insert (symbolP);
index 2d20f1cae9470f57c5529aa6016373396c79f4be..a288a31844597405af6e94ecbae522014e5c7f05 100644 (file)
@@ -7857,7 +7857,8 @@ output_disp (fragS *insn_start_frag, offsetT insn_start_off)
              int size = disp_size (n);
              offsetT val = i.op[n].disps->X_add_number;
 
-             val = offset_in_range (val >> i.memshift, size);
+             val = offset_in_range (val >> (size == 1 ? i.memshift : 0),
+                                    size);
              p = frag_more (size);
              md_number_to_chars (p, val, size);
            }
@@ -7942,12 +7943,13 @@ output_disp (fragS *insn_start_frag, offsetT insn_start_off)
              /* Check for "call/jmp *mem", "mov mem, %reg",
                 "test %reg, mem" and "binop mem, %reg" where binop
                 is one of adc, add, and, cmp, or, sbb, sub, xor
-                instructions.  Always generate R_386_GOT32X for
-                "sym*GOT" operand in 32-bit mode.  */
-             if ((generate_relax_relocations
-                  || (!object_64bit
-                      && i.rm.mode == 0
-                      && i.rm.regmem == 5))
+                instructions without data prefix.  Always generate
+                R_386_GOT32X for "sym*GOT" operand in 32-bit mode.  */
+             if (i.prefix[DATA_PREFIX] == 0
+                 && (generate_relax_relocations
+                     || (!object_64bit
+                         && i.rm.mode == 0
+                         && i.rm.regmem == 5))
                  && (i.rm.mode == 2
                      || (i.rm.mode == 0 && i.rm.regmem == 5))
                  && ((i.operands == 1
index 833047980bbc4dab139f0267a13588ae2ffebea9..46a0381777eddf48ce38f2aa0f8cbd36f18d928e 100644 (file)
@@ -174,6 +174,7 @@ extern int tc_i386_fix_adjustable (struct fix *);
   (GENERIC_FORCE_RELOCATION_LOCAL (FIX)                                \
    || (FIX)->fx_r_type == BFD_RELOC_386_PLT32                  \
    || (FIX)->fx_r_type == BFD_RELOC_386_GOTPC                  \
+   || (FIX)->fx_r_type == BFD_RELOC_X86_64_GOTPCREL            \
    || (FIX)->fx_r_type == BFD_RELOC_X86_64_GOTPCRELX           \
    || (FIX)->fx_r_type == BFD_RELOC_X86_64_REX_GOTPCRELX)
 
@@ -205,7 +206,7 @@ if ((n)                                                                     \
     goto around;                                                       \
   }
 
-#define MAX_MEM_FOR_RS_ALIGN_CODE 4095
+#define MAX_MEM_FOR_RS_ALIGN_CODE  (alignment ? ((1 << alignment) - 1) : 1)
 
 void i386_print_statistics (FILE *);
 #define tc_print_statistics i386_print_statistics
@@ -250,6 +251,7 @@ struct i386_tc_frag_data
   enum processor_type isa;
   i386_cpu_flags isa_flags;
   enum processor_type tune;
+  unsigned int max_bytes;
 };
 
 /* We need to emit the right NOP pattern in .align frags.  This is
@@ -257,12 +259,14 @@ struct i386_tc_frag_data
    the isa/tune settings at the time the .align was assembled.  */
 #define TC_FRAG_TYPE struct i386_tc_frag_data
 
+/* NB: max_chars is a local variable in frag_var_init.  */
 #define TC_FRAG_INIT(FRAGP)                                    \
  do                                                            \
    {                                                           \
      (FRAGP)->tc_frag_data.isa = cpu_arch_isa;                 \
      (FRAGP)->tc_frag_data.isa_flags = cpu_arch_isa_flags;     \
      (FRAGP)->tc_frag_data.tune = cpu_arch_tune;               \
+     (FRAGP)->tc_frag_data.max_bytes = max_chars;              \
    }                                                           \
  while (0)
 
@@ -279,7 +283,8 @@ if (fragP->fr_type == rs_align_code)                                        \
     offsetT __count = (fragP->fr_next->fr_address                      \
                       - fragP->fr_address                              \
                       - fragP->fr_fix);                                \
-    if (__count > 0 && __count <= MAX_MEM_FOR_RS_ALIGN_CODE)           \
+    if (__count > 0                                                    \
+       && (unsigned int) __count <= fragP->tc_frag_data.max_bytes)     \
       md_generate_nops (fragP, fragP->fr_literal + fragP->fr_fix,      \
                        __count, 0);                                    \
   }
index 0bcb6e3af4ea54e1f55cf250deb7ceed88cf58b5..409ea99aaf936fd34e9c3c83de0934c1fdfd4f1c 100644 (file)
@@ -1368,6 +1368,10 @@ md_assemble (char *str0)
       if (previous_mode == mode_cad || previous_mode == mode_ci)
        as_bad ("branch instruction in delay slot");
 
+      /* For the GR6, BRA insns must be aligned on 64-bit boundaries.  */
+      if (visium_arch == VISIUM_ARCH_GR6)
+       do_align (3, NULL, 0, 0);
+
       this_dest = r3;
       condition_code = cc;
       break;
diff --git a/gas/testsuite/gas/aarch64/illegal-dotproduct.d b/gas/testsuite/gas/aarch64/illegal-dotproduct.d
new file mode 100644 (file)
index 0000000..8d8b1b8
--- /dev/null
@@ -0,0 +1,4 @@
+#as: -march=armv8.2-a+dotprod
+#name: Invalid dotproduct instructions.
+#source: illegal-dotproduct.s
+#error-output: illegal-dotproduct.l
diff --git a/gas/testsuite/gas/aarch64/illegal-dotproduct.l b/gas/testsuite/gas/aarch64/illegal-dotproduct.l
new file mode 100644 (file)
index 0000000..06d0d78
--- /dev/null
@@ -0,0 +1,13 @@
+[^:]+: Assembler messages:
+[^:]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `udot V0.2S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Error: operand mismatch -- `udot V0.4S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Info:    did you mean this\?
+[^:]+:[0-9]+: Info:            udot v0.2s, v0.8b, v0.4b\[4\]
+[^:]+:[0-9]+: Info:    other valid variant\(s\):
+[^:]+:[0-9]+: Info:            udot v0.4s, v0.16b, v0.4b\[4\]
+[^:]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `sdot V0.2S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Error: operand mismatch -- `sdot V0.2S,V0.8B,V0.4H\[4\]'
+[^:]+:[0-9]+: Info:    did you mean this\?
+[^:]+:[0-9]+: Info:            sdot v0.2s, v0.8b, v0.4b\[4\]
+[^:]+:[0-9]+: Info:    other valid variant\(s\):
+[^:]+:[0-9]+: Info:            sdot v0.4s, v0.16b, v0.4b\[4\]
diff --git a/gas/testsuite/gas/aarch64/illegal-dotproduct.s b/gas/testsuite/gas/aarch64/illegal-dotproduct.s
new file mode 100644 (file)
index 0000000..9c714ae
--- /dev/null
@@ -0,0 +1,4 @@
+UDOT   V0.2S, V0.8B, V0.4B[4]
+UDOT   V0.4S, V0.8B, V0.4B[4]
+SDOT   V0.2S, V0.8B, V0.4B[4]
+SDOT   V0.2S, V0.8B, V0.4H[4]
diff --git a/gas/testsuite/gas/arm/undefined-insn-arm.d b/gas/testsuite/gas/arm/undefined-insn-arm.d
new file mode 100644 (file)
index 0000000..175e778
--- /dev/null
@@ -0,0 +1,5 @@
+#name: Undefined binary printing in arm mode
+#skip: *-*-pe *-*-vxworks
+#source: undefined-insn.s
+#objdump: -D -b binary -m armv5te
+#...
diff --git a/gas/testsuite/gas/arm/undefined-insn-thumb.d b/gas/testsuite/gas/arm/undefined-insn-thumb.d
new file mode 100644 (file)
index 0000000..a5b4159
--- /dev/null
@@ -0,0 +1,5 @@
+#name: Undefined binary printing in thumb mode
+#skip: *-*-pe *-*-vxworks
+#source: undefined-insn.s
+#objdump: -D -b binary -m armv5te -M force-thumb
+#...
diff --git a/gas/testsuite/gas/arm/undefined-insn.s b/gas/testsuite/gas/arm/undefined-insn.s
new file mode 100644 (file)
index 0000000..cf59a03
--- /dev/null
@@ -0,0 +1 @@
+       .inst 0xffffffff
diff --git a/gas/testsuite/gas/i386/evex-no-scale-32.d b/gas/testsuite/gas/i386/evex-no-scale-32.d
new file mode 100644 (file)
index 0000000..0a2860d
--- /dev/null
@@ -0,0 +1,12 @@
+#objdump: -dw
+#name: ix86 EVEX no disp scaling
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <disp>:
+ +[a-f0-9]+:   62 f1 7c 48 28 04 05 40 00 00 00        vmovaps 0x40\(,%eax,1\),%zmm0
+ +[a-f0-9]+:   62 f1 7c 48 28 04 25 40 00 00 00        vmovaps 0x40\(,%eiz,1\),%zmm0
+ +[a-f0-9]+:   62 f1 7c 48 28 05 40 00 00 00   vmovaps 0x40,%zmm0
+ +[a-f0-9]+:   67 62 f1 7c 48 28 06 40 00      vmovaps 0x40,%zmm0
diff --git a/gas/testsuite/gas/i386/evex-no-scale-32.s b/gas/testsuite/gas/i386/evex-no-scale-32.s
new file mode 100644 (file)
index 0000000..e28c73f
--- /dev/null
@@ -0,0 +1,7 @@
+       .allow_index_reg
+       .text
+disp:
+       vmovaps 64(,%eax), %zmm0
+       vmovaps 64(,%eiz), %zmm0
+       vmovaps 64, %zmm0
+       addr16 vmovaps 64, %zmm0
diff --git a/gas/testsuite/gas/i386/evex-no-scale-64.d b/gas/testsuite/gas/i386/evex-no-scale-64.d
new file mode 100644 (file)
index 0000000..d52d947
--- /dev/null
@@ -0,0 +1,14 @@
+#objdump: -dw
+#name: x86-64 EVEX no disp scaling
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <disp>:
+ +[a-f0-9]+:   62 f1 7c 48 28 05 00 fc ff ff   vmovaps -0x400\(%rip\),%zmm0        # .*
+ +[a-f0-9]+:   62 f1 7c 48 28 04 05 40 00 00 00        vmovaps 0x40\(,%rax,1\),%zmm0
+ +[a-f0-9]+:   62 f1 7c 48 28 04 25 40 00 00 00        vmovaps 0x40,%zmm0
+ +[a-f0-9]+:   67 62 f1 7c 48 28 04 05 40 00 00 00     vmovaps 0x40\(,%eax,1\),%zmm0
+ +[a-f0-9]+:   67 62 f1 7c 48 28 04 25 40 00 00 00     addr32 vmovaps 0x40,%zmm0
+ +[a-f0-9]+:   62 f1 7c 48 28 04 25 40 00 00 00        vmovaps 0x40,%zmm0
diff --git a/gas/testsuite/gas/i386/evex-no-scale-64.s b/gas/testsuite/gas/i386/evex-no-scale-64.s
new file mode 100644 (file)
index 0000000..bc3749c
--- /dev/null
@@ -0,0 +1,9 @@
+       .allow_index_reg
+       .text
+disp:
+       vmovaps -1024(%rip), %zmm0
+       vmovaps 64(,%rax), %zmm0
+       vmovaps 64(,%riz), %zmm0
+       vmovaps 64(,%eax), %zmm0
+       vmovaps 64(,%eiz), %zmm0
+       vmovaps 64, %zmm0
index 9cc927a96269e8fc23c17e9dacb1af38b99b6228..952902cbb60b1513d402278031621825b64b3c35 100644 (file)
@@ -525,6 +525,8 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
        run_dump_test "nop-5"
        run_dump_test "nop-6"
 
+       run_dump_test "evex-no-scale-32"
+
        if { [gas_64_check] } then {
            run_dump_test "att-regs"
            run_dump_test "intel-regs"
@@ -1011,12 +1013,15 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
 
        run_dump_test "x86-64-gotpcrel"
        run_dump_test "x86-64-gotpcrel-no-relax"
+       run_dump_test "x86-64-gotpcrel-2"
 
        run_dump_test "x86-64-addend"
        run_dump_test "x86-64-nop-3"
        run_dump_test "x86-64-nop-4"
        run_dump_test "x86-64-nop-5"
        run_dump_test "x86-64-nop-6"
+
+       run_dump_test "evex-no-scale-64"
     }
 
     set ASFLAGS "$old_ASFLAGS"
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel-2.d b/gas/testsuite/gas/i386/ilp32/x86-64-gotpcrel-2.d
new file mode 100644 (file)
index 0000000..41b9ac2
--- /dev/null
@@ -0,0 +1,13 @@
+#source: ../x86-64-gotpcrel-2.s
+#as: --x32 -mrelax-relocations=no
+#objdump: -dwr
+#name: x86-64 (ILP32) gotpcrel (2)
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <foo>:
+ +[a-f0-9]+:   48 8b 05 00 00 00 00    mov    0x0\(%rip\),%rax        # 7 <foo\+0x7>   3: R_X86_64_GOTPCREL    foo-0x4
+#pass
index a2ef6a0b8584a21d0cf90ce627f07ef52ce54ce4..59234bc9be0f96c04506fcf58f952291ab36e69a 100644 (file)
@@ -7,7 +7,7 @@
 
 RELOCATION RECORDS FOR \[.text\]:
 OFFSET[        ]+TYPE[         ]+VALUE[        ]*
-[0-9a-f]+[     ]+R_386_GOT32X[         ]+xtrn[         ]*
+[0-9a-f]+[     ]+R_386_GOT32[  ]+xtrn[         ]*
 [0-9a-f]+[     ]+R_386_PLT32[  ]+xtrn[         ]*
 [0-9a-f]+[     ]+R_386_GOT32X[         ]+xtrn[         ]*
 [0-9a-f]+[     ]+R_386_PLT32[  ]+xtrn[         ]*
index ff2685c781d3ba22cb3529e89dfbf4acbfda655f..d7800ab885195693fc6003eea3807e9d8bb90e2b 100644 (file)
@@ -10,4 +10,5 @@ Disassembly of section .text:
 0+ <_start>:
 [      ]*[a-f0-9]+:    0f 01 cf                encls  
 [      ]*[a-f0-9]+:    0f 01 d7                enclu  
+[      ]*[a-f0-9]+:    0f 01 c0                enclv  
 #pass
index 1b57ac87fe7c320f85ab8a2a6defbaa5313f0b81..92d57952c022b27a0bd9891fdafd843496c34381 100644 (file)
@@ -5,3 +5,4 @@ _start:
 
        encls
        enclu
+       enclv
diff --git a/gas/testsuite/gas/i386/x86-64-gotpcrel-2.d b/gas/testsuite/gas/i386/x86-64-gotpcrel-2.d
new file mode 100644 (file)
index 0000000..3d07631
--- /dev/null
@@ -0,0 +1,11 @@
+#as: -mrelax-relocations=no
+#objdump: -dwr
+
+.*: +file format .*
+
+
+Disassembly of section .text:
+
+0+ <foo>:
+ +[a-f0-9]+:   48 8b 05 00 00 00 00    mov    0x0\(%rip\),%rax        # 7 <foo\+0x7>   3: R_X86_64_GOTPCREL    foo-0x4
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-gotpcrel-2.s b/gas/testsuite/gas/i386/x86-64-gotpcrel-2.s
new file mode 100644 (file)
index 0000000..db5ddf5
--- /dev/null
@@ -0,0 +1,3 @@
+       .text
+foo:
+       movq    foo@GOTPCREL(%rip), %rax
index 29494f00901167fd86729c91e3eea62977fc0507..a515219406a8b7c8225766cf2de604856c3d93ad 100644 (file)
@@ -10,4 +10,5 @@ Disassembly of section .text:
 0+ <_start>:
 [      ]*[a-f0-9]+:    0f 01 cf                encls  
 [      ]*[a-f0-9]+:    0f 01 d7                enclu  
+[      ]*[a-f0-9]+:    0f 01 c0                enclv  
 #pass
index 1b57ac87fe7c320f85ab8a2a6defbaa5313f0b81..92d57952c022b27a0bd9891fdafd843496c34381 100644 (file)
@@ -5,3 +5,4 @@ _start:
 
        encls
        enclu
+       enclv
index ce3af8d1501a30e12336c6759eba0a4083732463..7d25cb3de2ee9b78c68f34d78b21605cabb8ea2c 100644 (file)
@@ -99,3 +99,7 @@
 .*:127: Error: .* `vpmovzxwq'
 .*:128: Error: .* `vpmovzxwq'
 .*:129: Error: .* `vpmovzxwq'
+.*:131: Error: .* `vcvtps2qq'
+.*:132: Error: .* `vcvtps2uqq'
+.*:133: Error: .* `vcvttps2qq'
+.*:134: Error: .* `vcvttps2uqq'
index 47d2d8d595807001705940dd7e91697d61f3228b..ffe7aca3cb1200ac5f6849e1a41110b084459db1 100644 (file)
@@ -127,3 +127,8 @@ xmmword:
        vpmovzxwq       xmm0{k7}, xmmword ptr [eax]
        vpmovzxwq       ymm0, xmmword ptr [eax]
        vpmovzxwq       ymm0{k7}, xmmword ptr [eax]
+
+       vcvtps2qq       xmm0, xmmword ptr [rax]
+       vcvtps2uqq      xmm0, xmmword ptr [rax]
+       vcvttps2qq      xmm0, xmmword ptr [rax]
+       vcvttps2uqq     xmm0, xmmword ptr [rax]
index bb198eca8e5a70a52c9892a53699aa5655fcb0ee..c7f627bb34f12a9c94cf832afe105940fa68e491 100644 (file)
@@ -86,10 +86,10 @@ Disassembly of section .text:
  120:  06 a5 1a 02     asr.w   r6,r5,0
  124:  86 a5 1a 12     asr.w   r6,r5,1
  128:  86 a7 23 f1     asr.b   r8,r7,31
- 12c:  0f 89 28 04     bra     eq,r9,r10
- 130:  07 a0 00 04     rflag   r0
- 134:  af 87 04 04     bra     ne,r7,r1
- 138:  07 e0 ae 04     readmda r11
+ 12c:  07 a0 00 04     rflag   r0
+ 130:  0f 89 28 04     bra     eq,r9,r10
+ 134:  07 e0 ae 04     readmda r11
+ 138:  af 87 04 04     bra     ne,r7,r1
  13c:  07 e0 b3 f4     eamread r12,31
  140:  87 cd 30 04     extb.l  r12,r13
  144:  87 cf 38 02     extb.w  r14,r15
@@ -130,8 +130,8 @@ Disassembly of section .text:
  1d0:  84 a7 7f ff     moviu   r7,0x7FFF
  1d4:  04 c6 00 01     moviq   r6,1
  1d8:  84 47 ff ff     subi    r7,65535
- 1dc:  ff 86 00 04     bra     tr,r6,r0
- 1e0:  86 00 00 04     add.l   r0,r0,r0
+ 1dc:  86 00 00 04     add.l   r0,r0,r0
+ 1e0:  ff 86 00 04     bra     tr,r6,r0
  1e4:  d3 e3 84 5c     fpinst  10,f1,f3,f5
  1e8:  db e4 88 6c     fpinst  11,f2,f4,f6
  1ec:  7b ed ac fc     fpinst  15,f11,f13,f15
index 32953fbfb887cea6ed5400d8985711dfcc18b5b7..11006b836bcf99faba9046a2b6124919f4006ae1 100644 (file)
@@ -93,11 +93,10 @@ sreg:
        asr.w   r6,r5,1
        asr.b   r8,r7,31
 
-       bra     eq,r9,r10
        rflag   r0
-       bra     ne,r7,r1
-
+       bra     eq,r9,r10
        eamread r11,0
+       bra     ne,r7,r1
        eamread r12,31
 
        extb.l  r12,r13
@@ -151,8 +150,8 @@ sreg:
        moviq   r6,1
        subi    r7,65535
 
-       bra     tr,r6,r0
        add.l   r0,r0,r0
+       bra     tr,r6,r0
 
 
        fpinst  10,f1,f3,f5
diff --git a/gas/testsuite/gas/visium/bra-1.d b/gas/testsuite/gas/visium/bra-1.d
new file mode 100644 (file)
index 0000000..483b36b
--- /dev/null
@@ -0,0 +1,12 @@
+#as: -mtune=gr6
+#objdump: -d
+#name: bra-1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+00000000 <foo>:
+       ...
+   8:  ff 95 54 04     bra     tr,r21,r21
+   c:  00 00 00 00     nop
diff --git a/gas/testsuite/gas/visium/bra-1.s b/gas/testsuite/gas/visium/bra-1.s
new file mode 100644 (file)
index 0000000..11544b8
--- /dev/null
@@ -0,0 +1,5 @@
+        .text
+foo:
+       nop
+       bra tr,r21,r21
+        nop
index 1451d5865ccb1234e3867ed98e4a4b3b40887908..659728462d3bc695ee370d8de7b1c352e2fcc4b4 100644 (file)
@@ -24,6 +24,7 @@ if [istarget visium-*-*] {
     run_dump_test "allinsn_def"
     run_dump_test "allinsn_gr5"
     run_dump_test "allinsn_gr6"
+    run_dump_test "bra-1"
     run_dump_test "brr-1"
     run_dump_test "brr-2"
     run_dump_test "high-1"
index 18af5e69b193a5c7e8f50255def046404a97538f..10ebc7632554b436afe557ea984947cc091fecc6 100644 (file)
@@ -1,3 +1,34 @@
+2019-02-18  Nick Clifton  <nickc@redhat.com>
+
+       Import from the mainline:
+       2018-12-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/23919
+       * merge.cc (Output_merge_string<Char_type>::do_add_input_section):
+       Get addralign from decompressed_section_contents.
+       * object.cc (build_compressed_section_map): Set info.addralign.
+       (Object::decompressed_section_contents): Add a palign
+       argument and store p->second.addralign in *palign if it isn't
+       NULL.
+       * object.h (Compressed_section_info): Add addralign.
+       (section_is_compressed): Add a palign argument, default it
+       to NULL, store p->second.addralign in *palign if it isn't NULL.
+       (Object::decompressed_section_contents): Likewise.
+       * output.cc (Output_section::add_input_section): Get addralign
+       from section_is_compressed.
+
+2018-08-06  Cary Coutant  <ccoutant@gmail.com>
+
+       PR gold/23455
+       * options.h (General_options): Add --warn-drop-version option.
+       * symtab.cc (Symbol_table::set_dynsym_indexes): Check it.
+
+2018-08-06  Cary Coutant  <ccoutant@gmail.com>
+
+       * target.h (Sized_target::record_gnu_property): Change first two
+       parameters to unsigned int.
+       * x86_64.cc (Target_x86_64::record_gnu_property): Likewise.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index de00ee9ae9c0f90c6327bcda7d4665530f1c0ee1..d7de11789f762a6643c883c46996baac03081a22 100644 (file)
@@ -440,9 +440,11 @@ Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
 {
   section_size_type sec_len;
   bool is_new;
+  uint64_t addralign = this->addralign();
   const unsigned char* pdata = object->decompressed_section_contents(shndx,
                                                                     &sec_len,
-                                                                    &is_new);
+                                                                    &is_new,
+                                                                    &addralign);
 
   const Char_type* p = reinterpret_cast<const Char_type*>(pdata);
   const Char_type* pend = p + sec_len / sizeof(Char_type);
@@ -494,7 +496,7 @@ Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
   // aligned, so each string within the section must retain the same
   // modulo.
   uintptr_t init_align_modulo = (reinterpret_cast<uintptr_t>(pdata)
-                                & (this->addralign() - 1));
+                                & (addralign - 1));
   bool has_misaligned_strings = false;
 
   while (p < pend)
@@ -503,7 +505,7 @@ Output_merge_string<Char_type>::do_add_input_section(Relobj* object,
 
       // Within merge input section each string must be aligned.
       if (len != 0
-         && ((reinterpret_cast<uintptr_t>(p) & (this->addralign() - 1))
+         && ((reinterpret_cast<uintptr_t>(p) & (addralign - 1))
              != init_align_modulo))
          has_misaligned_strings = true;
 
index 374340fa16c0ce63ed79e7c82c9020ca46a92544..711793e5e4a10597f889e2f6ca0f0c9b29478ee7 100644 (file)
@@ -751,11 +751,13 @@ build_compressed_section_map(
              const unsigned char* contents =
                  obj->section_contents(i, &len, false);
              uint64_t uncompressed_size;
+             Compressed_section_info info;
              if (is_zcompressed)
                {
                  // Skip over the ".zdebug" prefix.
                  name += 7;
                  uncompressed_size = get_uncompressed_size(contents, len);
+                 info.addralign = shdr.get_sh_addralign();
                }
              else
                {
@@ -763,8 +765,8 @@ build_compressed_section_map(
                  name += 6;
                  elfcpp::Chdr<size, big_endian> chdr(contents);
                  uncompressed_size = chdr.get_ch_size();
+                 info.addralign = chdr.get_ch_addralign();
                }
-             Compressed_section_info info;
              info.size = convert_to_section_size_type(uncompressed_size);
              info.flag = shdr.get_sh_flags();
              info.contents = NULL;
@@ -3060,7 +3062,8 @@ const unsigned char*
 Object::decompressed_section_contents(
     unsigned int shndx,
     section_size_type* plen,
-    bool* is_new)
+    bool* is_new,
+    uint64_t* palign)
 {
   section_size_type buffer_size;
   const unsigned char* buffer = this->do_section_contents(shndx, &buffer_size,
@@ -3087,6 +3090,8 @@ Object::decompressed_section_contents(
     {
       *plen = uncompressed_size;
       *is_new = false;
+      if (palign != NULL)
+       *palign = p->second.addralign;
       return p->second.contents;
     }
 
@@ -3108,6 +3113,8 @@ Object::decompressed_section_contents(
   // once in this pass.
   *plen = uncompressed_size;
   *is_new = true;
+  if (palign != NULL)
+    *palign = p->second.addralign;
   return uncompressed_data;
 }
 
index 0b786a5471ed84cc8586f2096af8175a717f453f..b99548463d726e61854849135699c652ec5b2253 100644 (file)
@@ -373,6 +373,7 @@ struct Compressed_section_info
 {
   section_size_type size;
   elfcpp::Elf_Xword flag;
+  uint64_t addralign;
   const unsigned char* contents;
 };
 typedef std::map<unsigned int, Compressed_section_info> Compressed_section_map;
@@ -808,7 +809,8 @@ class Object
 
   bool
   section_is_compressed(unsigned int shndx,
-                       section_size_type* uncompressed_size) const
+                       section_size_type* uncompressed_size,
+                       elfcpp::Elf_Xword* palign = NULL) const
   {
     if (this->compressed_sections_ == NULL)
       return false;
@@ -818,6 +820,8 @@ class Object
       {
        if (uncompressed_size != NULL)
          *uncompressed_size = p->second.size;
+       if (palign != NULL)
+         *palign = p->second.addralign;
        return true;
       }
     return false;
@@ -828,7 +832,7 @@ class Object
   // by the caller.
   const unsigned char*
   decompressed_section_contents(unsigned int shndx, section_size_type* plen,
-                               bool* is_cached);
+                               bool* is_cached, uint64_t* palign = NULL);
 
   // Discard any buffers of decompressed sections.  This is done
   // at the end of the Add_symbols task.
index 98d6be8009248f3f4bbf9c365f96644bbc119c77..11054981c9ab6a153fa4ed47cbf4c70bbbc97720 100644 (file)
@@ -1361,6 +1361,10 @@ class General_options
   DEFINE_bool_ignore(warn_constructors, options::TWO_DASHES, '\0',
                     N_("Ignored"), N_("Ignored"));
 
+  DEFINE_bool(warn_drop_version, options::TWO_DASHES, '\0', false,
+             N_("Warn when discarding version information"),
+             N_("Do not warn when discarding version information"));
+
   DEFINE_bool(warn_execstack, options::TWO_DASHES, '\0', false,
              N_("Warn if the stack is executable"),
              N_("Do not warn if the stack is executable"));
index 1701db1c99f18f5a0f8645ff2d548d7961098cc5..51836db80e135f4e40844df6baca8418fadb0935 100644 (file)
@@ -2448,7 +2448,14 @@ Output_section::add_input_section(Layout* layout,
                                  unsigned int reloc_shndx,
                                  bool have_sections_script)
 {
+  section_size_type input_section_size = shdr.get_sh_size();
+  section_size_type uncompressed_size;
   elfcpp::Elf_Xword addralign = shdr.get_sh_addralign();
+
+  if (object->section_is_compressed(shndx, &uncompressed_size,
+                                   &addralign))
+    input_section_size = uncompressed_size;
+
   if ((addralign & (addralign - 1)) != 0)
     {
       object->error(_("invalid alignment %lu for section \"%s\""),
@@ -2498,11 +2505,6 @@ Output_section::add_input_section(Layout* layout,
        }
     }
 
-  section_size_type input_section_size = shdr.get_sh_size();
-  section_size_type uncompressed_size;
-  if (object->section_is_compressed(shndx, &uncompressed_size))
-    input_section_size = uncompressed_size;
-
   off_t offset_in_section;
 
   if (this->has_fixed_layout())
index aa7644156f5eca85ad908fb68c974a641277709c..759e0d0222f38cd17905d35555f223e4e8bc1e75 100644 (file)
@@ -2623,11 +2623,12 @@ Symbol_table::set_dynsym_indexes(unsigned int index,
                versions->record_version(this, dynpool, sym);
              else
                {
-                 gold_warning(_("discarding version information for "
-                                "%s@%s, defined in unused shared library %s "
-                                "(linked with --as-needed)"),
-                              sym->name(), sym->version(),
-                              sym->object()->name().c_str());
+                 if (parameters->options().warn_drop_version())
+                   gold_warning(_("discarding version information for "
+                                  "%s@%s, defined in unused shared library %s "
+                                  "(linked with --as-needed)"),
+                                sym->name(), sym->version(),
+                                sym->object()->name().c_str());
                  sym->clear_version();
                }
            }
index bb312067b5f2a621ab8abaa4de819b0e9bc20c33..bbc87396f62f2d795178a3b9e6e0c5ea2ac69f89 100644 (file)
@@ -1147,7 +1147,8 @@ class Sized_target : public Target
   // Record a target-specific program property in the .note.gnu.property
   // section.
   virtual void
-  record_gnu_property(int, int, size_t, const unsigned char*, const Object*)
+  record_gnu_property(unsigned int, unsigned int, size_t,
+                     const unsigned char*, const Object*)
   { }
 
   // Merge the target-specific program properties from the current object.
index 27f273d64b30b49e4fa16e99ab4f1a1a43c38ae5..9d742f6f1320cf0b249eddb08a4987fe7fb7e4c6 100644 (file)
@@ -1307,7 +1307,8 @@ class Target_x86_64 : public Sized_target<size, false>
   // Record a target-specific program property in the .note.gnu.property
   // section.
   void
-  record_gnu_property(int, int, size_t, const unsigned char*, const Object*);
+  record_gnu_property(unsigned int, unsigned int, size_t,
+                     const unsigned char*, const Object*);
 
   // Merge the target-specific program properties from the current object.
   void
@@ -1579,7 +1580,7 @@ Target_x86_64<size>::rela_irelative_section(Layout* layout)
 template<int size>
 void
 Target_x86_64<size>::record_gnu_property(
-    int, int pr_type,
+    unsigned int, unsigned int pr_type,
     size_t pr_datasz, const unsigned char* pr_data,
     const Object* object)
 {
index 7decb4fd7b8c6e5c69645763fdb99a6a5e21e022..e0b82bc338681f93e625d86575cd0f3f9f69f57f 100644 (file)
@@ -1,3 +1,9 @@
+2018-11-15  Claudiu Zissulescu  <claziss@synopsys.com>
+
+       Backport from mainline
+       2018-08-01  Cupertino Miranda <cmiranda@synopsys.com>
+       * arc-reloc.def (ARC_TLS_LE_32): Updated reloc formula.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index a6db724da94871b13035538370fbb24b2e702926..61edd6e67a40a829c4ff8328287dd73fd7c8dcf0 100644 (file)
@@ -468,7 +468,7 @@ ARC_RELOC_HOWTO(ARC_TLS_DTPOFF, 67, \
                 32, \
                 replace_word32, \
                 dont, \
-                ( ME ( S - SECTSTART ) + A ))
+               ( ME ( S - FINAL_SECTSTART ) + A ))
 
 ARC_RELOC_HOWTO(ARC_TLS_DTPOFF_S9, 73, \
                 2, \
@@ -489,7 +489,7 @@ ARC_RELOC_HOWTO(ARC_TLS_LE_32, 75, \
                 32, \
                 replace_word32, \
                 dont, \
-                ( ME ( ( ( ( S + A ) + TCB_SIZE ) - TLS_REL ) ) ))
+               ( ME ( ( ( ( S + A ) + TLS_TBSS ) - TLS_REL ) ) ))
 
 ARC_RELOC_HOWTO(ARC_S25W_PCREL_PLT, 76, \
                 2, \
index c07e442c84a17e7f576919005007fc29e2b0c440..00c0785ede9eee7ecd23899a089b50b1b411f4ae 100644 (file)
@@ -1,3 +1,146 @@
+2019-02-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/24151
+       * testsuite/ld-x86-64/pr24151a-x32.d: New file.
+       * testsuite/ld-x86-64/pr24151a.d: Likewise.
+       * testsuite/ld-x86-64/pr24151a.s: Likewise.
+       * testsuite/ld-x86-64/x86-64.exp: Run pr24151a and pr24151a-x32.
+
+2019-01-29  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * testsuite/ld-ifunc/ifunc.exp: Skip pr23169 on SPARC.
+
+2018-11-30  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-powerpc/pr23937.d,
+       * testsuite/ld-powerpc/pr23937.s: New test.
+       * testsuite/ld-powerpc/powerpc.exp: Run it.
+
+2018-11-27  Tamar Christina  <tamar.christina@arm.com>
+
+       PR ld/23904
+       * testsuite/ld-aarch64/aarch64-elf.exp: Add erratum843419_tls_ie.
+       * testsuite/ld-aarch64/erratum843419_tls_ie.d: New test.
+       * testsuite/ld-aarch64/erratum843419_tls_ie.s: New test.
+
+2018-11-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/23854
+       * testsuite/ld-i386/i386.exp: Run pr23854.
+       * testsuite/ld-x86-64/x86-64.exp: Likewwise.
+       * testsuite/ld-i386/pr23854.d: New file.
+       * testsuite/ld-i386/pr23854.s: Likewwise.
+       * testsuite/ld-i386/pr23854.d: Likewwise.
+       * testsuite/ld-x86-64/pr23854.d: Likewwise.
+       * testsuite/ld-x86-64/pr23854.s: Likewwise.
+
+2018-11-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23818
+       * testsuite/ld-plugin/lto.exp: Run PR ld/23818 test.
+       * testsuite/ld-plugin/pr23818.d: New file.
+       * testsuite/ld-plugin/pr23818.t: Likewise.
+       * testsuite/ld-plugin/pr23818a.c: Likewise.
+       * testsuite/ld-plugin/pr23818b.c: Likewise.
+
+2018-08-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/ld-x86-64/pr23486b.d: Swap pr23486a.s and pr23486a.s.
+
+2018-08-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23428
+       * testsuite/ld-elf/dummy.s: New file.
+       * testsuite/ld-elf/linux-x86.S: Add X86_FEATURE_1_AND property.
+       * testsuite/ld-elf/linux-x86.exp: Add dummy.s to pr23428.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23486
+       * testsuite/ld-i386/i386.exp: Run PR ld/23486 tests.
+       * testsuite/ld-x86-64/x86-64.exp: Likewise.
+       * testsuite/ld-i386/pr23486a.d: New file.
+       * testsuite/ld-i386/pr23486b.d: Likewise.
+       * testsuite/ld-x86-64/pr23486a-x32.d: Likewise.
+       * testsuite/ld-x86-64/pr23486a.d: Likewise.
+       * testsuite/ld-x86-64/pr23486a.s: Likewise.
+       * testsuite/ld-x86-64/pr23486b-x32.d: Likewise.
+       * testsuite/ld-x86-64/pr23486b.d: Likewise.
+       * testsuite/ld-x86-64/pr23486b.s: Likewise.
+       * testsuite/ld-i386/property-3.r: Remove "x86 ISA used".
+       * testsuite/ld-i386/property-4.r: Likewise.
+       * testsuite/ld-i386/property-5.r: Likewise.
+       * testsuite/ld-i386/property-x86-ibt3a.d: Likewise.
+       * testsuite/ld-i386/property-x86-ibt3b.d: Likewise.
+       * testsuite/ld-i386/property-x86-shstk3a.d: Likewise.
+       * testsuite/ld-i386/property-x86-shstk3b.d: Likewise.
+       * testsuite/ld-x86-64/property-3.r: Likewise.
+       * testsuite/ld-x86-64/property-4.r: Likewise.
+       * testsuite/ld-x86-64/property-5.r: Likewise.
+       * testsuite/ld-x86-64/property-x86-ibt3a-x32.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-ibt3a.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-ibt3b-x32.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-ibt3b.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-shstk3a-x32.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-shstk3a.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-shstk3b-x32.d: Likewise.
+       * testsuite/ld-x86-64/property-x86-shstk3b.d: Likewise.
+
+2018-08-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * testsuite/ld-x86-64/property-x86-3.s: Use ".p2align 2" to
+       align .note.gnu.property section if __64_bit__ is undefined.
+
+2018-08-01  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-powerpc/powerpc.exp: Run tlsopt5 with hash-style
+       specified.
+
+2018-08-01  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-powerpc/powerpc.exp: Run tlsopt5 with plt alignment.
+       * testsuite/ld-powerpc/tlsopt5.s: Add extra call.
+       * testsuite/ld-powerpc/tlsopt5.wf: Adjust expected output.
+       * testsuite/ld-powerpc/tlsopt5.d: Likewise.
+
+2018-08-07  Nick Clifton  <nickc@redhat.com>
+
+       * po/bg.po: Updated Bulgarian translation.
+
+2018-08-01  Roland McGrath  <mcgrathr@google.com>
+
+       * testsuite/ld-aarch64/ifunc-1-local.d: Adjust regexps to match
+       the offsets emitted by aarch64-elf configurations.
+       * testsuite/ld-aarch64/ifunc-1.d: Likewise.
+       * testsuite/ld-aarch64/ifunc-2-local.d: Likewise.
+       * testsuite/ld-aarch64/ifunc-2.d: Likewise.
+       * testsuite/ld-aarch64/ifunc-21.d: Likewise.
+       * testsuite/ld-aarch64/ifunc-3a.d: Likewise.
+
+2018-07-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/23428
+       * testsuite/ld-elf/linux-x86.S: New file.
+       * testsuite/ld-elf/linux-x86.exp: Likewise.
+       * testsuite/ld-elf/pr23428.c: Likewise.
+       * testsuite/ld-elf/sec64k.exp: Pass "-z noseparate-code" to ld
+       for Linux/x86 targets.
+       * testsuite/ld-i386/abs-iamcu.d: Likewise.
+       * testsuite/ld-i386/abs.d: Likewise.
+       * testsuite/ld-i386/pr12718.d: Likewise.
+       * testsuite/ld-i386/pr12921.d: Likewise.
+       * testsuite/ld-x86-64/abs-k1om.d: Likewise.
+       * testsuite/ld-x86-64/abs-l1om.d: Likewise.
+       * testsuite/ld-x86-64/abs.d: Likewise.
+       * testsuite/ld-x86-64/pr12718.d: Likewise.
+       * testsuite/ld-x86-64/pr12921.d: Likewise.
+       * testsuite/ld-linkonce/zeroeh.ld: Discard .note.gnu.property
+       section.
+       * testsuite/ld-scripts/print-memory-usage.t: Likewise.
+       * testsuite/ld-scripts/size-2.t: Likewise.
+       * testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use ld to
+       create executable if language is "asm".
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index 5e8e81881860f9000e56da92163dbe9d35af6e4e..bf6ecd9b6169d10ed998685577f75f8c9d9d6b43 100644 (file)
@@ -13,7 +13,7 @@ msgstr ""
 "Project-Id-Version: ld 2.30.90\n"
 "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
 "POT-Creation-Date: 2018-06-24 19:43+0100\n"
-"PO-Revision-Date: 2018-06-28 22:58+0300\n"
+"PO-Revision-Date: 2018-07-26 20:34+0300\n"
 "Last-Translator: Румен Петров <transl@roumenpetrov.info>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
 "Language: bg\n"
@@ -33,7 +33,7 @@ msgstr "%X%P: cref_hash_lookup не успя: %E\n"
 
 #: ldcref.c:186
 msgid "%X%P: cref alloc failed: %E\n"
-msgstr "%X%P: Ð¿Ñ\80опадна Ð·Ð°Ð´ÐµÐ»Ñ\8fне(на Ð¿Ð°Ð¼ÐµÑ\82) Ð·Ð° cref: %E\n"
+msgstr "%X%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f Ð·Ð°Ð´ÐµÐ»Ñ\8fнеÑ\82о Ð½Ð° Ð¿Ð°Ð¼ÐµÑ\82 Ð² cref: %E\n"
 
 #: ldcref.c:371
 #, c-format
@@ -62,7 +62,7 @@ msgstr "Без имена\n"
 
 #: ldcref.c:413 ldcref.c:565
 msgid "%P: symbol `%pT' missing from main hash table\n"
-msgstr "%P: Ð¸Ð¼Ðµ '%pT' Ð»Ð¸Ð¿Ñ\81ва Ð² Ð³Ð»Ð°Ð²Ð½Ð°Ñ\82а Ñ\85еÑ\88\82аблиÑ\86а\n"
+msgstr "%P: Ð² Ð³Ð»Ð°Ð²Ð½Ð¸Ñ\8f Ñ\80еÑ\87ник Ð»Ð¸Ð¿Ñ\81ва Ð¸Ð¼ÐµÑ\82о '%pT'\n"
 
 #: ldcref.c:517 ldcref.c:628 ldmain.c:1211 ldmisc.c:335 pe-dll.c:715
 #: pe-dll.c:1296 pe-dll.c:1417 pe-dll.c:1535 earm_wince_pe.c:1430
@@ -87,7 +87,7 @@ msgstr "%X%P: %C: забранено е кръстосана отпратка о
 
 #: ldctor.c:83
 msgid "%X%P: different relocs used in set %s\n"
-msgstr "%X%P: различни \"преместванията\" се използват в множеството %s\n"
+msgstr "%X%P: различни \"премествания\" се използват в набора %s\n"
 
 #: ldctor.c:101
 msgid "%X%P: different object file formats composing set %s\n"
@@ -103,7 +103,7 @@ msgstr "%X%P: раздел %s не поддържа преместване %s з
 
 #: ldctor.c:321
 msgid "%X%P: unsupported size %d for set %s\n"
-msgstr "%X%P: Ð½ÐµÐ¿Ð¾Ð´Ð´Ñ\8aÑ\80жан Ñ\80азмеÑ\80 %d Ð·Ð° Ð¼Ð½Ð¾Ð¶ÐµÑ\81Ñ\82воÑ\82о %s\n"
+msgstr "%X%P: Ð½ÐµÐ¿Ð¾Ð´Ð´Ñ\8aÑ\80жан Ñ\80азмеÑ\80 %d Ð·Ð° Ð½Ð°Ð±Ð¾Ñ\80 %s\n"
 
 #: ldctor.c:344
 msgid ""
@@ -202,7 +202,7 @@ msgstr "%F%P:%pS не може да се върне обратно брояч н
 
 #: ldexp.c:1167
 msgid "%F%P:%s: hash creation failed\n"
-msgstr "%F%P:%s: Ð¿Ñ\80опадна създаването на хеш\n"
+msgstr "%F%P:%s: Ð½Ðµ Ñ\83Ñ\81пÑ\8f създаването на хеш\n"
 
 #: ldexp.c:1519 ldexp.c:1545 ldexp.c:1605
 msgid "%F%P:%pS: nonconstant expression for %s\n"
@@ -210,7 +210,7 @@ msgstr "%F%P:%pS: не е константен изразът за %s\n"
 
 #: ldexp.c:1631 ldlang.c:1234 ldlang.c:3187 ldlang.c:7174
 msgid "%F%P: can not create hash table: %E\n"
-msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ñ\81Ñ\8aздаде Ñ\85еÑ\88\82аблиÑ\86аÑ\82а: %E\n"
+msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ñ\81Ñ\8aздаде Ñ\80еÑ\87ник: %E\n"
 
 #: ldfile.c:132 eaarch64cloudabi.c:656 eaarch64cloudabib.c:656
 #: eaarch64elf.c:656 eaarch64elf32.c:656 eaarch64elf32b.c:656
@@ -286,12 +286,12 @@ msgstr "%F%P: не може да се създаде хеш-таблицата:
 #: eshlelf_vxworks.c:370 ev850.c:387 ev850_rh850.c:387 exgateelf.c:341
 #, c-format
 msgid "attempt to open %s failed\n"
-msgstr "опита да се отвори %s не успя\n"
+msgstr "опитът да се отвори %s не успя\n"
 
 #: ldfile.c:134
 #, c-format
 msgid "attempt to open %s succeeded\n"
-msgstr "опита да се отвори %s успя\n"
+msgstr "опитът да се отвори %s успя\n"
 
 #: ldfile.c:140
 msgid "%F%P: invalid BFD target `%s'\n"
@@ -353,7 +353,7 @@ msgstr "%F%P:%pS: грешка: синоним за област памет по
 
 #: ldlang.c:1372
 msgid "%F%P:%pS: error: redefinition of memory region alias `%s'\n"
-msgstr "%F%P:%pS: грешка: повторен определение на синоним за област памет '%s'\n"
+msgstr "%F%P:%pS: грешка: повторено определение на синоним за област памет '%s'\n"
 
 #: ldlang.c:1379
 msgid "%F%P:%pS: error: memory region `%s' for alias `%s' does not exist\n"
@@ -361,7 +361,7 @@ msgstr "%F%P:%pS: грешка: област памет '%s' за синоним
 
 #: ldlang.c:1438 ldlang.c:1477
 msgid "%F%P: failed creating section `%s': %E\n"
-msgstr "%F%P: Ð¿Ñ\80опадна създаването на раздел '%s': %E\n"
+msgstr "%F%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f създаването на раздел '%s': %E\n"
 
 #: ldlang.c:1998
 msgid ""
@@ -439,7 +439,7 @@ msgstr "%F%P: %pB: файлът не е разпознат: %E\n"
 
 #: ldlang.c:2854
 msgid "%F%P: %pB: member %pB in archive is not an object\n"
-msgstr "%F%P: %pB: членът, на архива %pB, не е обект\n"
+msgstr "%F%P: %pB: членът на архива %pB не е обект\n"
 
 #: ldlang.c:2869 ldlang.c:2883 eaarch64cloudabi.c:776 eaarch64cloudabib.c:776
 #: eaarch64elf.c:776 eaarch64elf32.c:776 eaarch64elf32b.c:776
@@ -518,7 +518,7 @@ msgstr "%F%P: %pB: грешка при добавяне на имената: %E\
 
 #: ldlang.c:3157
 msgid "%P: warning: could not find any targets that match endianness requirement\n"
-msgstr "%P: предупреждение: не може да се открие резултат, който да отговаря на изискванията за подредба(на байтовете)\n"
+msgstr "%P: предупреждение: не може да се открие резултат, който да отговаря на изискванията за подредба на байтовете\n"
 
 #: ldlang.c:3171
 msgid "%F%P: target %s not found\n"
@@ -546,7 +546,7 @@ msgstr "%X%P: не е определено задължителното име '
 
 #: ldlang.c:3770
 msgid "%F%P: %s not found for insert\n"
-msgstr "%F%P: %s не е намерен(за добавяне)\n"
+msgstr "%F%P: %s не е намерен за добавяне\n"
 
 #: ldlang.c:4011
 msgid " load address 0x%V"
@@ -598,7 +598,7 @@ msgstr "%X%P: %pB раздел '%s' не се побира в област '%s'\
 
 #: ldlang.c:5050
 msgid "%F%P:%pS: non constant or forward reference address expression for section %s\n"
-msgstr "%F%P:%pS: адресния израз не е константен или отпратка за по нататък при раздел %s\n"
+msgstr "%F%P:%pS: адресният израз не е константен или е отпратка за по нататък при раздел %s\n"
 
 #: ldlang.c:5075
 msgid "%X%P: internal error on COFF shared library section %s\n"
@@ -664,7 +664,7 @@ msgstr "%X%P: %s архитектурата на входен файл '%pB' е
 
 #: ldlang.c:6332
 msgid "%X%P: failed to merge target specific data of file %pB\n"
-msgstr "%X%P: Ð¿Ñ\80опадна Ñ\81ливанеÑ\82о, Ð½Ð° Ñ\81пеÑ\86иÑ\84иÑ\87ни Ð·Ð° Ñ\80езÑ\83лÑ\82аÑ\82а Ð´Ð°Ð½Ð½Ð¸, от файл %pB\n"
+msgstr "%X%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f Ñ\81ливанеÑ\82о Ð½Ð° Ñ\86елеви Ð´Ð°Ð½Ð½Ð¸ от файл %pB\n"
 
 #: ldlang.c:6403
 msgid "%F%P: could not define common symbol `%pT': %E\n"
@@ -704,7 +704,7 @@ msgstr "%F%P:%pS: грешка: зададено е подравняване с
 
 #: ldlang.c:7198
 msgid "%F%P: %s: plugin reported error after all symbols read\n"
-msgstr "%F%P: %s: приставката рапортува грешка, след прочитане на всички имена\n"
+msgstr "%F%P: %s: приставката отчете грешка след прочитане на всички имена\n"
 
 #: ldlang.c:7602
 msgid "%F%P: multiple STARTUP files\n"
@@ -805,11 +805,11 @@ msgstr "%P: грешка при свързване, изтриване на из
 
 #: ldmain.c:490
 msgid "%F%P: %pB: final close failed: %E\n"
-msgstr "%F%P: %pB: Ð¿Ñ\80опадна заключителното затваряне: %E\n"
+msgstr "%F%P: %pB: Ð½Ðµ Ñ\83Ñ\81пÑ\8f заключителното затваряне: %E\n"
 
 #: ldmain.c:517
 msgid "%F%P: unable to open for source of copy `%s'\n"
-msgstr "%F%P: не можа да се отвори източника на копието '%s'\n"
+msgstr "%F%P: не можа да се отвори източникът на копието '%s'\n"
 
 #: ldmain.c:520
 msgid "%F%P: unable to open for destination of copy `%s'\n"
@@ -1017,7 +1017,7 @@ msgstr "%P: вътрешна грешка: прекратяване на %s:%d\n
 
 #: ldmisc.c:703
 msgid "%F%P: please report this bug\n"
-msgstr "%F%P: моля, рапортувайте този проблем\n"
+msgstr "%F%P: моля, докладвайте този проблем\n"
 
 #. Output for noisy == 2 is intended to follow the GNU standards.
 #: ldver.c:37
@@ -1048,7 +1048,7 @@ msgstr "  Поддържани подражавания:\n"
 
 #: ldwrite.c:60 ldwrite.c:206 ldwrite.c:258 ldwrite.c:299
 msgid "%F%P: bfd_new_link_order failed\n"
-msgstr "%F%P: пропадна bfd_new_link_order\n"
+msgstr "%F%P: bfd_new_link_order не успя\n"
 
 #: ldwrite.c:368
 msgid "%F%P: cannot create split section name for %s\n"
@@ -1056,7 +1056,7 @@ msgstr "%F%P: при разцепване на раздел, не можа да
 
 #: ldwrite.c:380
 msgid "%F%P: clone section failed: %E\n"
-msgstr "%F%P: Ð¿Ñ\80опадна ÐºÐ¾Ð¿Ð¸Ñ\80ането на раздел: %E\n"
+msgstr "%F%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f Ñ\80аздвоÑ\8fването на раздел: %E\n"
 
 #: ldwrite.c:418
 #, c-format
@@ -1065,7 +1065,7 @@ msgstr "%8x други\n"
 
 #: ldwrite.c:588
 msgid "%F%P: final link failed: %E\n"
-msgstr "%F%P: Ð¿Ñ\80опадна заключителното свързване: %E\n"
+msgstr "%F%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f заключителното свързване: %E\n"
 
 #: lexsup.c:102 lexsup.c:276
 msgid "KEYWORD"
@@ -1490,7 +1490,7 @@ msgstr ""
 
 #: lexsup.c:350
 msgid "Set default hash table size close to <NUMBER>"
-msgstr "Установява размер по подразбиране на таблицат за хеш близък до <ЧИСЛО>"
+msgstr "Установява размер, по подразбиране, на речника близък до <ЧИСЛО>"
 
 #: lexsup.c:353
 msgid "Print option help"
@@ -1776,15 +1776,15 @@ msgstr "Предупреждение, ако споделен обект съд
 
 #: lexsup.c:518
 msgid "Warn if an object has alternate ELF machine code"
-msgstr "Предупреждение ако обекта е с друг ELF ELF код за машина"
+msgstr "Предупреждение, ако обекта е с друг ELF код за машина"
 
 #: lexsup.c:522
 msgid "Report unresolved symbols as warnings"
-msgstr "РапоÑ\80Ñ\82Ñ\83ване ÐºÐ°Ñ\82о Ð¿Ñ\80едÑ\83пÑ\80еждениÑ\8f, Ð½Ð° Ð½ÐµÑ\81вÑ\8aÑ\80зани Ð¸Ð¼ÐµÐ½Ð°"
+msgstr "Ð\94окладване Ð½Ð° Ð½ÐµÑ\81вÑ\8aÑ\80зани Ð¸Ð¼ÐµÐ½Ð° ÐºÐ°Ñ\82о Ð¿Ñ\80едÑ\83пÑ\80еждениÑ\8f"
 
 #: lexsup.c:525
 msgid "Report unresolved symbols as errors"
-msgstr "РапоÑ\80Ñ\82Ñ\83ване, ÐºÐ°Ñ\82о Ð³Ñ\80еÑ\88ки, Ð½Ð° Ð½ÐµÑ\81вÑ\8aÑ\80зани Ð¸Ð¼ÐµÐ½Ð°"
+msgstr "Ð\94окладване Ð½Ð° Ð½ÐµÑ\81вÑ\8aÑ\80зани Ð¸Ð¼ÐµÐ½Ð° ÐºÐ°Ñ\82о Ð³Ñ\80еÑ\88ки"
 
 #: lexsup.c:527
 msgid "Include all objects from following archives"
@@ -2332,12 +2332,12 @@ msgstr "%X%P: не може да се създаде раздел .reloc: %E\n"
 #: pe-dll.c:1100
 #, c-format
 msgid "%X%P: error: ordinal used twice: %d (%s vs %s)\n"
-msgstr "%X%P: грешка, номера е използван два пъти: %d (%s с/у %s)\n"
+msgstr "%X%P: грешка, номерът е използван два пъти: %d (%s с/у %s)\n"
 
 #: pe-dll.c:1136
 #, c-format
 msgid "%X%P: error: export ordinal too large: %d\n"
-msgstr "%X%P: грешка: номера е твърде голям: %d\n"
+msgstr "%X%P: грешка: номерът е твърде голям: %d\n"
 
 #: pe-dll.c:1452
 #, c-format
@@ -2346,7 +2346,7 @@ msgstr "Сведение: разрешаване на %s със свързван
 
 #: pe-dll.c:1458
 msgid "%P: warning: auto-importing has been activated without --enable-auto-import specified on the command line; this should work unless it involves constant data structures referencing symbols from auto-imported DLLs\n"
-msgstr "%P: предупреждение: автоматично внасяне е задействано без да се зададе --enable-auto-import на командния ред.Това работи, освен ако не е свързано с константни структури за данни, които указват към имена от автоматично внасяни DLL-ли.\n"
+msgstr "%P: предупреждение: автоматично внасяне е задействано без да се зададе --enable-auto-import на командния ред. Това работи, освен ако не е свързано с константни структури за данни, които указват към имена от автоматично внасяни DLL-ли.\n"
 
 #. Huh?  Shouldn't happen, but punt if it does.
 #: pe-dll.c:1527
@@ -2370,7 +2370,7 @@ msgstr "; липсва съдържание\n"
 
 #: pe-dll.c:2780
 msgid "%X%P: %C: variable '%pT' can't be auto-imported; please read the documentation for ld's --enable-auto-import for details\n"
-msgstr "%X%P: %C: променливата '%pT' не може да се внесе автоматично. Да се прочете в документацията на свързващата програма за повече сведения относно --enable-auto-import.\n"
+msgstr "%X%P: %C: променливата '%pT' не може да се внесе автоматично. Да се провери в документацията на свързващата програма за повече сведения относно --enable-auto-import.\n"
 
 #: pe-dll.c:2807
 #, c-format
@@ -2469,7 +2469,7 @@ msgstr "%F%P: приставката не можа да задели памет
 
 #: plugin.c:1138
 msgid "%F%P: %s: plugin reported error claiming file\n"
-msgstr "%F%P: %s: приставката рапортува грешка, при твърденията за файла\n"
+msgstr "%F%P: %s: приставката отчете грешка при твърденията за файла\n"
 
 #: plugin.c:1248
 msgid "%P: %s: error in plugin cleanup: %d (ignored)\n"
@@ -2547,7 +2547,7 @@ msgstr "%P: %s: грешка при почистване на приставка
 #: eshlelf_nto.c:81 eshlelf_vxworks.c:81 ev850.c:81 ev850_rh850.c:81
 #: exgateelf.c:81
 msgid "%F%P: map sections to segments failed: %E\n"
-msgstr "%F%P: Ð¿Ñ\80опадна свързването на раздел към част: %E\n"
+msgstr "%F%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f свързването на раздел към част: %E\n"
 
 #: eaarch64cloudabi.c:101 eaarch64cloudabib.c:101 eaarch64elf.c:101
 #: eaarch64elf32.c:101 eaarch64elf32b.c:101 eaarch64elfb.c:101
@@ -5051,31 +5051,31 @@ msgstr "%F%P: не се чете %s\n"
 
 #: eaix5ppc.c:390 eaix5rs6.c:390 eaixppc.c:390 eaixrs6.c:390 eppcmacos.c:390
 msgid "%P: warning: ignoring invalid -D number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -D %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -D %s\n"
 
 #: eaix5ppc.c:398 eaix5rs6.c:398 eaixppc.c:398 eaixrs6.c:398 eppcmacos.c:398
 msgid "%P: warning: ignoring invalid -H number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -H %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -H %s\n"
 
 #: eaix5ppc.c:510 eaix5rs6.c:510 eaixppc.c:510 eaixrs6.c:510 eppcmacos.c:510
 msgid "%P: warning: ignoring invalid -bmaxdata number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -bmaxdata %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -bmaxdata %s\n"
 
 #: eaix5ppc.c:519 eaix5rs6.c:519 eaixppc.c:519 eaixrs6.c:519 eppcmacos.c:519
 msgid "%P: warning: ignoring invalid -bmaxstack number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -bmaxstack %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -bmaxstack %s\n"
 
 #: eaix5ppc.c:532 eaix5rs6.c:532 eaixppc.c:532 eaixrs6.c:532 eppcmacos.c:532
 msgid "%P: warning: ignoring invalid module type %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправиен тип на модул %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправиен тип на модул %s\n"
 
 #: eaix5ppc.c:562 eaix5rs6.c:562 eaixppc.c:562 eaixrs6.c:562 eppcmacos.c:562
 msgid "%P: warning: ignoring invalid -pD number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -pD %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -pD %s\n"
 
 #: eaix5ppc.c:585 eaix5rs6.c:585 eaixppc.c:585 eaixrs6.c:585 eppcmacos.c:585
 msgid "%P: warning: ignoring invalid -pT number %s\n"
-msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¸Ð·Ð¾Ñ\81Ñ\82авÑ\8fне на неправилно число за -pT %s\n"
+msgstr "%P: Ð¿Ñ\80едÑ\83пÑ\80еждение: Ð¿Ñ\80опÑ\83Ñ\81кане на неправилно число за -pT %s\n"
 
 #: eaix5ppc.c:714 eaix5rs6.c:714 eaixppc.c:714 eaixrs6.c:714 eppcmacos.c:714
 msgid "%F%P: bfd_xcoff_link_record_set failed: %E\n"
@@ -5252,7 +5252,7 @@ msgstr "  --[no-]leading-underscore          Изрично установява
 #: emcorepe.c:392 eppcpe.c:392 eshpe.c:392
 #, c-format
 msgid "  --thumb-entry=<symbol>             Set the entry point to be Thumb <symbol>\n"
-msgstr "  --thumb-entry=<знак>               Ð£Ñ\81Ñ\82ановÑ\8fване Ð½Ð° Ð²Ñ\85одÑ\8fÑ\89а Ñ\82оÑ\87ка Ð´Ð° Ðµ отбелязания <знак>\n"
+msgstr "  --thumb-entry=<знак>               Ð£Ñ\81Ñ\82ановÑ\8fване Ð½Ð° Ð²Ñ\85одÑ\8fÑ\89а Ñ\82оÑ\87ка Ð½Ð° отбелязания <знак>\n"
 
 #: earm_wince_pe.c:393 earmpe.c:393 ei386pe.c:393 ei386pe_posix.c:393
 #: emcorepe.c:393 eppcpe.c:393 eshpe.c:393
@@ -5264,7 +5264,7 @@ msgstr "  --[no-]insert-timestamp            Използва истинска 
 #: ei386pep.c:375 emcorepe.c:394 eppcpe.c:394 eshpe.c:394
 #, c-format
 msgid "                                     This makes binaries non-deterministic\n"
-msgstr "                                     Това прави двоичните файлове неопределяеми\n"
+msgstr "                                     Това прави двоичните файлове несравними\n"
 
 #: earm_wince_pe.c:396 earmpe.c:396 ei386pe.c:396 ei386pe_posix.c:396
 #: ei386pep.c:377 emcorepe.c:396 eppcpe.c:396 eshpe.c:396
@@ -5440,7 +5440,7 @@ msgid ""
 "                                       greater than 2 gigabytes\n"
 msgstr ""
 "  --large-address-aware              Програмата поддържа виртуални адреси\n"
-"                                       по-голями от 2 гигабайта\n"
+"                                       по-големи от 2 гигабайта\n"
 
 #: earm_wince_pe.c:420 earmpe.c:420 ei386pe.c:420 ei386pe_posix.c:420
 #: emcorepe.c:420 eppcpe.c:420 eshpe.c:420
@@ -5450,7 +5450,7 @@ msgid ""
 "                                       addresses greater than 2 gigabytes\n"
 msgstr ""
 "  --disable-large-address-aware      Програмата не поддържа виртуални\n"
-"                                       адреси по-голями от 2 гигабайта\n"
+"                                       адреси по-големи от 2 гигабайта\n"
 
 #: earm_wince_pe.c:421 earmpe.c:421 ei386pe.c:421 ei386pe_posix.c:421
 #: ei386pep.c:399 emcorepe.c:421 eppcpe.c:421 eshpe.c:421
@@ -5479,7 +5479,7 @@ msgid ""
 "  --dynamicbase                      Image base address may be relocated using\n"
 "                                       address space layout randomization (ASLR)\n"
 msgstr ""
-"  --dynamicbase                      Основния адрес на образа може да бъде преместен\n"
+"  --dynamicbase                      Основният адрес на образа може да бъде преместен\n"
 "                                       като се използва случаен адрес\n"
 
 #: earm_wince_pe.c:424 earmpe.c:424 ei386pe.c:424 ei386pe_posix.c:424
@@ -5492,13 +5492,13 @@ msgstr "  --forceinteg               Налагане на проверка за
 #: ei386pep.c:404 emcorepe.c:425 eppcpe.c:425 eshpe.c:425
 #, c-format
 msgid "  --nxcompat                 Image is compatible with data execution prevention\n"
-msgstr "  --nxcompat                 Образа е съвместим с предотвратяване на изпълнение на данни\n"
+msgstr "  --nxcompat                 Образът е съвместим с предотвратяване на изпълнение на данни\n"
 
 #: earm_wince_pe.c:426 earmpe.c:426 ei386pe.c:426 ei386pe_posix.c:426
 #: ei386pep.c:405 emcorepe.c:426 eppcpe.c:426 eshpe.c:426
 #, c-format
 msgid "  --no-isolation             Image understands isolation but do not isolate the image\n"
-msgstr "  --no-isolation             Образа поддържа изолиране, но да не се изолира\n"
+msgstr "  --no-isolation             Образът поддържа изолиране, но да не се изолира\n"
 
 #: earm_wince_pe.c:427 earmpe.c:427 ei386pe.c:427 ei386pe_posix.c:427
 #: emcorepe.c:427 eppcpe.c:427 eshpe.c:427
@@ -5507,7 +5507,7 @@ msgid ""
 "  --no-seh                   Image does not use SEH. No SE handler may\n"
 "                                       be called in this image\n"
 msgstr ""
-"  --no-seh                   Образа не използва SEH. В този образ не\n"
+"  --no-seh                   Образът не използва SEH. В този образ не\n"
 "                               може да се извиква SE подръжка\n"
 
 #: earm_wince_pe.c:428 earmpe.c:428 ei386pe.c:428 ei386pe_posix.c:428
@@ -5526,7 +5526,7 @@ msgstr "  --wdmdriver                Използване на WDM модел з
 #: ei386pep.c:409 emcorepe.c:430 eppcpe.c:430 eshpe.c:430
 #, c-format
 msgid "  --tsaware                  Image is Terminal Server aware\n"
-msgstr "  --tsaware                  Образа поддържа \"Terminal Server\"\n"
+msgstr "  --tsaware                  Образът поддържа \"Terminal Server\"\n"
 
 #: earm_wince_pe.c:431 earmpe.c:431 ei386pe.c:431 ei386pe_posix.c:431
 #: ei386pep.c:410 emcorepe.c:431 eppcpe.c:431 eshpe.c:431
@@ -5603,7 +5603,7 @@ msgstr ""
 #: earm_wince_pe.c:1302 earmpe.c:1302 ei386pe.c:1302 ei386pe_posix.c:1302
 #: ei386pep.c:1305 emcorepe.c:1302 eppcpe.c:1302 eshpe.c:1302
 msgid "%F%P: cannot perform PE operations on non PE output file '%pB'\n"
-msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88и \"PE\"-операции на изходен файл '%pB', който не е \"PE\"\n"
+msgstr "%F%P: Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88аÑ\82 \"PE\"-операции на изходен файл '%pB', който не е \"PE\"\n"
 
 #: earm_wince_pe.c:1442 earmpe.c:1442 ei386pe.c:1442 ei386pe_posix.c:1442
 #: ei386pep.c:1426 emcorepe.c:1442 eppcpe.c:1442 eshpe.c:1442
@@ -5649,7 +5649,7 @@ msgstr "%P: предупреждение: '--thumb-entry %s' прегазва '-
 #: earmnto.c:577 earmpe.c:1876 earmsymbian.c:577 ei386pe.c:1876
 #: ei386pe_posix.c:1876 emcorepe.c:1876 eppcpe.c:1876 eshpe.c:1876
 msgid "%P: warning: cannot find thumb start symbol %s\n"
-msgstr "%P: предупреждение: не е намерен, като начален, отбелязания знак %s\n"
+msgstr "%P: предупреждение: не е намерен, като начален, отбелязаният знак %s\n"
 
 #: earmelf.c:603 earmelf_fbsd.c:603 earmelf_fuchsia.c:603 earmelf_linux.c:603
 #: earmelf_linux_eabi.c:603 earmelf_linux_fdpiceabi.c:603 earmelf_nacl.c:603
@@ -5700,7 +5700,7 @@ msgstr "%P: неразпознат вид STM32L4XX поправка '%s'\n"
 #: earmelfb_nacl.c:2851 earmelfb_nbsd.c:2851 earmnto.c:2826 earmsymbian.c:2851
 #, c-format
 msgid "  --thumb-entry=<sym>         Set the entry point to be Thumb symbol <sym>\n"
-msgstr "  --thumb-entry=<знак>        Ð£Ñ\81Ñ\82ановÑ\8fва Ð²Ñ\85одÑ\8fÑ\89а Ñ\82оÑ\87ка Ð´Ð° Ðµ отбелязания <знак>\n"
+msgstr "  --thumb-entry=<знак>        Ð£Ñ\81Ñ\82ановÑ\8fва Ð²Ñ\85одÑ\8fÑ\89а Ñ\82оÑ\87ка Ð½Ð° отбелязания <знак>\n"
 
 #: earmelf.c:2852 earmelf_fbsd.c:2859 earmelf_fuchsia.c:2852
 #: earmelf_linux.c:2852 earmelf_linux_eabi.c:2852
@@ -6667,7 +6667,7 @@ msgstr ""
 
 #: eelf32xtensa.c:561
 msgid "%F%P: failed to create .xtensa.info section\n"
-msgstr "%F%P: Ð¿Ñ\80опадна създаването на раздел .xtensa.info\n"
+msgstr "%F%P: Ð½Ðµ Ñ\83Ñ\81пÑ\8f създаването на раздел .xtensa.info\n"
 
 #: eelf32xtensa.c:4073
 #, c-format
@@ -6945,7 +6945,7 @@ msgid ""
 "  --no-seh                   Image does not use SEH; no SE handler may\n"
 "                                       be called in this image\n"
 msgstr ""
-"  --no-seh                   Образа не използва SEH. В този образ не може\n"
+"  --no-seh                   Образът не използва SEH. В този образ не може\n"
 "                               да се извиква SE подръжка\n"
 
 #: ei386pep.c:908
index 1bbc0648578cbf283a80f80a155ce92d1384923d..3912ef1cdd25b9e6440d52da47561eb62d8ea6d5 100644 (file)
@@ -86,6 +86,7 @@ run_ld_link_tests $aarch64elftests
 run_ld_link_tests eh-frame-merge-lp64
 
 run_dump_test "erratum843419"
+run_dump_test "erratum843419_tls_ie"
 
 # Relocation Tests
 run_dump_test_lp64 "weak-undefined"
diff --git a/ld/testsuite/ld-aarch64/erratum843419_tls_ie.d b/ld/testsuite/ld-aarch64/erratum843419_tls_ie.d
new file mode 100644 (file)
index 0000000..eba5a20
--- /dev/null
@@ -0,0 +1,49 @@
+#source: erratum843419_tls_ie.s
+#as:
+#ld: --fix-cortex-a53-843419 -e0 --section-start .e843419=0x20000000 -Ttext=0x400000 -Tdata=0x40000000
+#objdump: -dr
+#...
+
+Disassembly of section .e843419:
+
+0*20000000 <farbranch>:
+[ ]*20000000:  d10043ff        sub     sp, sp, #0x10
+[ ]*20000004:  d28001a7        mov     x7, #0xd                        // #13
+[ ]*20000008:  b9000fe7        str     w7, \[sp, #12\]
+[ ]*2000000c:  140003fb        b       20000ff8 <e843419>
+       ...
+
+0*20000ff8 <e843419>:
+[ ]*20000ff8:  d2a00000        movz    x0, #0x0, lsl #16
+[ ]*20000ffc:  f800c007        stur    x7, \[x0, #12\]
+[ ]*20001000:  d2800128        mov     x8, #0x9                        // #9
+[ ]*20001004:  f2800208        movk    x8, #0x10
+[ ]*20001008:  8b050020        add     x0, x1, x5
+[ ]*2000100c:  b9400fe7        ldr     w7, \[sp, #12\]
+[ ]*20001010:  0b0700e0        add     w0, w7, w7
+[ ]*20001014:  910043ff        add     sp, sp, #0x10
+[ ]*20001018:  d65f03c0        ret
+[ ]*2000101c:  00000000        .inst   0x00000000 ; undefined
+[ ]*20001020:  14000400        b       20002020 <e843419\+0x1028>
+[ ]*20001024:  d503201f        nop
+[ ]*20001028:  00000000        .inst   0x00000000 ; undefined
+[ ]*2000102c:  17fffff7        b       20001008 <e843419\+0x10>
+       ...
+
+Disassembly of section .text:
+
+0*400000 <main>:
+[ ]*400000:    d10043ff        sub     sp, sp, #0x10
+[ ]*400004:    d28001a7        mov     x7, #0xd                        // #13
+[ ]*400008:    b9000fe7        str     w7, \[sp, #12\]
+[ ]*40000c:    14000005        b       400020 <__farbranch_veneer>
+[ ]*400010:    d65f03c0        ret
+[ ]*400014:    d503201f        nop
+[ ]*400018:    14000400        b       401018 <__farbranch_veneer\+0xff8>
+[ ]*40001c:    d503201f        nop
+
+0*400020 <__farbranch_veneer>:
+[ ]*400020:    900fe010        adrp    x16, 20000000 <farbranch>
+[ ]*400024:    91000210        add     x16, x16, #0x0
+[ ]*400028:    d61f0200        br      x16
+       ...
diff --git a/ld/testsuite/ld-aarch64/erratum843419_tls_ie.s b/ld/testsuite/ld-aarch64/erratum843419_tls_ie.s
new file mode 100644 (file)
index 0000000..6032244
--- /dev/null
@@ -0,0 +1,43 @@
+       .text
+       .align  2
+       .global main
+       .type   main, %function
+main:
+       sub     sp, sp, #16
+       mov     x7, 13
+       str     w7, [sp,12]
+       b       farbranch
+       ret
+       .size   main, .-main
+
+       .section .e843419, "xa"
+       .align  2
+       .global farbranch
+       .type   farbranch, %function
+farbranch:
+       sub     sp, sp, #16
+       mov     x7, 13
+       str     w7, [sp,12]
+       b       e843419
+        .fill 4072,1,0
+e843419:
+       adrp x0, :gottprel:l_tlsievar
+       str x7, [x0,12]
+       mov     x8, 9
+       str x8, [x0, :gottprel_lo12:l_tlsievar]
+
+       add x0, x1, x5
+       ldr     w7, [sp,12]
+       add     w0, w7, w7
+       add     sp, sp, 16
+       ret
+       .size   farbranch, .-farbranch
+
+# ---
+
+       .section        .tbss,"awT",%nobits
+       .align  2
+       .type   l_tlsievar, %object
+       .size   l_tlsievar, 4
+l_tlsievar:
+       .zero   4
index bcba0aa0255215ee5279489e233ce748124a7438..178363786542be857f738c4fd1765b0cb42006c0 100644 (file)
@@ -3,7 +3,7 @@
 #target: aarch64*-*-*
 
 #...
-0+(110|180) <__GI_foo>:
+0+(110|180|1a0) <(__GI_)?foo>:
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+(0x110|0x180)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+(0x110|0x180|0x1a0)@plt>
 #pass
index f408bfff787e1d3ec42abf9fc00ca6ecd0c176f0..0274ac0094e42300b2bde89041a6aae426e23ceb 100644 (file)
@@ -3,7 +3,7 @@
 #target: aarch64*-*-*
 
 #...
-0+(130|1a0) <foo>:
+0+(130|1a0|1c8) <foo>:
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(130|1a0)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(130|1a0|1c8)@plt>
 #pass
index fb1bb40e386b7077a7ccabfce22bbf16a8cd6cce..a3d9e15f8b6ae9ba747dc79ee0817b4c9c8764d1 100644 (file)
@@ -3,9 +3,9 @@
 #target: aarch64*-*-*
 
 #...
-0+(110|180) <__GI_foo>:
+0+(110|180|1a0) <__GI_foo>:
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(110|180)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(110|180|1a0)@plt>
 [ \t0-9a-f]+:[ \t0-9a-f]+adrp[ \t]+x0, 0 <.*>
-[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x(100|170)
+[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x(100|170|190)
 #pass
index 16c75ead407fd575bc3998c615d16a5422b5dab3..eb6fa0ccf0b25314a25ad59abbb941ec3ded2b75 100644 (file)
@@ -3,9 +3,9 @@
 #target: aarch64*-*-*
 
 #...
-0+(130|1a0) <foo>:
+0+(130|1a0|1c8) <foo>:
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(130|1a0)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(130|1a0|1c8)@plt>
 [ \t0-9a-f]+:[ \t0-9a-f]+adrp[ \t]+x0, 0 <.*>
-[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x(120|190)
+[ \t0-9a-f]+:[ \t0-9a-f]+add[ \t]+x0, x0, #0x(120|190|1b8)
 #pass
index b501bd6712b943ad9547544dbae7213a141c3f12..a16186b587eb65390f698c362cb34be5669ae16a 100644 (file)
@@ -11,7 +11,7 @@ Contents of section .text:
  [0-9a-f]+ .*
 Contents of section .got.plt:
  [0-9a-f]+ 0+ 0+ 0+ 0+  .*
10298 0+ 0+ [0-9a-f]+ [0-9a-f]+  .*
(10298|102b8) 0+ 0+ [0-9a-f]+ [0-9a-f]+  .*
 
 Disassembly of section .text:
 
@@ -20,7 +20,7 @@ Disassembly of section .text:
 
 .* <bar>:
  .*:   90000080        adrp    x0, 10000 <.*>
- .*:   .*      ldr     x0, \[x0, #672\]
+ .*:   .*      ldr     x0, \[x0, #(672|704)\]
  .*:   d65f03c0        ret
 
 #pass
index a01a75c904ff283ac928cc5e3c285b8ee432f194..4919d9689280e474dfe108fd86dfc1f96958edf3 100644 (file)
@@ -4,7 +4,7 @@
 #target: aarch64*-*-*
 
 #...
-0+(150|1d0) <__GI_foo>:
+0+(150|1d0|1e8) <__GI_foo>:
 #...
-[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(150|1d0)@plt>
+[ \t0-9a-f]+:[ \t0-9a-f]+bl[ \t0-9a-f]+<\*ABS\*\+0x(150|1d0|1e8)@plt>
 #pass
index 3b4e99525429c9b42e2b0965d56ed2f2b5847056..e921591275f3ed45235d8e34b8786da4e1bf5595 100644 (file)
@@ -1,3 +1,4 @@
 #ld: --export-dynamic
-#error: .*dynamic STT_GNU_IFUNC symbol `foo' with pointer equality in `.*.o' can not be used when making an executable; recompile with -fPIE and relink with -pie
+#objdump: -dr
 #target: aarch64*-*-*
+#...
diff --git a/ld/testsuite/ld-elf/dummy.s b/ld/testsuite/ld-elf/dummy.s
new file mode 100644 (file)
index 0000000..403f980
--- /dev/null
@@ -0,0 +1 @@
+# Dummy
diff --git a/ld/testsuite/ld-elf/linux-x86.S b/ld/testsuite/ld-elf/linux-x86.S
new file mode 100644 (file)
index 0000000..d94abc1
--- /dev/null
@@ -0,0 +1,91 @@
+       .text
+       .globl _start
+       .type _start,@function
+       .p2align 4
+_start:
+       xorl %ebp, %ebp
+#ifdef __LP64__
+       popq %rdi
+       movq %rsp, %rsi
+       andq  $~15, %rsp
+#elif defined __x86_64__
+       mov (%rsp),%edi
+       addl $4,%esp
+       movl %esp, %esi
+       andl  $~15, %esp
+#else
+       popl %esi
+       movl %esp, %ecx
+       andl  $~15, %esp
+
+       subl $8,%esp
+       pushl %ecx
+       pushl %esi
+#endif
+
+       call main
+
+       hlt
+
+       .type syscall,  @function
+       .globl syscall
+       .p2align 4
+syscall:
+#ifdef __x86_64__
+       movq %rdi, %rax         /* Syscall number -> rax.  */
+       movq %rsi, %rdi         /* shift arg1 - arg5.  */
+       movq %rdx, %rsi
+       movq %rcx, %rdx
+       movq %r8, %r10
+       movq %r9, %r8
+       movq 8(%rsp),%r9        /* arg6 is on the stack.  */
+       syscall                 /* Do the system call.  */
+#else
+       push %ebp
+       push %edi
+       push %esi
+       push %ebx
+       mov 0x2c(%esp),%ebp
+       mov 0x28(%esp),%edi
+       mov 0x24(%esp),%esi
+       mov 0x20(%esp),%edx
+       mov 0x1c(%esp),%ecx
+       mov 0x18(%esp),%ebx
+       mov 0x14(%esp),%eax
+       int $0x80
+       pop %ebx
+       pop %esi
+       pop %edi
+       pop %ebp
+#endif
+       ret                     /* Return to caller.  */
+       .size syscall, .-syscall
+       .section .note.GNU-stack,"",@progbits
+
+       .section ".note.gnu.property", "a"
+#ifdef __LP64__
+       .p2align 3
+#else
+       .p2align 2
+#endif
+       .long 1f - 0f           /* name length */
+       .long 5f - 2f           /* data length */
+       .long 5                 /* note type */
+0:     .asciz "GNU"            /* vendor name */
+1:
+#ifdef __LP64__
+       .p2align 3
+#else
+       .p2align 2
+#endif
+2:     .long 0xc0000002        /* pr_type.  */
+       .long 4f - 3f           /* pr_datasz.  */
+3:
+       .long 0x2
+4:
+#ifdef __LP64__
+       .p2align 3
+#else
+       .p2align 2
+#endif
+5:
diff --git a/ld/testsuite/ld-elf/linux-x86.exp b/ld/testsuite/ld-elf/linux-x86.exp
new file mode 100644 (file)
index 0000000..f6f5a80
--- /dev/null
@@ -0,0 +1,46 @@
+# Expect script for simple native Linux/x86 tests.
+#   Copyright (C) 2018 Free Software Foundation, Inc.
+#
+# This file is part of the GNU Binutils.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+# Test very simple native Linux/x86 programs with linux-x86.S.
+if { ![isnative] || [which $CC] == 0 \
+     || (![istarget "i?86-*-linux*"] \
+         && ![istarget "x86_64-*-linux*"] \
+         && ![istarget "amd64-*-linux*"]) } {
+    return
+}
+
+# Add $PLT_CFLAGS if PLT is expected.
+global PLT_CFLAGS
+# Add $NOPIE_CFLAGS and $NOPIE_LDFLAGS if non-PIE is required.
+global NOPIE_CFLAGS NOPIE_LDFLAGS
+
+run_ld_link_exec_tests [list \
+    [list \
+       "Run PR ld/23428 test" \
+       "--no-dynamic-linker -z separate-code" \
+       "" \
+       { linux-x86.S pr23428.c dummy.s } \
+       "pr23428" \
+       "pass.out" \
+       "$NOPIE_CFLAGS -fno-asynchronous-unwind-tables" \
+       "asm" \
+    ] \
+]
diff --git a/ld/testsuite/ld-elf/pr23428.c b/ld/testsuite/ld-elf/pr23428.c
new file mode 100644 (file)
index 0000000..3631ed7
--- /dev/null
@@ -0,0 +1,43 @@
+#include <unistd.h>
+#include <link.h>
+#include <syscall.h>
+
+#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
+
+int
+main (int argc, char **argv)
+{
+  char **ev = &argv[argc + 1];
+  char **evp = ev;
+  ElfW(auxv_t) *av;
+  const ElfW(Phdr) *phdr = NULL;
+  size_t phnum = 0;
+  size_t loadnum = 0;
+  int fd = STDOUT_FILENO;
+  size_t i;
+
+  while (*evp++ != NULL)
+    ;
+
+  av = (ElfW(auxv_t) *) evp;
+
+  for (; av->a_type != AT_NULL; ++av)
+    switch (av->a_type)
+      {
+      case AT_PHDR:
+       phdr = (const void *) av->a_un.a_val;
+       break;
+      case AT_PHNUM:
+       phnum = av->a_un.a_val;
+       break;
+      }
+
+  for (i = 0; i < phnum; i++, phdr++)
+    if (phdr->p_type == PT_LOAD)
+      loadnum++;
+
+  syscall (SYS_write, fd, STRING_COMMA_LEN ("PASS\n"));
+
+  syscall (SYS_exit, !loadnum);
+  return 0;
+}
index b58139e9dda3ef21335b383e1b7fd092f35bcdb6..3909c0eaa146b581cb249914d175c00525fe97f5 100644 (file)
@@ -177,6 +177,8 @@ if { ![istarget "d10v-*-*"]
     foreach sfile $sfiles { puts $ofd "#source: $sfile" }
     if { [istarget spu*-*-*] } {
        puts $ofd "#ld: --local-store 0:0"
+    } elseif { [istarget "i?86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
+       puts $ofd "#ld: -z noseparate-code"
     } else {
        puts $ofd "#ld:"
     }
index ac9beff2e52dcaad95db6ffc5e98d02951a7d95c..aba7d6b03f5c92801bf151d0316c7cda26e36dcc 100644 (file)
@@ -2,7 +2,7 @@
 #source: abs.s
 #source: zero.s
 #as: --32 -march=iamcu
-#ld: -m elf_iamcu
+#ld: -m elf_iamcu -z noseparate-code
 #objdump: -rs -j .text
 
 .*:     file format .*
index e660aca5246212686c5ed73866d73f6d64837e67..191ee4456ad8b1a267a8534ce9f0df1b9997e169 100644 (file)
@@ -2,7 +2,7 @@
 #as: --32
 #source: abs.s
 #source: zero.s
-#ld: -melf_i386
+#ld: -melf_i386 -z noseparate-code
 #objdump: -rs
 
 .*:     file format .*
index 6d794fe653a4f3db7092397483679dc02095b38d..56c95367e1cc0170d7b887ac67fb4db1c01f3c78 100644 (file)
@@ -462,6 +462,9 @@ run_dump_test "pr23189"
 run_dump_test "pr23194"
 run_dump_test "pr23372a"
 run_dump_test "pr23372b"
+run_dump_test "pr23486a"
+run_dump_test "pr23486b"
+run_dump_test "pr23854"
 
 if { !([istarget "i?86-*-linux*"]
        || [istarget "i?86-*-gnu*"]
index ec51540a421a0c3021ab425d64cf87e6e518ae3a..7eba52d95e8f1209e1df16ae535465f42e83e425 100644 (file)
@@ -1,6 +1,6 @@
 #name: PR ld/12718
 #as: --32
-#ld: -melf_i386
+#ld: -melf_i386 -z noseparate-code
 #readelf: -S
 
 There are 5 section headers, starting at offset 0x[0-9a-f]+:
index e49079b3c824580aa0df7163521824630ce05eaf..ea2da3eb51ed8f8561facce061e85b6c385fd582 100644 (file)
@@ -1,6 +1,6 @@
 #name: PR ld/12921
 #as: --32
-#ld: -melf_i386
+#ld: -melf_i386 -z noseparate-code
 #readelf: -S --wide
 
 There are 7 section headers, starting at offset 0x[0-9a-f]+:
diff --git a/ld/testsuite/ld-i386/pr23486a.d b/ld/testsuite/ld-i386/pr23486a.d
new file mode 100644 (file)
index 0000000..41a6dcf
--- /dev/null
@@ -0,0 +1,10 @@
+#source: ../ld-x86-64/pr23486a.s
+#source: ../ld-x86-64/pr23486b.s
+#as: --32
+#ld: -r -m elf_i386
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-i386/pr23486b.d b/ld/testsuite/ld-i386/pr23486b.d
new file mode 100644 (file)
index 0000000..08019b7
--- /dev/null
@@ -0,0 +1,10 @@
+#source: ../ld-x86-64/pr23486b.s
+#source: ../ld-x86-64/pr23486a.s
+#as: --32
+#ld: -r -m elf_i386
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-i386/pr23854.d b/ld/testsuite/ld-i386/pr23854.d
new file mode 100644 (file)
index 0000000..3ed9c20
--- /dev/null
@@ -0,0 +1,28 @@
+#as: --32 -mrelax-relocations=yes
+#ld: -melf_i386
+#objdump: -dw
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+ +[a-f0-9]+:   66 13 81 f8 ff ff ff    adc    -0x8\(%ecx\),%ax
+ +[a-f0-9]+:   66 03 99 f8 ff ff ff    add    -0x8\(%ecx\),%bx
+ +[a-f0-9]+:   66 23 89 f8 ff ff ff    and    -0x8\(%ecx\),%cx
+ +[a-f0-9]+:   66 3b 91 f8 ff ff ff    cmp    -0x8\(%ecx\),%dx
+ +[a-f0-9]+:   66 0b b9 f8 ff ff ff    or     -0x8\(%ecx\),%di
+ +[a-f0-9]+:   66 1b b1 f8 ff ff ff    sbb    -0x8\(%ecx\),%si
+ +[a-f0-9]+:   66 2b a9 f8 ff ff ff    sub    -0x8\(%ecx\),%bp
+ +[a-f0-9]+:   66 33 a1 f8 ff ff ff    xor    -0x8\(%ecx\),%sp
+ +[a-f0-9]+:   66 85 89 f8 ff ff ff    test   %cx,-0x8\(%ecx\)
+ +[a-f0-9]+:   66 13 81 fc ff ff ff    adc    -0x4\(%ecx\),%ax
+ +[a-f0-9]+:   66 03 99 fc ff ff ff    add    -0x4\(%ecx\),%bx
+ +[a-f0-9]+:   66 23 89 fc ff ff ff    and    -0x4\(%ecx\),%cx
+ +[a-f0-9]+:   66 3b 91 fc ff ff ff    cmp    -0x4\(%ecx\),%dx
+ +[a-f0-9]+:   66 0b b9 fc ff ff ff    or     -0x4\(%ecx\),%di
+ +[a-f0-9]+:   66 1b b1 fc ff ff ff    sbb    -0x4\(%ecx\),%si
+ +[a-f0-9]+:   66 2b a9 fc ff ff ff    sub    -0x4\(%ecx\),%bp
+ +[a-f0-9]+:   66 33 a1 fc ff ff ff    xor    -0x4\(%ecx\),%sp
+ +[a-f0-9]+:   66 85 89 fc ff ff ff    test   %cx,-0x4\(%ecx\)
+#pass
diff --git a/ld/testsuite/ld-i386/pr23854.s b/ld/testsuite/ld-i386/pr23854.s
new file mode 100644 (file)
index 0000000..565e747
--- /dev/null
@@ -0,0 +1,33 @@
+       .data
+       .type   bar, @object
+bar:
+       .byte   1
+       .size   bar, .-bar
+       .globl  foo
+       .type   foo, @object
+foo:
+       .byte   1
+       .size   foo, .-foo
+       .text
+       .globl  _start
+       .type   _start, @function
+_start:
+       adcw    bar@GOT(%ecx), %ax
+       addw    bar@GOT(%ecx), %bx
+       andw    bar@GOT(%ecx), %cx
+       cmpw    bar@GOT(%ecx), %dx
+       orw     bar@GOT(%ecx), %di
+       sbbw    bar@GOT(%ecx), %si
+       subw    bar@GOT(%ecx), %bp
+       xorw    bar@GOT(%ecx), %sp
+       testw   %cx, bar@GOT(%ecx)
+       adcw    foo@GOT(%ecx), %ax
+       addw    foo@GOT(%ecx), %bx
+       andw    foo@GOT(%ecx), %cx
+       cmpw    foo@GOT(%ecx), %dx
+       orw     foo@GOT(%ecx), %di
+       sbbw    foo@GOT(%ecx), %si
+       subw    foo@GOT(%ecx), %bp
+       xorw    foo@GOT(%ecx), %sp
+       testw   %cx, foo@GOT(%ecx)
+       .size   _start, .-_start
index 0ed91f5922a519bcbf835ec8070d18d18a4be39a..d03203c1e5bc926d72ecce569f5b52a02621152a 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x800000
-       x86 ISA used: 586, SSE
        x86 ISA needed: i486, 586
 #pass
index cb2bc15d9a327f4fc1d8139b470513ecd9417004..da295eb6c737cd359cea44d31823252dab069196 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x800000
-       x86 ISA used: i486, 586, SSE
        x86 ISA needed: i486, 586, SSE
 #pass
index 552965058c1a0d2a9b22bea9bcfd3140f035ddaa..e4141594b3b3f0b7f1b14d90a44c90df59fdd902 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x900000
-       x86 ISA used: i486, 586, SSE
        x86 ISA needed: i486, 586, SSE
 #pass
index 4bb35b00fb56a9ce4515a9682be9973249ee04fc..0aedea16145ef55a26bc4704c0fba4e3e6e2ceed 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
-       x86 ISA needed: 586, SSE, SSE3, SSE4_1
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
index 418d58a8f746d2a6c1895f8e2f0d59aa82480e92..bd69ac64783a4d3d6ede07943b84a5ff422506f7 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
-       x86 ISA needed: 586, SSE, SSE3, SSE4_1
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
index e261038f608155bc68c5ad4d612475d5fcee91a8..76d2a39f2cf2a904dd10c90b3e1d6e9158204ec9 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
-       x86 ISA needed: 586, SSE, SSE3, SSE4_1
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
index 25f3d2361e6635c82f6fe27bef75b98f0b5e8e66..e770ecffa51b028db2647197de62bec2af00f4bb 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: i486, 586, SSE2, SSE3
-       x86 ISA needed: 586, SSE, SSE3, SSE4_1
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: 586, SSE, SSE3, SSE4_1
index 612d91402fdd4e1e04d19fc57a1d4571da45dc22..2b97af79e5afbd31d5079de70d40ce87c9664522 100644 (file)
@@ -713,7 +713,9 @@ run_ld_link_exec_tests [list \
 # That does not happen for the pr23169 testcase where the resolver is
 # in the executable (which is relocated last by ld.so).
 if { [isnative]
-     && ![istarget "powerpc-*-*"] } {
+     && !([istarget "powerpc-*-*"]
+           || [istarget "aarch64*-*-*"]
+           || [istarget "sparc*-*-*"]) } {
 run_ld_link_exec_tests [list \
     [list \
        "Run pr23169a" \
index b22eaa12c9c700d2beb5e78d0bbac02e216f923c..f89855a08f9b5d7fe094db57cda42bbdc77ea34e 100644 (file)
@@ -2,4 +2,5 @@ SECTIONS {
  .text 0xa00 : { *(.text); *(.gnu.linkonce.t.*) }
  .gcc_except_table 0x2000 : { *(.gcc_except_table) }
  .eh_frame 0x4000 : { *(.eh_frame) }
+  /DISCARD/ : { *(.note.gnu.property) }
 }
index 7c50b0f1021c95ed25d1aeaf140550575f056faa..4ce74f25878d516ffe48b7f68bebc37b96bf644e 100644 (file)
@@ -219,6 +219,12 @@ set lto_link_tests [list \
   [list "Build pr22751.a" \
    "$plug_opt" "-flto $lto_no_fat $INT128_CFLAGS" \
    {pr22751.c} {} "pr22751.a"] \
+  [list "Build libpr23818.so" \
+   "-shared -flto -g -Wl,-version-script,pr23818.t" \
+   "-g -flto $lto_fat" \
+   {pr23818a.c pr23818b.c} \
+   {{"readelf" {-s --wide} "pr23818.d"}} \
+   "libpr23818.so"] \
 ]
 
 if { [at_least_gcc_version 4 7] } {
diff --git a/ld/testsuite/ld-plugin/pr23818.d b/ld/testsuite/ld-plugin/pr23818.d
new file mode 100644 (file)
index 0000000..5753cd6
--- /dev/null
@@ -0,0 +1,4 @@
+#failif
+#...
+.*0+ +[A-Z]+ +GLOBAL +DEFAULT +ABS foo
+#...
diff --git a/ld/testsuite/ld-plugin/pr23818.t b/ld/testsuite/ld-plugin/pr23818.t
new file mode 100644 (file)
index 0000000..45bca55
--- /dev/null
@@ -0,0 +1,4 @@
+{
+  global: bar;
+  local: *;
+};
diff --git a/ld/testsuite/ld-plugin/pr23818a.c b/ld/testsuite/ld-plugin/pr23818a.c
new file mode 100644 (file)
index 0000000..5b5ccbf
--- /dev/null
@@ -0,0 +1,4 @@
+void
+foo ()
+{
+}
diff --git a/ld/testsuite/ld-plugin/pr23818b.c b/ld/testsuite/ld-plugin/pr23818b.c
new file mode 100644 (file)
index 0000000..d4be333
--- /dev/null
@@ -0,0 +1,7 @@
+void foo (void);
+
+void
+bar (void)
+{
+  foo ();
+}
index 0359ba28cb2ac1f0f33a4a1bc29c6ce11e82926a..5ec3850787ead40b664d6abd2be81c55801b812d 100644 (file)
@@ -221,7 +221,7 @@ set ppc64elftests {
      "tlsopt4"}
     {"TLS DLL" "-shared -melf64ppc --version-script tlsdll.ver" "" "-a64" {tlsdll.s}
      {} "tlsdll.so"}
-    {"TLS opt 5" "-melf64ppc --no-plt-align -shared --gc-sections --no-plt-localentry tmpdir/tlsdll.so" "" "-a64"  {tlsopt5.s}
+    {"TLS opt 5" "-melf64ppc -shared --hash-style=both --gc-sections --no-plt-localentry tmpdir/tlsdll.so" "" "-a64"  {tlsopt5.s}
      {{objdump -dr tlsopt5.d} {readelf -wf tlsopt5.wf}}
      "tlsopt5"}
     {"sym@tocbase" "-shared -melf64ppc" "" "-a64" {symtocbase-1.s symtocbase-2.s}
@@ -328,6 +328,7 @@ if [ supports_ppc64 ] then {
     run_dump_test "dotsym2"
     run_dump_test "dotsym3"
     run_dump_test "dotsym4"
+    run_dump_test "pr23937"
 }
 
 run_dump_test "tlsld32"
diff --git a/ld/testsuite/ld-powerpc/pr23937.d b/ld/testsuite/ld-powerpc/pr23937.d
new file mode 100644 (file)
index 0000000..6ef79e8
--- /dev/null
@@ -0,0 +1,10 @@
+#as: -a64
+#ld: -melf64ppc --defsym puts=0 --defsym _start=0
+#readelf: -srW
+# Check that the IRELATIVE addend is magic+0, not magic+8
+
+#...
+.* R_PPC64_IRELATIVE +10000180
+#...
+.*: 0+10000180 +20 IFUNC +LOCAL +DEFAULT .* magic
+#pass
diff --git a/ld/testsuite/ld-powerpc/pr23937.s b/ld/testsuite/ld-powerpc/pr23937.s
new file mode 100644 (file)
index 0000000..155e53a
--- /dev/null
@@ -0,0 +1,65 @@
+       .abiversion 2
+       .text
+       .p2align 4,,15
+       .type   implementation, @function
+implementation:
+.LCF0:
+       addis 2,12,.TOC.-.LCF0@ha
+       addi 2,2,.TOC.-.LCF0@l
+       .localentry     implementation,.-implementation
+       mflr 0
+       addis 3,2,.LC0@toc@ha
+       addi 3,3,.LC0@toc@l
+       std 0,16(1)
+       stdu 1,-32(1)
+       bl puts
+       nop
+       addi 1,1,32
+       li 3,0
+       ld 0,16(1)
+       mtlr 0
+       blr
+       .size   implementation,.-implementation
+
+       .p2align 4,,15
+       .type   resolver, @function
+resolver:
+.LCF1:
+       addis 2,12,.TOC.-.LCF1@ha
+       addi 2,2,.TOC.-.LCF1@l
+       .localentry     resolver,.-resolver
+       addis 3,2,implementation@toc@ha
+       addi 3,3,implementation@toc@l
+       blr
+       .size   resolver,.-resolver
+
+       .type   magic, @gnu_indirect_function
+       .set    magic,resolver
+
+       .section        .text.startup,"ax",@progbits
+       .p2align 4,,15
+       .globl main
+       .type   main, @function
+main:
+.LCF2:
+       addis 2,12,.TOC.-.LCF2@ha
+       addi 2,2,.TOC.-.LCF2@l
+       .localentry     main,.-main
+       mflr 0
+       std 0,16(1)
+       stdu 1,-32(1)
+       bl magic
+       nop
+       addi 1,1,32
+       cntlzw 3,3
+       ld 0,16(1)
+       srwi 3,3,5
+       mtlr 0
+       xori 3,3,0x1
+       blr
+       .size   main,.-main
+
+       .section        .rodata.str1.8,"aMS",@progbits,1
+       .p2align 3
+.LC0:
+       .string "'ere I am JH"
index 4521a9b427fdeee4c2982e3a101ef51072437396..4caf1832ea51f7a571f53fc30e620d8b4689139f 100644 (file)
@@ -8,6 +8,13 @@
 
 Disassembly of section \.text:
 
+.* <.*\.plt_call\.foo>:
+.*:    (18 00 41 f8|f8 41 00 18)       std     r2,24\(r1\)
+.*:    (28 80 82 e9|e9 82 80 28)       ld      r12,-32728\(r2\)
+.*:    (a6 03 89 7d|7d 89 03 a6)       mtctr   r12
+.*:    (20 04 80 4e|4e 80 04 20)       bctr
+       \.\.\.
+
 .* <.*\.plt_call\.__tls_get_addr_opt@@GLIBC_2\.22>:
 .*:    (00 00 63 e9|e9 63 00 00)       ld      r11,0\(r3\)
 .*:    (08 00 83 e9|e9 83 00 08)       ld      r12,8\(r3\)
@@ -19,17 +26,21 @@ Disassembly of section \.text:
 .*:    (a6 02 68 7d|7d 68 02 a6)       mflr    r11
 .*:    (08 00 61 f9|f9 61 00 08)       std     r11,8\(r1\)
 .*:    (18 00 41 f8|f8 41 00 18)       std     r2,24\(r1\)
-.*:    (28 80 82 e9|e9 82 80 28)       ld      r12,-32728\(r2\)
+.*:    (30 80 82 e9|e9 82 80 30)       ld      r12,-32720\(r2\)
 .*:    (a6 03 89 7d|7d 89 03 a6)       mtctr   r12
 .*:    (21 04 80 4e|4e 80 04 21)       bctrl
 .*:    (18 00 41 e8|e8 41 00 18)       ld      r2,24\(r1\)
 .*:    (08 00 61 e9|e9 61 00 08)       ld      r11,8\(r1\)
 .*:    (a6 03 68 7d|7d 68 03 a6)       mtlr    r11
 .*:    (20 00 80 4e|4e 80 00 20)       blr
+       \.\.\.
 
 .* <_start>:
 .*:    (08 80 62 38|38 62 80 08)       addi    r3,r2,-32760
-.*:    (b9 ff ff 4b|4b ff ff b9)       bl      .*
+.*:    (9d ff ff 4b|4b ff ff 9d)       bl      .* <.*\.plt_call\.__tls_get_addr_opt@@GLIBC_2\.22>
+.*:    (00 00 00 60|60 00 00 00)       nop
+.*:    (75 ff ff 4b|4b ff ff 75)       bl      .* <.*\.plt_call\.foo>
+.*:    (18 00 41 e8|e8 41 00 18)       ld      r2,24\(r1\)
 .*:    (00 00 00 60|60 00 00 00)       nop
 .*
 .*
@@ -50,5 +61,8 @@ Disassembly of section \.text:
 .*:    (08 00 6b e9|e9 6b 00 08)       ld      r11,8\(r11\)
 .*:    (20 04 80 4e|4e 80 04 20)       bctr
 
+.* <foo@plt>:
+.*     (c8 ff ff 4b|4b ff ff c8)       b       .*
+
 .* <__tls_get_addr_opt@plt>:
-.*:    (c8 ff ff 4b|4b ff ff c8)       b       .*
+.*:    (c4 ff ff 4b|4b ff ff c4)       b       .*
index 70902ef96a89c0a1b81898b4316402bf7a3976ee..7cb82db1f6565bbd80083cd7640a9b403b4ef1cb 100644 (file)
@@ -1,7 +1,10 @@
  .globl _start
+ .weak foo
 _start:
  .cfi_startproc
  addi 3,2,gd@got@tlsgd
  bl __tls_get_addr(gd@tlsgd)
  nop
+ bl foo
+ nop
  .cfi_endproc
index af8cb76d1ca525d0ee625bfadd7737892d92f53f..f0453610e085a2397c5df17d7d92ce328e2bac8b 100644 (file)
@@ -7,11 +7,10 @@ Contents of the \.eh_frame section:
   Data alignment factor: -8
   Return address column: 65
   Augmentation data:     1b
-
   DW_CFA_def_cfa: r1 ofs 0
 
 0+14 0+14 0+18 FDE cie=0+ pc=.*
-  DW_CFA_advance_loc: 48 to .*
+  DW_CFA_advance_loc: 80 to .*
   DW_CFA_offset_extended_sf: r65 at cfa\+8
   DW_CFA_advance_loc: 16 to .*
   DW_CFA_restore_extended: r65
index 5ff057a5e30f07f9a20a8e1392be96818ba5aad4..6eda1d2dc495451dc5dc78965ca92f2f83b57a40 100644 (file)
@@ -11,4 +11,6 @@ SECTIONS
     *(.data)
     *(.rw)
   }
+
+  /DISCARD/ : { *(.note.gnu.property) }
 }
index 723863995e1a31ed5e4752918e71e00ec714de0e..c3c4eddab4c2422a7fb7f296083bf0ee2bc2d472 100644 (file)
@@ -18,4 +18,5 @@ SECTIONS
     LONG (SIZEOF (.tdata))
     LONG (SIZEOF (.tbss))
   } :image
+  /DISCARD/ : { *(.note.gnu.property) }
 }
index 2c26639fc08e449e6b2b5772b0ac9e6ab09e2daa..6b0fde0eed8f6fc65fe6331f85dd7ac1ef2fefaa 100644 (file)
@@ -2,7 +2,7 @@
 #source: ../ld-i386/abs.s
 #source: ../ld-i386/zero.s
 #as: --64 -march=k1om
-#ld: -m elf_k1om
+#ld: -m elf_k1om -z noseparate-code
 #objdump: -rs -j .text
 
 .*:     file format .*
index 1fb96d44b7fbf22f1942fd31a7b8f2aabf472046..f87869f9d046faa8b92dc303836c6c95591865e8 100644 (file)
@@ -2,7 +2,7 @@
 #source: ../ld-i386/abs.s
 #source: ../ld-i386/zero.s
 #as: --64 -march=l1om
-#ld: -m elf_l1om
+#ld: -m elf_l1om -z noseparate-code
 #objdump: -rs -j .text
 #target: x86_64-*-linux*
 
index b24b018639ec542a91eec6dba54e131d81a43503..d99ab4685d06264eb5eb98c69c9ef3b6690f35b9 100644 (file)
@@ -1,7 +1,7 @@
 #name: Absolute non-overflowing relocs
 #source: ../ld-i386/abs.s
 #source: ../ld-i386/zero.s
-#ld:
+#ld: -z noseparate-code
 #objdump: -rs
 
 .*:     file format .*
index 07d17325d0413460a3b51a94cf21f0743f365c5e..2c503ffbaae70aba0f9885d57ce47fb5b8dd2c95 100644 (file)
@@ -1,6 +1,6 @@
 #name: PR ld/12718
 #as: --64
-#ld: -melf_x86_64
+#ld: -melf_x86_64 -z noseparate-code
 #readelf: -S --wide
 
 There are 5 section headers, starting at offset 0x[0-9a-f]+:
index 6fe6abee095c33a1b31b99b41419e24be9be2697..1162d55818ea9d6bce84a87c1021d2941bd6fc1a 100644 (file)
@@ -1,6 +1,6 @@
 #name: PR ld/12921
 #as: --64
-#ld: -melf_x86_64
+#ld: -melf_x86_64 -z noseparate-code
 #readelf: -S --wide
 
 There are 7 section headers, starting at offset 0x[0-9a-f]+:
diff --git a/ld/testsuite/ld-x86-64/pr23486a-x32.d b/ld/testsuite/ld-x86-64/pr23486a-x32.d
new file mode 100644 (file)
index 0000000..6d9fa68
--- /dev/null
@@ -0,0 +1,10 @@
+#source: pr23486a.s
+#source: pr23486b.s
+#as: --x32
+#ld: -r -m elf32_x86_64
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-x86-64/pr23486a.d b/ld/testsuite/ld-x86-64/pr23486a.d
new file mode 100644 (file)
index 0000000..dc2b7bf
--- /dev/null
@@ -0,0 +1,10 @@
+#source: pr23486a.s
+#source: pr23486b.s
+#as: --64 -defsym __64_bit__=1
+#ld: -r -m elf_x86_64
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-x86-64/pr23486a.s b/ld/testsuite/ld-x86-64/pr23486a.s
new file mode 100644 (file)
index 0000000..a07d0c7
--- /dev/null
@@ -0,0 +1,30 @@
+       .section ".note.gnu.property", "a"
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+       .long 1f - 0f           /* name length.  */
+       .long 4f - 1f           /* data length.  */
+       /* NT_GNU_PROPERTY_TYPE_0 */
+       .long 5                 /* note type.  */
+0:
+       .asciz "GNU"            /* vendor name.  */
+1:
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+       /* GNU_PROPERTY_X86_ISA_1_USED */
+       .long 0xc0000000        /* pr_type.  */
+       .long 3f - 2f           /* pr_datasz.  */
+2:
+       .long 0xa
+3:
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+4:
diff --git a/ld/testsuite/ld-x86-64/pr23486b-x32.d b/ld/testsuite/ld-x86-64/pr23486b-x32.d
new file mode 100644 (file)
index 0000000..0445e69
--- /dev/null
@@ -0,0 +1,10 @@
+#source: pr23486b.s
+#source: pr23486a.s
+#as: --x32
+#ld: -r -m elf32_x86_64
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-x86-64/pr23486b.d b/ld/testsuite/ld-x86-64/pr23486b.d
new file mode 100644 (file)
index 0000000..dd0fe88
--- /dev/null
@@ -0,0 +1,10 @@
+#source: pr23486b.s
+#source: pr23486a.s
+#as: --64 -defsym __64_bit__=1
+#ld: -r -m elf_x86_64
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+  Owner                 Data size      Description
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586
diff --git a/ld/testsuite/ld-x86-64/pr23486b.s b/ld/testsuite/ld-x86-64/pr23486b.s
new file mode 100644 (file)
index 0000000..c5167ee
--- /dev/null
@@ -0,0 +1,30 @@
+       .section ".note.gnu.property", "a"
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+       .long 1f - 0f           /* name length.  */
+       .long 4f - 1f           /* data length.  */
+       /* NT_GNU_PROPERTY_TYPE_0 */
+       .long 5                 /* note type.  */
+0:
+       .asciz "GNU"            /* vendor name.  */
+1:
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+       /* GNU_PROPERTY_X86_ISA_1_NEEDED */
+       .long 0xc0000001        /* pr_type.  */
+       .long 3f - 2f           /* pr_datasz.  */
+2:
+       .long 0x3
+3:
+.ifdef __64_bit__
+       .p2align 3
+.else
+       .p2align 2
+.endif
+4:
diff --git a/ld/testsuite/ld-x86-64/pr23854.d b/ld/testsuite/ld-x86-64/pr23854.d
new file mode 100644 (file)
index 0000000..95770d3
--- /dev/null
@@ -0,0 +1,28 @@
+#as: --64 -mrelax-relocations=yes
+#ld: -melf_x86_64
+#objdump: -dw
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+[a-f0-9]+ <_start>:
+ +[a-f0-9]+:   66 13 05 ([0-9a-f]{2} ){4} *    adc    0x[a-f0-9]+\(%rip\),%ax        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 03 1d ([0-9a-f]{2} ){4} *    add    0x[a-f0-9]+\(%rip\),%bx        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 23 0d ([0-9a-f]{2} ){4} *    and    0x[a-f0-9]+\(%rip\),%cx        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 3b 15 ([0-9a-f]{2} ){4} *    cmp    0x[a-f0-9]+\(%rip\),%dx        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 0b 3d ([0-9a-f]{2} ){4} *    or     0x[a-f0-9]+\(%rip\),%di        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 1b 35 ([0-9a-f]{2} ){4} *    sbb    0x[a-f0-9]+\(%rip\),%si        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 2b 2d ([0-9a-f]{2} ){4} *    sub    0x[a-f0-9]+\(%rip\),%bp        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 44 33 05 ([0-9a-f]{2} ){4} * xor    0x[a-f0-9]+\(%rip\),%r8w        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 85 0d ([0-9a-f]{2} ){4} *    test   %cx,0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <.got>
+ +[a-f0-9]+:   66 13 05 ([0-9a-f]{2} ){4} *    adc    0x[a-f0-9]+\(%rip\),%ax        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 03 1d ([0-9a-f]{2} ){4} *    add    0x[a-f0-9]+\(%rip\),%bx        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 23 0d ([0-9a-f]{2} ){4} *    and    0x[a-f0-9]+\(%rip\),%cx        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 3b 15 ([0-9a-f]{2} ){4} *    cmp    0x[a-f0-9]+\(%rip\),%dx        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 0b 3d ([0-9a-f]{2} ){4} *    or     0x[a-f0-9]+\(%rip\),%di        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 1b 35 ([0-9a-f]{2} ){4} *    sbb    0x[a-f0-9]+\(%rip\),%si        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 2b 2d ([0-9a-f]{2} ){4} *    sub    0x[a-f0-9]+\(%rip\),%bp        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 44 33 05 ([0-9a-f]{2} ){4} * xor    0x[a-f0-9]+\(%rip\),%r8w        # [a-f0-9]+ <.got\+0x8>
+ +[a-f0-9]+:   66 85 0d ([0-9a-f]{2} ){4} *    test   %cx,0x[a-f0-9]+\(%rip\)        # [a-f0-9]+ <.got\+0x8>
+#pass
diff --git a/ld/testsuite/ld-x86-64/pr23854.s b/ld/testsuite/ld-x86-64/pr23854.s
new file mode 100644 (file)
index 0000000..b720154
--- /dev/null
@@ -0,0 +1,33 @@
+       .data
+       .type   bar, @object
+bar:
+       .byte   1
+       .size   bar, .-bar
+       .globl  foo
+       .type   foo, @object
+foo:
+       .byte   1
+       .size   foo, .-foo
+       .text
+       .globl  _start
+       .type   _start, @function
+_start:
+       adcw    bar@GOTPCREL(%rip), %ax
+       addw    bar@GOTPCREL(%rip), %bx
+       andw    bar@GOTPCREL(%rip), %cx
+       cmpw    bar@GOTPCREL(%rip), %dx
+       orw     bar@GOTPCREL(%rip), %di
+       sbbw    bar@GOTPCREL(%rip), %si
+       subw    bar@GOTPCREL(%rip), %bp
+       xorw    bar@GOTPCREL(%rip), %r8w
+       testw   %cx, bar@GOTPCREL(%rip)
+       adcw    foo@GOTPCREL(%rip), %ax
+       addw    foo@GOTPCREL(%rip), %bx
+       andw    foo@GOTPCREL(%rip), %cx
+       cmpw    foo@GOTPCREL(%rip), %dx
+       orw     foo@GOTPCREL(%rip), %di
+       sbbw    foo@GOTPCREL(%rip), %si
+       subw    foo@GOTPCREL(%rip), %bp
+       xorw    foo@GOTPCREL(%rip), %r8w
+       testw   %cx, foo@GOTPCREL(%rip)
+       .size   _start, .-_start
diff --git a/ld/testsuite/ld-x86-64/pr24151a-x32.d b/ld/testsuite/ld-x86-64/pr24151a-x32.d
new file mode 100644 (file)
index 0000000..130611d
--- /dev/null
@@ -0,0 +1,4 @@
+#source: pr24151a.s
+#as: --x32
+#ld: -shared -melf32_x86_64
+#error: .*relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object
diff --git a/ld/testsuite/ld-x86-64/pr24151a.d b/ld/testsuite/ld-x86-64/pr24151a.d
new file mode 100644 (file)
index 0000000..783b85a
--- /dev/null
@@ -0,0 +1,3 @@
+#as: --64
+#ld: -shared -melf_x86_64
+#error: .*relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object
diff --git a/ld/testsuite/ld-x86-64/pr24151a.s b/ld/testsuite/ld-x86-64/pr24151a.s
new file mode 100644 (file)
index 0000000..e4ec7c8
--- /dev/null
@@ -0,0 +1,9 @@
+       .text
+       .globl  bar
+       .type   bar,@function
+bar:
+       movl    $30, foo(%rip)
+       .size   bar, .-bar
+       .protected foo
+       .type   foo,@object
+       .comm   foo,4,4
index 0ed91f5922a519bcbf835ec8070d18d18a4be39a..d03203c1e5bc926d72ecce569f5b52a02621152a 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x800000
-       x86 ISA used: 586, SSE
        x86 ISA needed: i486, 586
 #pass
index cb2bc15d9a327f4fc1d8139b470513ecd9417004..da295eb6c737cd359cea44d31823252dab069196 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x800000
-       x86 ISA used: i486, 586, SSE
        x86 ISA needed: i486, 586, SSE
 #pass
index 552965058c1a0d2a9b22bea9bcfd3140f035ddaa..e4141594b3b3f0b7f1b14d90a44c90df59fdd902 100644 (file)
@@ -3,6 +3,5 @@ Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
   GNU                  0x[0-9a-f]+     NT_GNU_PROPERTY_TYPE_0
       Properties: stack size: 0x900000
-       x86 ISA used: i486, 586, SSE
        x86 ISA needed: i486, 586, SSE
 #pass
index be8cc9efb1b1914d338f2038e43d19b16b7fb489..239cf622ff57353bace680483465cf7de5e9a999 100644 (file)
 3:
 
        .section ".note.gnu.property", "a"
+.ifdef __64_bit__
        .p2align 3
+.else
+       .p2align 2
+.endif
        .long 1f - 0f           /* name length.  */
        .long 3f - 1f           /* data length.  */
        /* NT_GNU_PROPERTY_TYPE_0 */
index 011426f5a4d988e699f38c9995b2131fdb824c22..4cec728dc743908780bbeffc59723e42017593d6 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 1b4229a0378520e42b0c73675edcfcc6a9bc4a58..a8df49a351b46bbd42b0c120755625f6e9d08101 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000020      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 290ed6abf127dd41b91f4c95483d0b0e4040ef39..c112626711217fce8a38b029949b76404899d615 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 1142e0327219f0b0c44484c20169177c60dc7dd0..f10dffdc2c371ca0826f17b829595a55ee69d666 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000020      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 819542d1811d3d5c64aaff04ae3ae8dfecc6cefe..0147a3c7b631dfa84bdf6c90c2a03bd0490cf168 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 4c5d0e0a18a31d904e9ec2d10de7f184234617c3..1f8c2dc92900c5776cf96ac051f2fc2e7ae12a2e 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000020      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index ba181e0bc59f73d43f0dd6e269282173c2f9088e..7ca2539ca50f3d2900d2672877f3ade17a910860 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000018      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x0000000c      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 5216f385dd3f3fa0ca912ee0761eea02a87a0cd3..f66a40e44902ed83d7740f2cf747bb95e592e7c1 100644 (file)
@@ -6,6 +6,5 @@
 
 Displaying notes found in: .note.gnu.property
   Owner                 Data size      Description
-  GNU                  0x00000020      NT_GNU_PROPERTY_TYPE_0
-      Properties: x86 ISA used: 586, SSE, SSE3, SSE4_1
-       x86 ISA needed: i486, 586, SSE2, SSE3
+  GNU                  0x00000010      NT_GNU_PROPERTY_TYPE_0
+      Properties: x86 ISA needed: i486, 586, SSE2, SSE3
index 6edb9e86f45cb8bae6511d2686af3407fc2605f2..ac41d8ea49101a28e6fbc971a479a73aab9def8b 100644 (file)
@@ -403,6 +403,13 @@ run_dump_test "pr23372a"
 run_dump_test "pr23372a-x32"
 run_dump_test "pr23372b"
 run_dump_test "pr23372b-x32"
+run_dump_test "pr23486a"
+run_dump_test "pr23486a-x32"
+run_dump_test "pr23486b"
+run_dump_test "pr23486b-x32"
+run_dump_test "pr23854"
+run_dump_test "pr24151a"
+run_dump_test "pr24151a-x32"
 
 if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
     return
index cfbefe9028e03598b7e071a1bf27c0bc7f5de76c..109509188200cf8220da0a347f00c89488590345 100644 (file)
@@ -1482,7 +1482,10 @@ proc run_ld_link_exec_tests { ldtests args } {
            continue
        }
 
-       if { [ string match "c++" $lang ] } {
+       if { [ string match "asm" $lang ] } {
+           set link_proc ld_link
+           set link_cmd $ld
+       } elseif { [ string match "c++" $lang ] } {
            set link_proc ld_link
            set link_cmd $CXX
        } else {
index d04963a9fa18936a3117f5b366f8007458277cff..8f89565935e5282fa15bb6f0457d40d395412674 100644 (file)
@@ -1,3 +1,36 @@
+2018-10-19  Tamar Christina  <tamar.christina@arm.com>
+
+       * arm-dis.c (UNKNOWN_INSTRUCTION_32BIT): Format specifier for arm mode.
+       (UNKNOWN_INSTRUCTION_16BIT): Format specifier for thumb mode.
+       (print_insn_arm, print_insn_thumb16, print_insn_thumb32): Use them.
+
+2018-10-16  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * aarch64-opc.c (struct operand_qualifier_data): Change qualifier data
+       corresponding to AARCH64_OPND_QLF_S_4B qualifier.
+
+2018-10-05  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * i386-dis.c (rm_table): Add enclv.
+       * i386-opc.tbl: Add enclv.
+       * i386-tbl.h: Regenerated.
+
+2018-07-18  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/23418
+       * i386-opc.h (Byte): Update comments.
+       (Word): Likewise.
+       (Dword): Likewise.
+       (Fword): Likewise.
+       (Qword): Likewise.
+       (Tbyte): Likewise.
+       (Xmmword): Likewise.
+       (Ymmword): Likewise.
+       (Zmmword): Likewise.
+       * i386-opc.tbl: Split vcvtps2qq, vcvtps2uqq, vcvttps2qq and
+       vcvttps2uqq.
+       * i386-tbl.h: Regenerated.
+
 2018-07-18  Nick Clifton  <nickc@redhat.com>
 
        2.31.1 Release point.
index ba2af7bfc26d2f760f19cdbdd07ebe5535308d72..e59240c98db3ea8472b992a423b53db6340033ea 100644 (file)
@@ -698,7 +698,7 @@ struct operand_qualifier_data aarch64_opnd_qualifiers[] =
   {4, 1, 0x2, "s", OQK_OPD_VARIANT},
   {8, 1, 0x3, "d", OQK_OPD_VARIANT},
   {16, 1, 0x4, "q", OQK_OPD_VARIANT},
-  {1, 4, 0x0, "4b", OQK_OPD_VARIANT},
+  {4, 1, 0x0, "4b", OQK_OPD_VARIANT},
 
   {1, 4, 0x0, "4b", OQK_OPD_VARIANT},
   {1, 8, 0x0, "8b", OQK_OPD_VARIANT},
@@ -2501,6 +2501,7 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx,
       else
        num = 16;
       num = num / aarch64_get_qualifier_esize (qualifier) - 1;
+      assert (aarch64_get_qualifier_nelem (qualifier) == 1);
 
       /* Index out-of-range.  */
       if (!value_in_range_p (opnd->reglane.index, 0, num))
index b6cccc52333d1de44149dde2567eb5f5999c6295..bc97bc26177472336ee319d409fd8445772db6df 100644 (file)
@@ -141,6 +141,8 @@ enum opcode_sentinel_enum
 } opcode_sentinels;
 
 #define UNDEFINED_INSTRUCTION      "\t\t; <UNDEFINED> instruction: %0-31x"
+#define UNKNOWN_INSTRUCTION_32BIT  "\t\t; <UNDEFINED> instruction: %08x"
+#define UNKNOWN_INSTRUCTION_16BIT  "\t\t; <UNDEFINED> instruction: %04x"
 #define UNPREDICTABLE_INSTRUCTION  "\t; <UNPREDICTABLE>"
 
 /* Common coprocessor opcodes shared between Arm and Thumb-2.  */
@@ -5188,7 +5190,8 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given)
          return;
        }
     }
-  abort ();
+  func (stream, UNKNOWN_INSTRUCTION_32BIT, (unsigned)given);
+  return;
 }
 
 /* Print one 16-bit Thumb instruction from PC on INFO->STREAM.  */
@@ -5459,7 +5462,8 @@ print_insn_thumb16 (bfd_vma pc, struct disassemble_info *info, long given)
       }
 
   /* No match.  */
-  abort ();
+  func (stream, UNKNOWN_INSTRUCTION_16BIT, (unsigned)given);
+  return;
 }
 
 /* Return the name of an V7M special register.  */
@@ -6083,7 +6087,8 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given)
       }
 
   /* No match.  */
-  abort ();
+  func (stream, UNKNOWN_INSTRUCTION_32BIT, (unsigned)given);
+  return;
 }
 
 /* Print data bytes on INFO->STREAM.  */
index 42d219cb119f809af2be4970d6f18f0378de4b25..78436879fb0f3dd443b3673234609e764028d60e 100644 (file)
@@ -12321,7 +12321,7 @@ static const struct dis386 rm_table[][8] = {
   },
   {
     /* RM_0F01_REG_0 */
-    { Bad_Opcode },
+    { "enclv",         { Skip_MODRM }, 0 },
     { "vmcall",                { Skip_MODRM }, 0 },
     { "vmlaunch",      { Skip_MODRM }, 0 },
     { "vmresume",      { Skip_MODRM }, 0 },
index 9a22b3c95f5fb85543ab5e0ea633d5cd41365429..f43b5e11eb27c4bfb1fd849f7e607c242a65c2ed 100644 (file)
@@ -736,23 +736,23 @@ enum
   RegMem,
   /* Memory.  */
   Mem,
-  /* BYTE memory. */
+  /* BYTE size. */
   Byte,
-  /* WORD memory. 2 byte */
+  /* WORD size. 2 byte */
   Word,
-  /* DWORD memory. 4 byte */
+  /* DWORD size. 4 byte */
   Dword,
-  /* FWORD memory. 6 byte */
+  /* FWORD size. 6 byte */
   Fword,
-  /* QWORD memory. 8 byte */
+  /* QWORD size. 8 byte */
   Qword,
-  /* TBYTE memory. 10 byte */
+  /* TBYTE size. 10 byte */
   Tbyte,
-  /* XMMWORD memory. */
+  /* XMMWORD size. */
   Xmmword,
-  /* YMMWORD memory. */
+  /* YMMWORD size. */
   Ymmword,
-  /* ZMMWORD memory.  */
+  /* ZMMWORD size.  */
   Zmmword,
   /* Unspecified memory size.  */
   Unspecified,
index fad588ae3ffbfce0db3abb139eb4186b58b321d5..99f4d6635aa25ff8af58647ce9c641a7222191a2 100644 (file)
@@ -4100,6 +4100,7 @@ xsavec64, 1, 0xfc7, 0x4, 2, CpuXSAVEC|Cpu64, Modrm|IgnoreSize|No_bSuf|No_wSuf|No
 
 encls, 0, 0xf01cf, None, 3, CpuSE1, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 enclu, 0, 0xf01d7, None, 3, CpuSE1, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
+enclv, 0, 0xf01c0, None, 3, CpuSE1, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { 0 }
 
 // SGX instructions end.
 
@@ -5408,11 +5409,13 @@ vcvtpd2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|
 vcvtpd2uqq, 3, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegZMM, RegZMM }
 
 vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|YMMword|Unspecified|BaseIndex, RegZMM }
-vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM }
+vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM }
+vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM }
 vcvtps2qq, 2, 0x667B, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|XMMword|Unspecified|BaseIndex, RegYMM }
 vcvtps2qq, 3, 0x667B, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegYMM, RegZMM }
 vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|YMMword|Unspecified|BaseIndex, RegZMM }
-vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM }
+vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM }
+vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM }
 vcvtps2uqq, 2, 0x6679, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|XMMword|Unspecified|BaseIndex, RegYMM }
 vcvtps2uqq, 3, 0x6679, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|StaticRounding|SAE, { Imm8, RegYMM, RegZMM }
 
@@ -5442,11 +5445,13 @@ vcvttpd2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3
 vcvttpd2uqq, 3, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=2|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegZMM, RegZMM }
 
 vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|YMMword|Unspecified|BaseIndex, RegZMM }
-vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM }
+vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM }
+vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM }
 vcvttps2qq, 2, 0x667A, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|XMMword|Unspecified|BaseIndex, RegYMM }
 vcvttps2qq, 3, 0x667A, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegYMM, RegZMM }
 vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=5|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegYMM|Dword|YMMword|Unspecified|BaseIndex, RegZMM }
-vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|Qword|Unspecified|BaseIndex, RegXMM }
+vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM, RegXMM }
+vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=2|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=3|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Dword|Qword|Unspecified|BaseIndex, RegXMM }
 vcvttps2uqq, 2, 0x6678, None, 1, CpuAVX512DQ|CpuAVX512VL, Modrm|EVex=3|Masking=3|VexOpcode=0|VexW=1|Broadcast|Disp8MemShift=4|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { RegXMM|Dword|XMMword|Unspecified|BaseIndex, RegYMM }
 vcvttps2uqq, 3, 0x6678, None, 1, CpuAVX512DQ, Modrm|EVex=1|Masking=3|VexOpcode=0|VexW=1|IgnoreSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|SAE, { Imm8, RegYMM, RegZMM }
 
index d513275debddfbe56c9e84507b194cfcd4fcbf59..42ac313ecadc1db444d1e39c7959244ee5866ca3 100644 (file)
@@ -83658,6 +83658,20 @@ const insn_template i386_optab[] =
     { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0 } } } },
+  { "enclv", 0, 0xf01c0, None, 3,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0 } },
+    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0 },
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0 } } } },
   { "vcvtpd2udqx", 2, 0x79, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,
@@ -87881,6 +87895,23 @@ const insn_template i386_optab[] =
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
          0, 0, 0 } } } },
+  { "vcvtps2qq", 2, 0x667B, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0 },
+    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } },
+      { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } } } },
   { "vcvtps2qq", 2, 0x667B, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
@@ -87892,8 +87923,8 @@ const insn_template i386_optab[] =
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
-         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
          0, 0, 0 } },
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
@@ -87952,6 +87983,23 @@ const insn_template i386_optab[] =
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
          0, 0, 0 } } } },
+  { "vcvtps2uqq", 2, 0x6679, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0 },
+    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } },
+      { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } } } },
   { "vcvtps2uqq", 2, 0x6679, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
@@ -87963,8 +88011,8 @@ const insn_template i386_optab[] =
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
-         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
          0, 0, 0 } },
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
@@ -88412,6 +88460,23 @@ const insn_template i386_optab[] =
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
          0, 0, 0 } } } },
+  { "vcvttps2qq", 2, 0x667A, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0 },
+    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } },
+      { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } } } },
   { "vcvttps2qq", 2, 0x667A, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
@@ -88423,8 +88488,8 @@ const insn_template i386_optab[] =
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
-         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
          0, 0, 0 } },
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
@@ -88483,6 +88548,23 @@ const insn_template i386_optab[] =
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
          0, 0, 0 } } } },
+  { "vcvttps2uqq", 2, 0x6678, None, 1,
+    { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        0, 0, 0, 0, 0 } },
+    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,
+      1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+      0, 0 },
+    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } },
+      { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
+         0, 0, 0 } } } },
   { "vcvttps2uqq", 2, 0x6678, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
@@ -88494,8 +88576,8 @@ const insn_template i386_optab[] =
       1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0,
       0, 0 },
-    { { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
-         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
+    { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
+         0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
          0, 0, 0 } },
       { { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
index ef75e38e7e155816c809f12a59198a4ebbd28d79..d8a9cce1e27bd58c84b0833909156752f2b54ef4 100644 (file)
@@ -1126,7 +1126,7 @@ e561 tbeginc SIL_RDU "constrained transaction begin" zEC12 zarch htm
 b2f8 tend S_00 "transaction end" zEC12 zarch htm
 c7 bpp SMI_U0RDP "branch prediction preload" zEC12 zarch
 c5 bprp MII_UPP "branch prediction relative preload" zEC12 zarch
-b2e8 ppa RRF_U0RR "perform processor assist" zEC12 zarch
+b2e8 ppa RRF_U0RR "perform processor assist" zEC12 zarch htm
 b2fa niai IE_UU "next instruction access intent" zEC12 zarch
 b98f crdte RRF_RURR2 "compare and replace DAT table entry" zEC12 zarch optparm
 e3000000009f lat RXY_RRRD "load and trap 32 bit" zEC12 zarch