PR ld/12570
authorJakub Jelinek <jakub@redhat.com>
Mon, 20 Jun 2011 13:18:52 +0000 (13:18 +0000)
committerJakub Jelinek <jakub@redhat.com>
Mon, 20 Jun 2011 13:18:52 +0000 (13:18 +0000)
include/
* bfdlink.h (struct bfd_link_info): Add no_ld_generated_unwind_info
option.
ld/
* emultempl/elf32.em (OPTION_LD_GENERATED_UNWIND_INFO,
OPTION_NO_LD_GENERATED_UNWIND_INFO): Define.
(gld${EMULATION_NAME}_handle_option): Handle
--ld-generated-unwind-info and --no-ld-generated-unwind-info.
* ld.texinfo (--ld-generated-unwind-info,
--no-ld-generated-unwind-info): Document.
bfd/
* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Allow no relocations
at all for linker created .eh_frame sections.
(_bfd_elf_discard_section_eh_frame): Handle linker created
.eh_frame sections with no relocations.
* elf64-x86-64.c: Include dwarf2.h.
(elf_x86_64_eh_frame_plt): New variable.
(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
PLT_FDE_LEN_OFFSET): Define.
(struct elf_x86_64_link_hash_table): Add plt_eh_frame field.
(elf_x86_64_create_dynamic_sections): Create and fill in
.eh_frame section for .plt section.
(elf_x86_64_size_dynamic_sections): Write .plt section size
into .eh_frame FDE covering .plt section.
(elf_x86_64_finish_dynamic_sections): Write .plt section
start into .eh_frame FDE covering .plt section.  Call
_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
(elf_backend_plt_alignment): Define to 4.
* elf32-i386.c: Include dwarf2.h.
(elf_i386_eh_frame_plt): New variable.
(PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
PLT_FDE_LEN_OFFSET): Define.
(struct elf_i386_link_hash_table): Add plt_eh_frame field.
(elf_i386_create_dynamic_sections): Create and fill in
.eh_frame section for .plt section.
(elf_i386_size_dynamic_sections): Write .plt section size
into .eh_frame FDE covering .plt section.
(elf_i386_finish_dynamic_sections): Write .plt section
start into .eh_frame FDE covering .plt section.  Call
_bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
(elf_backend_plt_alignment): Define to 4.
ld/testsuite/
* ld-x86-64/x86-64.exp: Link some testcases with
--no-ld-generated-unwind-info.
* ld-x86-64/tlsbin.rd: Add --no-ld-generated-unwind-info to ld
comment.
* ld-x86-64/tlsdesc.dd: Likewise.
* ld-x86-64/tlspic.dd: Likewise.
* ld-x86-64/tlsdesc.sd: Likewise.
* ld-x86-64/tlspic.rd: Likewise.
* ld-x86-64/tlsbindesc.rd: Likewise.
* ld-x86-64/tlsbindesc.sd: Likewise.
* ld-x86-64/tlsbin.td: Likewise.
* ld-x86-64/tlsdesc.pd: Likewise.
* ld-x86-64/tlsdesc.td: Likewise.
* ld-x86-64/tlsbindesc.dd: Likewise.
* ld-x86-64/tlsbin.dd: Likewise.
* ld-x86-64/tlsgdesc.rd: Likewise.
* ld-x86-64/tlspic.sd: Likewise.
* ld-x86-64/tlsbindesc.td: Likewise.
* ld-x86-64/tlspic.td: Likewise.
* ld-x86-64/tlsbin.sd: Likewise.
* ld-x86-64/ilp32-4.d: Likewise.
* ld-x86-64/tlsgdesc.dd: Add --no-ld-generated-unwind-info to ld
comment.  Adjust.
* ld-x86-64/tlsdesc.rd: Likewise.
* ld-x86-64/tlsgd6.dd: Adjust.
* ld-x86-64/tlsgd5.dd: Likewise.
* ld-i386/i386.exp: Link some testcases with
--no-ld-generated-unwind-info.
* ld-i386/tlsbin.rd: Add --no-ld-generated-unwind-info to ld
comment..
* ld-i386/tlsdesc.dd: Likewise.
* ld-i386/tlspic.dd: Likewise.
* ld-i386/tlsdesc.sd: Likewise.
* ld-i386/tlsgdesc.dd: Likewise.
* ld-i386/tlsnopic.sd: Likewise.
* ld-i386/tlspic.rd: Likewise.
* ld-i386/tlsdesc.rd: Likewise.
* ld-i386/tlsbindesc.rd: Likewise.
* ld-i386/tlsbindesc.sd: Likewise.
* ld-i386/tlsbin.td: Likewise.
* ld-i386/tlsdesc.td: Likewise.
* ld-i386/tlsnopic.dd: Likewise.
* ld-i386/tlsbindesc.dd: Likewise.
* ld-i386/tlsbin.dd: Likewise.
* ld-i386/tlsgdesc.rd: Likewise.
* ld-i386/tlspic.sd: Likewise.
* ld-i386/tlsnopic.rd: Likewise.
* ld-i386/tlsbindesc.td: Likewise.
* ld-i386/tlspic.td: Likewise.
* ld-i386/tlsbin.sd: Likewise.

55 files changed:
bfd/ChangeLog
bfd/elf-eh-frame.c
bfd/elf32-i386.c
bfd/elf64-x86-64.c
include/ChangeLog
include/bfdlink.h
ld/ChangeLog
ld/emultempl/elf32.em
ld/ld.texinfo
ld/testsuite/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-i386/tlsbin.dd
ld/testsuite/ld-i386/tlsbin.rd
ld/testsuite/ld-i386/tlsbin.sd
ld/testsuite/ld-i386/tlsbin.td
ld/testsuite/ld-i386/tlsbindesc.dd
ld/testsuite/ld-i386/tlsbindesc.rd
ld/testsuite/ld-i386/tlsbindesc.sd
ld/testsuite/ld-i386/tlsbindesc.td
ld/testsuite/ld-i386/tlsdesc.dd
ld/testsuite/ld-i386/tlsdesc.rd
ld/testsuite/ld-i386/tlsdesc.sd
ld/testsuite/ld-i386/tlsdesc.td
ld/testsuite/ld-i386/tlsgdesc.dd
ld/testsuite/ld-i386/tlsgdesc.rd
ld/testsuite/ld-i386/tlsnopic.dd
ld/testsuite/ld-i386/tlsnopic.rd
ld/testsuite/ld-i386/tlsnopic.sd
ld/testsuite/ld-i386/tlspic.dd
ld/testsuite/ld-i386/tlspic.rd
ld/testsuite/ld-i386/tlspic.sd
ld/testsuite/ld-i386/tlspic.td
ld/testsuite/ld-x86-64/ilp32-4.d
ld/testsuite/ld-x86-64/tlsbin.dd
ld/testsuite/ld-x86-64/tlsbin.rd
ld/testsuite/ld-x86-64/tlsbin.sd
ld/testsuite/ld-x86-64/tlsbin.td
ld/testsuite/ld-x86-64/tlsbindesc.dd
ld/testsuite/ld-x86-64/tlsbindesc.rd
ld/testsuite/ld-x86-64/tlsbindesc.sd
ld/testsuite/ld-x86-64/tlsbindesc.td
ld/testsuite/ld-x86-64/tlsdesc.dd
ld/testsuite/ld-x86-64/tlsdesc.pd
ld/testsuite/ld-x86-64/tlsdesc.rd
ld/testsuite/ld-x86-64/tlsdesc.sd
ld/testsuite/ld-x86-64/tlsdesc.td
ld/testsuite/ld-x86-64/tlsgd5.dd
ld/testsuite/ld-x86-64/tlsgd6.dd
ld/testsuite/ld-x86-64/tlsgdesc.dd
ld/testsuite/ld-x86-64/tlsgdesc.rd
ld/testsuite/ld-x86-64/tlspic.dd
ld/testsuite/ld-x86-64/tlspic.rd
ld/testsuite/ld-x86-64/tlspic.sd
ld/testsuite/ld-x86-64/tlspic.td
ld/testsuite/ld-x86-64/x86-64.exp

index 9536f022aea567f3b8a48d8c11e296b6030be379..327f83b062ace0b417c5ef4df3f29a3a0f47202d 100644 (file)
@@ -1,3 +1,37 @@
+2011-06-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ld/12570
+       * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Allow no relocations
+       at all for linker created .eh_frame sections.
+       (_bfd_elf_discard_section_eh_frame): Handle linker created
+       .eh_frame sections with no relocations.
+       * elf64-x86-64.c: Include dwarf2.h.
+       (elf_x86_64_eh_frame_plt): New variable.
+       (PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
+       PLT_FDE_LEN_OFFSET): Define.
+       (struct elf_x86_64_link_hash_table): Add plt_eh_frame field.
+       (elf_x86_64_create_dynamic_sections): Create and fill in
+       .eh_frame section for .plt section.
+       (elf_x86_64_size_dynamic_sections): Write .plt section size
+       into .eh_frame FDE covering .plt section.
+       (elf_x86_64_finish_dynamic_sections): Write .plt section
+       start into .eh_frame FDE covering .plt section.  Call
+       _bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
+       (elf_backend_plt_alignment): Define to 4.
+       * elf32-i386.c: Include dwarf2.h.
+       (elf_i386_eh_frame_plt): New variable.
+       (PLT_CIE_LENGTH, PLT_FDE_LENGTH, PLT_FDE_START_OFFSET,
+       PLT_FDE_LEN_OFFSET): Define.
+       (struct elf_i386_link_hash_table): Add plt_eh_frame field.
+       (elf_i386_create_dynamic_sections): Create and fill in
+       .eh_frame section for .plt section.
+       (elf_i386_size_dynamic_sections): Write .plt section size
+       into .eh_frame FDE covering .plt section.
+       (elf_i386_finish_dynamic_sections): Write .plt section
+       start into .eh_frame FDE covering .plt section.  Call
+       _bfd_elf_write_section_eh_frame on htab->plt_eh_frame section.
+       (elf_backend_plt_alignment): Define to 4.
+
 2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        * elf64-x86-64.c (elf_backend_post_process_headers): Defined
index 21041a5b408fd0418375017ff7549f27a28b0b40..54142b295266a6f1d750917b1eabc0c969d042ed 100644 (file)
@@ -778,8 +778,6 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
        }
       else
        {
-         asection *rsec;
-
          /* Find the corresponding CIE.  */
          unsigned int cie_offset = this_inf->offset + 4 - hdr_id;
          for (cie = local_cies; cie < local_cies + cie_count; cie++)
@@ -795,17 +793,22 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
            = cie->cie_inf->add_augmentation_size;
 
          ENSURE_NO_RELOCS (buf);
-         REQUIRE (GET_RELOC (buf));
-
-         /* Chain together the FDEs for each section.  */
-         rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
-         /* RSEC will be NULL if FDE was cleared out as it was belonging to
-            a discarded SHT_GROUP.  */
-         if (rsec)
+         if ((sec->flags & SEC_LINKER_CREATED) == 0 || cookie->rels != NULL)
            {
-             REQUIRE (rsec->owner == abfd);
-             this_inf->u.fde.next_for_section = elf_fde_list (rsec);
-             elf_fde_list (rsec) = this_inf;
+             asection *rsec;
+
+             REQUIRE (GET_RELOC (buf));
+
+             /* Chain together the FDEs for each section.  */
+             rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie);
+             /* RSEC will be NULL if FDE was cleared out as it was belonging to
+                a discarded SHT_GROUP.  */
+             if (rsec)
+               {
+                 REQUIRE (rsec->owner == abfd);
+                 this_inf->u.fde.next_for_section = elf_fde_list (rsec);
+                 elf_fde_list (rsec) = this_inf;
+               }
            }
 
          /* Skip the initial location and address range.  */
@@ -1141,6 +1144,9 @@ _bfd_elf_discard_section_eh_frame
   if (sec_info == NULL)
     return FALSE;
 
+  ptr_size = (get_elf_backend_data (sec->owner)
+             ->elf_backend_eh_frame_address_size (sec->owner, sec));
+
   hdr_info = &elf_hash_table (info)->eh_info;
   for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent)
     if (ent->size == 4)
@@ -1149,11 +1155,25 @@ _bfd_elf_discard_section_eh_frame
       ent->removed = sec->map_head.s != NULL;
     else if (!ent->cie)
       {
-       cookie->rel = cookie->rels + ent->reloc_index;
-       /* FIXME: octets_per_byte.  */
-       BFD_ASSERT (cookie->rel < cookie->relend
-                   && cookie->rel->r_offset == ent->offset + 8);
-       if (!(*reloc_symbol_deleted_p) (ent->offset + 8, cookie))
+       bfd_boolean keep;
+       if ((sec->flags & SEC_LINKER_CREATED) != 0 && cookie->rels == NULL)
+         {
+           unsigned int width
+             = get_DW_EH_PE_width (ent->fde_encoding, ptr_size);
+           bfd_vma value
+             = read_value (abfd, sec->contents + ent->offset + 8 + width,
+                           width, get_DW_EH_PE_signed (ent->fde_encoding));
+           keep = value != 0;
+         }
+       else
+         {
+           cookie->rel = cookie->rels + ent->reloc_index;
+           /* FIXME: octets_per_byte.  */
+           BFD_ASSERT (cookie->rel < cookie->relend
+                       && cookie->rel->r_offset == ent->offset + 8);
+           keep = !(*reloc_symbol_deleted_p) (ent->offset + 8, cookie);
+         }
+       if (keep)
          {
            if (info->shared
                && (((ent->fde_encoding & 0x70) == DW_EH_PE_absptr
@@ -1182,8 +1202,6 @@ _bfd_elf_discard_section_eh_frame
       sec_info->cies = NULL;
     }
 
-  ptr_size = (get_elf_backend_data (sec->owner)
-             ->elf_backend_eh_frame_address_size (sec->owner, sec));
   offset = 0;
   for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent)
     if (!ent->removed)
index 05962a07f7fee586ffb2a86e18e34105ae2c676d..581272fa7c1a27d1c26ee601507c928d000c6738 100644 (file)
@@ -29,6 +29,7 @@
 #include "bfd_stdint.h"
 #include "objalloc.h"
 #include "hashtab.h"
+#include "dwarf2.h"
 
 /* 386 uses REL relocations instead of RELA.  */
 #define USE_REL        1
@@ -574,6 +575,45 @@ static const bfd_byte elf_i386_pic_plt_entry[PLT_ENTRY_SIZE] =
   0, 0, 0, 0   /* replaced with offset to start of .plt.  */
 };
 
+/* .eh_frame covering the .plt section.  */
+
+static const bfd_byte elf_i386_eh_frame_plt[] =
+{
+#define PLT_CIE_LENGTH         20
+#define PLT_FDE_LENGTH         36
+#define PLT_FDE_START_OFFSET   4 + PLT_CIE_LENGTH + 8
+#define PLT_FDE_LEN_OFFSET     4 + PLT_CIE_LENGTH + 12
+  PLT_CIE_LENGTH, 0, 0, 0,     /* CIE length */
+  0, 0, 0, 0,                  /* CIE ID */
+  1,                           /* CIE version */
+  'z', 'R', 0,                 /* Augmentation string */
+  1,                           /* Code alignment factor */
+  0x7c,                                /* Data alignment factor */
+  8,                           /* Return address column */
+  1,                           /* Augmentation size */
+  DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */
+  DW_CFA_def_cfa, 4, 4,                /* DW_CFA_def_cfa: r4 (esp) ofs 4 */
+  DW_CFA_offset + 8, 1,                /* DW_CFA_offset: r8 (eip) at cfa-4 */
+  DW_CFA_nop, DW_CFA_nop,
+
+  PLT_FDE_LENGTH, 0, 0, 0,     /* FDE length */
+  PLT_CIE_LENGTH + 8, 0, 0, 0, /* CIE pointer */
+  0, 0, 0, 0,                  /* R_386_PC32 .plt goes here */
+  0, 0, 0, 0,                  /* .plt size goes here */
+  0,                           /* Augmentation size */
+  DW_CFA_def_cfa_offset, 8,    /* DW_CFA_def_cfa_offset: 8 */
+  DW_CFA_advance_loc + 6,      /* DW_CFA_advance_loc: 6 to __PLT__+6 */
+  DW_CFA_def_cfa_offset, 12,   /* DW_CFA_def_cfa_offset: 12 */
+  DW_CFA_advance_loc + 10,     /* DW_CFA_advance_loc: 10 to __PLT__+16 */
+  DW_CFA_def_cfa_expression,   /* DW_CFA_def_cfa_expression */
+  11,                          /* Block length */
+  DW_OP_breg4, 4,              /* DW_OP_breg4 (esp): 4 */
+  DW_OP_breg8, 0,              /* DW_OP_breg8 (eip): 0 */
+  DW_OP_lit15, DW_OP_and, DW_OP_lit11, DW_OP_ge,
+  DW_OP_lit3, DW_OP_shl, DW_OP_plus,
+  DW_CFA_nop, DW_CFA_nop, DW_CFA_nop, DW_CFA_nop
+};
+
 /* On VxWorks, the .rel.plt.unloaded section has absolute relocations
    for the PLTResolve stub and then for each PLT entry.  */
 #define PLTRESOLVE_RELOCS_SHLIB 0
@@ -655,6 +695,7 @@ struct elf_i386_link_hash_table
   /* Short-cuts to get to dynamic linker sections.  */
   asection *sdynbss;
   asection *srelbss;
+  asection *plt_eh_frame;
 
   union
   {
@@ -887,6 +928,25 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
                                               &htab->srelplt2))
     return FALSE;
 
+  if (!info->no_ld_generated_unwind_info
+      && bfd_get_section_by_name (dynobj, ".eh_frame") == NULL
+      && htab->elf.splt != NULL)
+    {
+      flagword flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
+      htab->plt_eh_frame
+       = bfd_make_section_with_flags (dynobj, ".eh_frame",
+                                      flags | SEC_READONLY);
+      if (htab->plt_eh_frame == NULL
+         || !bfd_set_section_alignment (dynobj, htab->plt_eh_frame, 2))
+       return FALSE;
+
+      htab->plt_eh_frame->size = sizeof (elf_i386_eh_frame_plt);
+      htab->plt_eh_frame->contents
+       = bfd_alloc (dynobj, htab->plt_eh_frame->size);
+      memcpy (htab->plt_eh_frame->contents, elf_i386_eh_frame_plt,
+             sizeof (elf_i386_eh_frame_plt));
+    }
+
   return TRUE;
 }
 
@@ -2667,6 +2727,13 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
        return FALSE;
     }
 
+  if (htab->plt_eh_frame != NULL
+      && htab->elf.splt != NULL
+      && htab->elf.splt->size != 0
+      && (htab->elf.splt->flags & SEC_EXCLUDE) == 0)
+    bfd_put_32 (dynobj, htab->elf.splt->size,
+               htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+
   if (htab->elf.dynamic_sections_created)
     {
       /* Add some entries to the .dynamic section.  We fill in the
@@ -4667,6 +4734,33 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
       elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize = 4;
     }
 
+  /* Adjust .eh_frame for .plt section.  */
+  if (htab->plt_eh_frame != NULL)
+    {
+      if (htab->elf.splt != NULL
+         && htab->elf.splt->size != 0
+         && (htab->elf.splt->flags & SEC_EXCLUDE) == 0
+         && htab->elf.splt->output_section != NULL
+         && htab->plt_eh_frame->output_section != NULL)
+       {
+         bfd_vma plt_start = htab->elf.splt->output_section->vma;
+         bfd_vma eh_frame_start = htab->plt_eh_frame->output_section->vma
+                                  + htab->plt_eh_frame->output_offset
+                                  + PLT_FDE_START_OFFSET;
+         bfd_put_signed_32 (dynobj, plt_start - eh_frame_start,
+                            htab->plt_eh_frame->contents
+                            + PLT_FDE_START_OFFSET);
+       }
+      if (htab->plt_eh_frame->sec_info_type
+         == ELF_INFO_TYPE_EH_FRAME)
+       {
+         if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
+                                                htab->plt_eh_frame,
+                                                htab->plt_eh_frame->contents))
+           return FALSE;
+       }
+    }
+
   if (htab->elf.sgot && htab->elf.sgot->size > 0)
     elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4;
 
@@ -4734,6 +4828,7 @@ elf_i386_add_symbol_hook (bfd * abfd,
 #define elf_backend_plt_readonly       1
 #define elf_backend_want_plt_sym       0
 #define elf_backend_got_header_size    12
+#define elf_backend_plt_alignment      4
 
 /* Support RELA for objdump of prelink objects.  */
 #define elf_info_to_howto                    elf_i386_info_to_howto_rel
index a929797296048728569dbaf59f002ae6e73e3353..37349f9fd224d15f51dbc00fd06557be58f56ee3 100644 (file)
@@ -29,6 +29,7 @@
 #include "bfd_stdint.h"
 #include "objalloc.h"
 #include "hashtab.h"
+#include "dwarf2.h"
 
 #include "elf/x86-64.h"
 
@@ -528,6 +529,45 @@ static const bfd_byte elf_x86_64_plt_entry[PLT_ENTRY_SIZE] =
   0, 0, 0, 0   /* replaced with offset to start of .plt0.  */
 };
 
+/* .eh_frame covering the .plt section.  */
+
+static const bfd_byte elf_x86_64_eh_frame_plt[] =
+{
+#define PLT_CIE_LENGTH         20
+#define PLT_FDE_LENGTH         36
+#define PLT_FDE_START_OFFSET   4 + PLT_CIE_LENGTH + 8
+#define PLT_FDE_LEN_OFFSET     4 + PLT_CIE_LENGTH + 12
+  PLT_CIE_LENGTH, 0, 0, 0,     /* CIE length */
+  0, 0, 0, 0,                  /* CIE ID */
+  1,                           /* CIE version */
+  'z', 'R', 0,                 /* Augmentation string */
+  1,                           /* Code alignment factor */
+  0x78,                                /* Data alignment factor */
+  16,                          /* Return address column */
+  1,                           /* Augmentation size */
+  DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding */
+  DW_CFA_def_cfa, 7, 8,                /* DW_CFA_def_cfa: r7 (rsp) ofs 8 */
+  DW_CFA_offset + 16, 1,       /* DW_CFA_offset: r16 (rip) at cfa-8 */
+  DW_CFA_nop, DW_CFA_nop,
+
+  PLT_FDE_LENGTH, 0, 0, 0,     /* FDE length */
+  PLT_CIE_LENGTH + 8, 0, 0, 0, /* CIE pointer */
+  0, 0, 0, 0,                  /* R_X86_64_PC32 .plt goes here */
+  0, 0, 0, 0,                  /* .plt size goes here */
+  0,                           /* Augmentation size */
+  DW_CFA_def_cfa_offset, 16,   /* DW_CFA_def_cfa_offset: 16 */
+  DW_CFA_advance_loc + 6,      /* DW_CFA_advance_loc: 6 to __PLT__+6 */
+  DW_CFA_def_cfa_offset, 24,   /* DW_CFA_def_cfa_offset: 24 */
+  DW_CFA_advance_loc + 10,     /* DW_CFA_advance_loc: 10 to __PLT__+16 */
+  DW_CFA_def_cfa_expression,   /* DW_CFA_def_cfa_expression */
+  11,                          /* Block length */
+  DW_OP_breg7, 8,              /* DW_OP_breg7 (rsp): 8 */
+  DW_OP_breg16, 0,             /* DW_OP_breg16 (rip): 0 */
+  DW_OP_lit15, DW_OP_and, DW_OP_lit11, DW_OP_ge,
+  DW_OP_lit3, DW_OP_shl, DW_OP_plus,
+  DW_CFA_nop, DW_CFA_nop, DW_CFA_nop, DW_CFA_nop
+};
+
 /* x86-64 ELF linker hash entry.  */
 
 struct elf_x86_64_link_hash_entry
@@ -601,6 +641,7 @@ struct elf_x86_64_link_hash_table
   /* Short-cuts to get to dynamic linker sections.  */
   asection *sdynbss;
   asection *srelbss;
+  asection *plt_eh_frame;
 
   union
   {
@@ -847,6 +888,24 @@ elf_x86_64_create_dynamic_sections (bfd *dynobj,
       || (!info->shared && !htab->srelbss))
     abort ();
 
+  if (!info->no_ld_generated_unwind_info
+      && bfd_get_section_by_name (dynobj, ".eh_frame") == NULL
+      && htab->elf.splt != NULL)
+    {
+      flagword flags = get_elf_backend_data (dynobj)->dynamic_sec_flags;
+      htab->plt_eh_frame
+       = bfd_make_section_with_flags (dynobj, ".eh_frame",
+                                      flags | SEC_READONLY);
+      if (htab->plt_eh_frame == NULL
+         || !bfd_set_section_alignment (dynobj, htab->plt_eh_frame, 3))
+       return FALSE;
+
+      htab->plt_eh_frame->size = sizeof (elf_x86_64_eh_frame_plt);
+      htab->plt_eh_frame->contents
+       = bfd_alloc (dynobj, htab->plt_eh_frame->size);
+      memcpy (htab->plt_eh_frame->contents, elf_x86_64_eh_frame_plt,
+             sizeof (elf_x86_64_eh_frame_plt));
+    }
   return TRUE;
 }
 
@@ -2721,6 +2780,13 @@ elf_x86_64_size_dynamic_sections (bfd *output_bfd,
        return FALSE;
     }
 
+  if (htab->plt_eh_frame != NULL
+      && htab->elf.splt != NULL
+      && htab->elf.splt->size != 0
+      && (htab->elf.splt->flags & SEC_EXCLUDE) == 0)
+    bfd_put_32 (dynobj, htab->elf.splt->size,
+               htab->plt_eh_frame->contents + PLT_FDE_LEN_OFFSET);
+
   if (htab->elf.dynamic_sections_created)
     {
       /* Add some entries to the .dynamic section.  We fill in the
@@ -4521,6 +4587,33 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
        GOT_ENTRY_SIZE;
     }
 
+  /* Adjust .eh_frame for .plt section.  */
+  if (htab->plt_eh_frame != NULL)
+    {
+      if (htab->elf.splt != NULL
+         && htab->elf.splt->size != 0
+         && (htab->elf.splt->flags & SEC_EXCLUDE) == 0
+         && htab->elf.splt->output_section != NULL
+         && htab->plt_eh_frame->output_section != NULL)
+       {
+         bfd_vma plt_start = htab->elf.splt->output_section->vma;
+         bfd_vma eh_frame_start = htab->plt_eh_frame->output_section->vma
+                                  + htab->plt_eh_frame->output_offset
+                                  + PLT_FDE_START_OFFSET;
+         bfd_put_signed_32 (dynobj, plt_start - eh_frame_start,
+                            htab->plt_eh_frame->contents
+                            + PLT_FDE_START_OFFSET);
+       }
+      if (htab->plt_eh_frame->sec_info_type
+         == ELF_INFO_TYPE_EH_FRAME)
+       {
+         if (! _bfd_elf_write_section_eh_frame (output_bfd, info,
+                                                htab->plt_eh_frame,
+                                                htab->plt_eh_frame->contents))
+           return FALSE;
+       }
+    }
+
   if (htab->elf.sgot && htab->elf.sgot->size > 0)
     elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize
       = GOT_ENTRY_SIZE;
@@ -4787,6 +4880,7 @@ static const struct bfd_elf_special_section
 #define elf_backend_want_plt_sym           0
 #define elf_backend_got_header_size        (GOT_ENTRY_SIZE*3)
 #define elf_backend_rela_normal                    1
+#define elf_backend_plt_alignment           4
 
 #define elf_info_to_howto                  elf_x86_64_info_to_howto
 
index 42546be664b29ae085364fe3338c11bbe47ab6ae..6ff56e6b065f3371dc83cc7a7df5e410e6023ceb 100644 (file)
@@ -1,3 +1,9 @@
+2011-06-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ld/12570
+       * bfdlink.h (struct bfd_link_info): Add no_ld_generated_unwind_info
+       option.
+
 2011-06-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * demangle.h (DMGL_RET_POSTFIX): Extend the comment.
index bb62fbe34d532150e37934280da14a62603375ea..b1c751a84051b591b87fa3601454bb35916ce987 100644 (file)
@@ -353,6 +353,10 @@ struct bfd_link_info
      --dynamic-list command line options.  */
   unsigned int dynamic: 1;
 
+  /* FALSE if .eh_frame unwind info should be generated for PLT and other
+     linker created sections, TRUE if it should be omitted.  */
+  unsigned int no_ld_generated_unwind_info: 1;
+
   /* Non-NULL if .note.gnu.build-id section should be created.  */
   char *emit_note_gnu_build_id;
 
index 099104da019015fdace0cdbd677f0d397b4843d9..6748fa3bb16ab27d193ef2361aac7449039c5942 100644 (file)
@@ -1,3 +1,13 @@
+2011-06-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ld/12570
+       * emultempl/elf32.em (OPTION_LD_GENERATED_UNWIND_INFO,
+       OPTION_NO_LD_GENERATED_UNWIND_INFO): Define.
+       (gld${EMULATION_NAME}_handle_option): Handle
+       --ld-generated-unwind-info and --no-ld-generated-unwind-info.
+       * ld.texinfo (--ld-generated-unwind-info,
+       --no-ld-generated-unwind-info): Document.
+
 2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure.tgt: Support x32.
index 42674bd4f61159ca75e70f2da2875f5f5d554243..2453e58a59e1126a5f974999405667e67387c5b8 100644 (file)
@@ -2124,6 +2124,8 @@ fragment <<EOF
 #define OPTION_HASH_STYLE              (OPTION_EXCLUDE_LIBS + 1)
 #define OPTION_BUILD_ID                        (OPTION_HASH_STYLE + 1)
 #define OPTION_AUDIT                   (OPTION_BUILD_ID + 1)
+#define OPTION_LD_GENERATED_UNWIND_INFO        (OPTION_AUDIT + 1)
+#define OPTION_NO_LD_GENERATED_UNWIND_INFO (OPTION_LD_GENERATED_UNWIND_INFO + 1)
 
 static void
 gld${EMULATION_NAME}_add_options
@@ -2144,6 +2146,10 @@ fragment <<EOF
     {"eh-frame-hdr", no_argument, NULL, OPTION_EH_FRAME_HDR},
     {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
     {"hash-style", required_argument, NULL, OPTION_HASH_STYLE},
+    {"ld-generated-unwind-info", no_argument, NULL,
+      OPTION_LD_GENERATED_UNWIND_INFO},
+    {"no-ld-generated-unwind-info", no_argument, NULL,
+      OPTION_NO_LD_GENERATED_UNWIND_INFO},
     {"Bgroup", no_argument, NULL, OPTION_GROUP},
 EOF
 fi
@@ -2209,6 +2215,14 @@ fragment <<EOF
       link_info.eh_frame_hdr = TRUE;
       break;
 
+    case OPTION_LD_GENERATED_UNWIND_INFO:
+      link_info.no_ld_generated_unwind_info = FALSE;
+      break;
+
+    case OPTION_NO_LD_GENERATED_UNWIND_INFO:
+      link_info.no_ld_generated_unwind_info = TRUE;
+      break;
+
     case OPTION_GROUP:
       link_info.flags_1 |= (bfd_vma) DF_1_GROUP;
       /* Groups must be self-contained.  */
index 0b583960195657279da6f6e0957c9fcccc9eebac..5a8e190c247fee77a9378dceea415b75330bca52 100644 (file)
@@ -2069,6 +2069,12 @@ call before the linker has a chance to wrap it to @code{malloc}.
 Request creation of @code{.eh_frame_hdr} section and ELF
 @code{PT_GNU_EH_FRAME} segment header.
 
+@kindex --ld-generated-unwind-info
+@item --no-ld-generated-unwind-info
+Request creation of @code{.eh_frame} unwind info for linker
+generated code sections like PLT.  This option is on by default
+if linker generated unwind info is supported.
+
 @kindex --enable-new-dtags
 @kindex --disable-new-dtags
 @item --enable-new-dtags
index 4db226f5215fd1442732bbaeed093bf252c79167..39b06b7c6a6566f5a38bcd5fb45f8b1042976ce7 100644 (file)
@@ -1,3 +1,57 @@
+2011-06-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR ld/12570
+       * ld-x86-64/x86-64.exp: Link some testcases with
+       --no-ld-generated-unwind-info.
+       * ld-x86-64/tlsbin.rd: Add --no-ld-generated-unwind-info to ld
+       comment.
+       * ld-x86-64/tlsdesc.dd: Likewise.
+       * ld-x86-64/tlspic.dd: Likewise.
+       * ld-x86-64/tlsdesc.sd: Likewise.
+       * ld-x86-64/tlspic.rd: Likewise.
+       * ld-x86-64/tlsbindesc.rd: Likewise.
+       * ld-x86-64/tlsbindesc.sd: Likewise.
+       * ld-x86-64/tlsbin.td: Likewise.
+       * ld-x86-64/tlsdesc.pd: Likewise.
+       * ld-x86-64/tlsdesc.td: Likewise.
+       * ld-x86-64/tlsbindesc.dd: Likewise.
+       * ld-x86-64/tlsbin.dd: Likewise.
+       * ld-x86-64/tlsgdesc.rd: Likewise.
+       * ld-x86-64/tlspic.sd: Likewise.
+       * ld-x86-64/tlsbindesc.td: Likewise.
+       * ld-x86-64/tlspic.td: Likewise.
+       * ld-x86-64/tlsbin.sd: Likewise.
+       * ld-x86-64/ilp32-4.d: Likewise.
+       * ld-x86-64/tlsgdesc.dd: Add --no-ld-generated-unwind-info to ld
+       comment.  Adjust.
+       * ld-x86-64/tlsdesc.rd: Likewise.
+       * ld-x86-64/tlsgd6.dd: Adjust.
+       * ld-x86-64/tlsgd5.dd: Likewise.
+       * ld-i386/i386.exp: Link some testcases with
+       --no-ld-generated-unwind-info.
+       * ld-i386/tlsbin.rd: Add --no-ld-generated-unwind-info to ld
+       comment..
+       * ld-i386/tlsdesc.dd: Likewise.
+       * ld-i386/tlspic.dd: Likewise.
+       * ld-i386/tlsdesc.sd: Likewise.
+       * ld-i386/tlsgdesc.dd: Likewise.
+       * ld-i386/tlsnopic.sd: Likewise.
+       * ld-i386/tlspic.rd: Likewise.
+       * ld-i386/tlsdesc.rd: Likewise.
+       * ld-i386/tlsbindesc.rd: Likewise.
+       * ld-i386/tlsbindesc.sd: Likewise.
+       * ld-i386/tlsbin.td: Likewise.
+       * ld-i386/tlsdesc.td: Likewise.
+       * ld-i386/tlsnopic.dd: Likewise.
+       * ld-i386/tlsbindesc.dd: Likewise.
+       * ld-i386/tlsbin.dd: Likewise.
+       * ld-i386/tlsgdesc.rd: Likewise.
+       * ld-i386/tlspic.sd: Likewise.
+       * ld-i386/tlsnopic.rd: Likewise.
+       * ld-i386/tlsbindesc.td: Likewise.
+       * ld-i386/tlspic.td: Likewise.
+       * ld-i386/tlsbin.sd: Likewise.
+
 2011-06-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        * ld-elf/eh1.d: Skip x32.
index 3bce2d3f6ff160efaaacafb4690e35a52f1b32e2..ae798c04aca76eea42c65f35f73f4a2dc2b22922 100644 (file)
@@ -118,12 +118,14 @@ if { !([istarget "i?86-*-elf*"]
 # readelf: Apply readelf options on result.  Compare with regex (last arg).
 
 set i386tests {
-    {"TLS -fpic -shared transitions" "-shared -melf_i386"
+    {"TLS -fpic -shared transitions"
+     "-shared -melf_i386 --no-ld-generated-unwind-info"
      "--32" {tlspic1.s tlspic2.s}
      {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
       {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
       "libtlspic.so"}
-    {"TLS descriptor -fpic -shared transitions" "-shared -melf_i386"
+    {"TLS descriptor -fpic -shared transitions"
+     "-shared -melf_i386 --no-ld-generated-unwind-info"
      "--32" {tlsdesc.s tlspic2.s}
      {{readelf -Ssrl tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
       {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}}
@@ -131,21 +133,24 @@ set i386tests {
     {"Helper shared library" "-shared -melf_i386"
      "--32" {tlslib.s} {} "libtlslib.so"}
     {"TLS -fpic and -fno-pic exec transitions"
-     "-melf_i386 tmpdir/libtlslib.so" "--32" {tlsbinpic.s tlsbin.s}
+     "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
+     "--32" {tlsbinpic.s tlsbin.s}
      {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
       {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
       "tlsbin"}
     {"TLS descriptor -fpic and -fno-pic exec transitions"
-     "-melf_i386 tmpdir/libtlslib.so" "--32" {tlsbindesc.s tlsbin.s}
+     "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
+     "--32" {tlsbindesc.s tlsbin.s}
      {{readelf -Ssrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
       {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
       "tlsbindesc"}
-    {"TLS -fno-pic -shared" "-shared -melf_i386"
+    {"TLS -fno-pic -shared" "-shared -melf_i386 --no-ld-generated-unwind-info"
      "--32" {tlsnopic1.s tlsnopic2.s}
      {{readelf -Ssrl tlsnopic.rd} {objdump -drj.text tlsnopic.dd}
       {objdump -sj.got tlsnopic.sd}} "libtlsnopic.so"}
     {"TLS with global dynamic and descriptors"
-       "-shared -melf_i386" "--32" {tlsgdesc.s}
+     "-shared -melf_i386 --no-ld-generated-unwind-info"
+     "--32" {tlsgdesc.s}
      {{readelf -Ssrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
       "libtlsgdesc.so"}
     {"TLS in debug sections" "-melf_i386"
index 9cf14a5379b4903fd09c8d7b3185c2ab5162c727..6f6c0e4114dec858099654d741ce3d8c71abb73c 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index 84cec7858d23ca10355b6d1d116beee9c84ab006..5579334614e8a8b5520f1eed5583d6a7658f5454 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index 2fa7a8970b667341fb87b20cebbb16abd3c395ae..99dc4c57a813492cc4389b4cc1c7ff325ebfd81f 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: i?86-*-*
 
index bb29455e5dee3882ad8a00fe28af2bb1cdd16393..a1ed433d272e2d283f608d1afb12253469a9ccb0 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: i?86-*-*
 
index f77d1c8d5fd386ebe0854d142e0e595a8ef94e01..db547644f2683d3a9e40897c774fe030be813e77 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index c2cea19959c75dda0d38cd246c64e834dbd51c84..a334e5617bfe4e2348038bd10b4f85960f3f60e3 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index a87f5da402e9861ed0f7835d8c1b761267f8f59c..7d56466c7ba3387afb790f822f23bc50661290da 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: i?86-*-*
 
index 726df3edbe391a72c8b4e3685fed6e010941d224..64859ddfae11a67273adb64251b685fdd6c31f51 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --32
-#ld: -melf_i386 tmpdir/libtlslib.so
+#ld: -melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: i?86-*-*
 
index bca00901b97ee8363c012d79f54a35c6a2b5238e..85db8ddb4220585730bd190b78156eb3f6531d41 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index 42edd44a586f18bc809de10bb236054fb32cc4e0..c7c41c6b1f5d2c52b548d18e382000d6aa4b854b 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index 656c40971461e8e4a612ba736e4551f321edfbb3..ad3d1e3679c3b6fa143d9c5adc7eeb8935c3e25a 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -s -j.got -j.got.plt
 #target: i?86-*-*
 
index f3612b32a79553089ce7baf9c540adefaf6ac875..12cc43ca0192fe99dad39d8fae7c27d9ece143d1 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: i?86-*-*
 
index 25659de2833945847a6b658c0fb959635447450c..92062cef9325dbb3f4adb559b545f8f58774a296 100644 (file)
@@ -1,6 +1,6 @@
 #source: tlsgdesc.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index 3a224a24066a67aa3189d8de926067850aa9a567..fa0eeb98354128fa4972b51f6b65853af7ee1f82 100644 (file)
@@ -1,6 +1,6 @@
 #source: tlsgdesc.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index a0a8853f2cef00966d54c935dbc7828e1303994f..995cdaa1b9ed37b3e10624b6b0aa9f029f1c765d 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsnopic1.s
 #source: tlsnopic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index 2590a9ff4a99cded5934f233f6fab475ed390e9b..2396fc5801ef51bd0a6bba34bcbfc5fc83f2b01d 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsnopic1.s
 #source: tlsnopic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index fdfaacf2e2d96990cf030e5369c163f12c0d7683..925c5d5d857d7d6ed61ff393db441439ca500947 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsnopic1.s
 #source: tlsnopic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: i?86-*-*
 
index dd436d2f8d4aa587a603afe6aa1399cf26a1a617..b0c046d9ef1e32bdc2e2745fd991aae1c4736b8f 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: i?86-*-*
 
index 46b8ed55c6173999a3d569dbcc5f1735044f2759..7fe042ecc74a9a4af60a5e89224d5da636eec6f0 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #readelf: -Ssrl
 #target: i?86-*-*
 
index f9c962764c1da804e2f5163cc316052feee87616..15b3b9316e4677bfae3571e40e32f584d33e77fb 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: i?86-*-*
 
index 1291584da46c0a129e58beb8a47fe5d5ebae2f3d..a96d6f617e4bdda4866b096b9306a9a184085310 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --32
-#ld: -shared -melf_i386
+#ld: -shared -melf_i386 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: i?86-*-*
 
index e8690b3456966d12997516c1307f0ff22a5276d5..84dc7b250e5a0a686a832d12e64ff791a020cfc8 100644 (file)
@@ -1,6 +1,6 @@
 #source: start.s
 #as: --x32
-#ld: -m elf32_x86_64 -shared
+#ld: -m elf32_x86_64 -shared --no-ld-generated-unwind-info
 #readelf: -d -S --wide
 
 There are 10 section headers, starting at offset 0x22c:
index b87f34a4953104f3c011ce9e960a5b4fdff7cbd8..5bb59791e2ec2f5813f7bcc89dd8e59738b91d7c 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: x86_64-*-*
 
index 936f3706beb2fd0b10a12d20d5fc47d2d05d7ab4..9bfa3ccfc0af5f56e42b9f1f257e19fb3052ecd0 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #readelf: -WSsrl
 #target: x86_64-*-*
 
index 050e59553e29acb877a0f2b97845392f2778b02f..7fa7904a4caf05631995708761e6a588f0326792 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: x86_64-*-*
 
index 76736dbe8e1f5bcdd204620aa052ab4942ecd50c..6f87a19f57f1707f96b2fc2dbdc38900ef51744c 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbinpic.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: x86_64-*-*
 
index 5157c81fe8c5d7cd235f2d01441a584b48fd36cc..b1cfacba83d7ff0695912cdd6a4690ac987357d9 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: x86_64-*-*
 
index 5f25090eb282aa62c825acd34f9d780a866316d1..3527495c950136e74de51f7fe2bb2bc2721d1eb3 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #readelf: -WSsrl
 #target: x86_64-*-*
 
index 37fa54477e13e69db7232d5343d07e914eac3d93..dbea32d44bc7cb5a5a644dd18e5ea1859f67f545 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: x86_64-*-*
 
index 7f2d5720e3499e8494ee49ff70a0d0bf873da8ce..1dc6c28abba8c6cc7ad5ec0a412946ccaeeb1cc2 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsbindesc.s
 #source: tlsbin.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: x86_64-*-*
 
index 9b0ae6109157bb5a0697f8bd31a6a1eaab02dc83..2507e422942c48d960516d33284da5b52f0579a1 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: x86_64-*-*
 
index bf3bc2f7be8bc5ec3b45c1831001e30c4bb5fbb6..2176576b220201d5e7b876163e65ea74d60abd54 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.plt
 #target: x86_64-*-*
 
index 662b63930417f131b2d9c0ce93156dfd39256516..df8d46695a0d4ab8fa1d24b1457a4f39ea7075b3 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #readelf: -WSsrld
 #target: x86_64-*-*
 
@@ -15,7 +15,7 @@ Section Headers:
  +\[[ 0-9]+\] .dynstr +.*
  +\[[ 0-9]+\] .rela.dyn +.*
  +\[[ 0-9]+\] .rela.plt +.*
- +\[[ 0-9]+\] .plt +PROGBITS +0+450 0+450 0+20 10 +AX +0 +0 +4
+ +\[[ 0-9]+\] .plt +PROGBITS +0+450 0+450 0+20 10 +AX +0 +0 +(4|16)
  +\[[ 0-9]+\] .text +PROGBITS +0+1000 0+1000 0+154 00 +AX +0 +0 4096
  +\[[ 0-9]+\] .tdata +PROGBITS +0+201154 0+1154 0+60 00 WAT +0 +0 +1
  +\[[ 0-9]+\] .tbss +NOBITS +0+2011b4 0+11b4 0+20 00 WAT +0 +0 +1
index 7eb474a9d7926903b67830cb19748103ea838cb0..89e2a39b647dfd731440be5af56f7a59254f3cb7 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -s -j.got -j.got.plt
 #target: x86_64-*-*
 
index 6b8098c80f552e343bb64f9db281cd299250d670..479cb84ea5a89599589ece0b163ac2d840338b8c 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlsdesc.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: x86_64-*-*
 
index 7ca953a8f9e8d5e926a1ae59d41dc90f8f58b211..ad9cd6e6d6bf1512587b582a81483e0ff26ea0eb 100644 (file)
@@ -10,5 +10,5 @@ Disassembly of section .text:
 
 [a-f0-9]+ <_start>:
 [      ]*[a-f0-9]+:    64 48 8b 04 25 00 00 00 00      mov    %fs:0x0,%rax
-[      ]*[a-f0-9]+:    48 03 05 00 01 20 00    add    0x200100\(%rip\),%rax        # 600368 <_DYNAMIC\+0x100>
+[      ]*[a-f0-9]+:    48 03 05 40 01 20 00    add    0x200140\(%rip\),%rax        # 6003a8 <_DYNAMIC\+0x100>
 #pass
index e1d8238bc61bd5e4a31c0bbcd3b33a7840b01420..8bdb468e957cfe0cd0ff5770ddda1107320aaf88 100644 (file)
@@ -10,5 +10,5 @@ Disassembly of section .text:
 
 [a-f0-9]+ <_start>:
 [      ]*[a-f0-9]+:    64 8b 04 25 00 00 00 00         mov    %fs:0x0,%eax
-[      ]*[a-f0-9]+:    48 03 05 81 00 20 00    add    0x200081\(%rip\),%rax        # 60022c <_DYNAMIC\+0x80>
+[      ]*[a-f0-9]+:    48 03 05 c5 00 20 00    add    0x2000c5\(%rip\),%rax        # 600270 <_DYNAMIC\+0x80>
 #pass
index 75e8da4df5f26e078386fa99e482fbb69a87d100..fa467a5ff326d1dfd7d54ac18eccc35ac8594bb1 100644 (file)
@@ -1,6 +1,6 @@
 #source: tlsgdesc.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: x86_64-*-*
 
@@ -20,7 +20,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   00 00 *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 03 0d 5e 02 20 00[   ]+add    0x20025e\(%rip\),%rcx +# 200660 <.*>
+ +[0-9a-f]+:   48 03 0d 5e 02 20 00[   ]+add    0x20025e\(%rip\),%rcx +# 200668 <.*>
 #                              -> R_X86_64_TPOFF64     sG3
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
@@ -31,14 +31,14 @@ Disassembly of section .text:
  +[0-9a-f]+:   00 00 *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 03 0d 68 02 20 00[   ]+add    0x200268\(%rip\),%rcx +# 200680 <.*>
+ +[0-9a-f]+:   48 03 0d 68 02 20 00[   ]+add    0x200268\(%rip\),%rcx +# 200688 <.*>
 #                              -> R_X86_64_TPOFF64     sG4
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
 # GD, gd first
- +[0-9a-f]+:   66 48 8d 3d 6c 02 20[   ]+data32 lea 0x20026c\(%rip\),%rdi +# 200690 <.*>
+ +[0-9a-f]+:   66 48 8d 3d 6c 02 20[   ]+data32 lea 0x20026c\(%rip\),%rdi +# 200698 <.*>
  +[0-9a-f]+:   00 *
 #                              -> R_X86_64_DTPMOD64    sG1
  +[0-9a-f]+:   66 66 48 e8 9c ff ff[   ]+data32 data32 callq [0-9a-f]+ <.*>
@@ -48,7 +48,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 8d 05 a1 02 20 00[   ]+lea    0x2002a1\(%rip\),%rax +# 2006d8 <.*>
+ +[0-9a-f]+:   48 8d 05 a1 02 20 00[   ]+lea    0x2002a1\(%rip\),%rax +# 2006e0 <.*>
 #                              -> R_X86_64_TLSDESC     sG1
  +[0-9a-f]+:   ff 10[  ]+callq  \*\(%rax\)
  +[0-9a-f]+:   90[     ]+nop *
@@ -56,14 +56,14 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
 # GD, desc first
- +[0-9a-f]+:   48 8d 05 84 02 20 00[   ]+lea    0x200284\(%rip\),%rax +# 2006c8 <.*>
+ +[0-9a-f]+:   48 8d 05 84 02 20 00[   ]+lea    0x200284\(%rip\),%rax +# 2006d0 <.*>
 #                              -> R_X86_64_TLSDESC     sG2
  +[0-9a-f]+:   ff 10[  ]+callq  \*\(%rax\)
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   66 48 8d 3d 1e 02 20[   ]+data32 lea 0x20021e\(%rip\),%rdi +# 200670 <.*>
+ +[0-9a-f]+:   66 48 8d 3d 1e 02 20[   ]+data32 lea 0x20021e\(%rip\),%rdi +# 200678 <.*>
  +[0-9a-f]+:   00 *
 #                              -> R_X86_64_DTPMOD64    sG2
  +[0-9a-f]+:   66 66 48 e8 6e ff ff[   ]+data32 data32 callq [0-9a-f]+ <.*>
@@ -76,13 +76,13 @@ Disassembly of section .text:
 # GD -> IE, gd first, after IE use
  +[0-9a-f]+:   64 48 8b 04 25 00 00[   ]+mov    %fs:0x0,%rax
  +[0-9a-f]+:   00 00 *
- +[0-9a-f]+:   48 03 05 f2 01 20 00[   ]+add    0x2001f2\(%rip\),%rax +# 200660 <.*>
+ +[0-9a-f]+:   48 03 05 f2 01 20 00[   ]+add    0x2001f2\(%rip\),%rax +# 200668 <.*>
 #                              -> R_X86_64_TPOFF64     sG3
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 8b 05 e7 01 20 00[   ]+mov    0x2001e7\(%rip\),%rax +# 200660 <.*>
+ +[0-9a-f]+:   48 8b 05 e7 01 20 00[   ]+mov    0x2001e7\(%rip\),%rax +# 200668 <.*>
 #                              -> R_X86_64_TPOFF64     sG3
  +[0-9a-f]+:   66 90[  ]+xchg   %ax,%ax
  +[0-9a-f]+:   90[     ]+nop *
@@ -90,7 +90,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
 # GD -> IE, desc first, after IE use
- +[0-9a-f]+:   48 8b 05 fa 01 20 00[   ]+mov    0x2001fa\(%rip\),%rax +# 200680 <.*>
+ +[0-9a-f]+:   48 8b 05 fa 01 20 00[   ]+mov    0x2001fa\(%rip\),%rax +# 200688 <.*>
 #                              -> R_X86_64_TPOFF64     sG4
  +[0-9a-f]+:   66 90[  ]+xchg   %ax,%ax
  +[0-9a-f]+:   90[     ]+nop *
@@ -99,7 +99,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   64 48 8b 04 25 00 00[   ]+mov    %fs:0x0,%rax
  +[0-9a-f]+:   00 00 *
- +[0-9a-f]+:   48 03 05 e4 01 20 00[   ]+add    0x2001e4\(%rip\),%rax +# 200680 <.*>
+ +[0-9a-f]+:   48 03 05 e4 01 20 00[   ]+add    0x2001e4\(%rip\),%rax +# 200688 <.*>
 #                              -> R_X86_64_TPOFF64     sG4
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
@@ -108,13 +108,13 @@ Disassembly of section .text:
 # GD -> IE, gd first, before IE use
  +[0-9a-f]+:   64 48 8b 04 25 00 00[   ]+mov    %fs:0x0,%rax
  +[0-9a-f]+:   00 00 *
- +[0-9a-f]+:   48 03 05 b8 01 20 00[   ]+add    0x2001b8\(%rip\),%rax +# 200668 <.*>
+ +[0-9a-f]+:   48 03 05 b8 01 20 00[   ]+add    0x2001b8\(%rip\),%rax +# 200670 <.*>
 #                              -> R_X86_64_TPOFF64     sG5
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 8b 05 ad 01 20 00[   ]+mov    0x2001ad\(%rip\),%rax +# 200668 <.*>
+ +[0-9a-f]+:   48 8b 05 ad 01 20 00[   ]+mov    0x2001ad\(%rip\),%rax +# 200670 <.*>
 #                              -> R_X86_64_TPOFF64     sG5
  +[0-9a-f]+:   66 90[  ]+xchg   %ax,%ax
  +[0-9a-f]+:   90[     ]+nop *
@@ -122,7 +122,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
 # GD -> IE, desc first, before IE use
- +[0-9a-f]+:   48 8b 05 c0 01 20 00[   ]+mov    0x2001c0\(%rip\),%rax +# 200688 <.*>
+ +[0-9a-f]+:   48 8b 05 c0 01 20 00[   ]+mov    0x2001c0\(%rip\),%rax +# 200690 <.*>
 #                              -> R_X86_64_TPOFF64     sG6
  +[0-9a-f]+:   66 90[  ]+xchg   %ax,%ax
  +[0-9a-f]+:   90[     ]+nop *
@@ -131,7 +131,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   64 48 8b 04 25 00 00[   ]+mov    %fs:0x0,%rax
  +[0-9a-f]+:   00 00 *
- +[0-9a-f]+:   48 03 05 aa 01 20 00[   ]+add    0x2001aa\(%rip\),%rax +# 200688 <.*>
+ +[0-9a-f]+:   48 03 05 aa 01 20 00[   ]+add    0x2001aa\(%rip\),%rax +# 200690 <.*>
 #                              -> R_X86_64_TPOFF64     sG6
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
@@ -142,7 +142,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   00 00 *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 03 0d 74 01 20 00[   ]+add    0x200174\(%rip\),%rcx +# 200668 <.*>
+ +[0-9a-f]+:   48 03 0d 74 01 20 00[   ]+add    0x200174\(%rip\),%rcx +# 200670 <.*>
 #                              -> R_X86_64_TPOFF64     sG5
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
@@ -153,7 +153,7 @@ Disassembly of section .text:
  +[0-9a-f]+:   00 00 *
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
- +[0-9a-f]+:   48 03 0d 7e 01 20 00[   ]+add    0x20017e\(%rip\),%rcx +# 200688 <.*>
+ +[0-9a-f]+:   48 03 0d 7e 01 20 00[   ]+add    0x20017e\(%rip\),%rcx +# 200690 <.*>
 #                              -> R_X86_64_TPOFF64     sG6
  +[0-9a-f]+:   90[     ]+nop *
  +[0-9a-f]+:   90[     ]+nop *
index 61d2fa84f384267b29a2d91404a4f8a1b0d1e438..1e246930ee9bfe94b12c660f237e02109351320d 100644 (file)
@@ -1,6 +1,6 @@
 #source: tlsgdesc.s
 #as: --64
-#ld: -shared -melf64_x86_64
+#ld: -shared -melf64_x86_64 --no-ld-generated-unwind-info
 #readelf: -WSsrl
 #target: x86_64-*-*
 
index e1b64fc14dd5b8ae6b3ee5f0f843beb2785deed6..6f55456d82976a17c434eff661e700d336ac25c1 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -drj.text
 #target: x86_64-*-*
 
index 798703e5cd224152c2f707d702fe3eeeb90c52a8..177f2060105dfc47389b57eb76d64e2677fc0cb1 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #readelf: -WSsrl
 #target: x86_64-*-*
 
index 666c7749c30932cd2321dc76002fd1a8939e18c7..36c1b528ca75be49acac9b4032c3c1300e68f2b3 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.got
 #target: x86_64-*-*
 
index 67eb4f2a2742683d0af7e57548ce922d903c4390..36a7f8e4228861485d842c376fa08b80bb70858d 100644 (file)
@@ -1,7 +1,7 @@
 #source: tlspic1.s
 #source: tlspic2.s
 #as: --64
-#ld: -shared -melf_x86_64
+#ld: -shared -melf_x86_64 --no-ld-generated-unwind-info
 #objdump: -sj.tdata
 #target: x86_64-*-*
 
index bd1991a4762d0c0f981b93aeb126c795262c6aac..58e4bc014ec88a57a762884ec78baad8d7d2a585 100644 (file)
@@ -38,12 +38,14 @@ if { !([istarget "x86_64-*-elf*"]
 # readelf: Apply readelf options on result.  Compare with regex (last arg).
 
 set x86_64tests {
-    {"TLS -fpic -shared transitions" "-shared -melf_x86_64"
+    {"TLS -fpic -shared transitions"
+     "-shared -melf_x86_64 --no-ld-generated-unwind-info"
      "--64" {tlspic1.s tlspic2.s}
      {{readelf -WSsrl tlspic.rd} {objdump -drj.text tlspic.dd}
       {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
       "libtlspic.so"}
-    {"TLS descriptor -fpic -shared transitions" "-shared -melf_x86_64"
+    {"TLS descriptor -fpic -shared transitions"
+     "-shared -melf_x86_64 --no-ld-generated-unwind-info"
      "--64" {tlsdesc.s tlspic2.s}
      {{readelf -WSsrld tlsdesc.rd} {objdump -drj.text tlsdesc.dd}
       {objdump "-s -j.got -j.got.plt" tlsdesc.sd} {objdump -sj.tdata tlsdesc.td}
@@ -51,17 +53,20 @@ set x86_64tests {
     {"Helper shared library" "-shared -melf_x86_64"
      "--64" {tlslib.s} {} "libtlslib.so"}
     {"TLS -fpic and -fno-pic exec transitions"
-     "-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbinpic.s tlsbin.s}
+     "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
+     "--64" {tlsbinpic.s tlsbin.s}
      {{readelf -WSsrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
       {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
       "tlsbin"}
     {"TLS descriptor -fpic and -fno-pic exec transitions"
-     "-melf_x86_64 tmpdir/libtlslib.so" "--64" {tlsbindesc.s tlsbin.s}
+     "-melf_x86_64 tmpdir/libtlslib.so --no-ld-generated-unwind-info"
+     "--64" {tlsbindesc.s tlsbin.s}
      {{readelf -WSsrl tlsbindesc.rd} {objdump -drj.text tlsbindesc.dd}
       {objdump -sj.got tlsbindesc.sd} {objdump -sj.tdata tlsbindesc.td}}
       "tlsbindesc"}
     {"TLS with global dynamic and descriptors"
-       "-shared -melf_x86_64" "--64" {tlsgdesc.s}
+     "-shared -melf_x86_64 --no-ld-generated-unwind-info"
+     "--64" {tlsgdesc.s}
      {{readelf -WSsrl tlsgdesc.rd} {objdump -drj.text tlsgdesc.dd}}
       "libtlsgdesc.so"}
     {"TLS in debug sections" "-melf_x86_64"