diff options
-rw-r--r-- | bfd/ChangeLog | 28 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 163 | ||||
-rw-r--r-- | ld/ChangeLog | 13 | ||||
-rw-r--r-- | ld/emulparams/elf32ppc.sh | 1 | ||||
-rw-r--r-- | ld/emulparams/elf64ppc.sh | 1 | ||||
-rw-r--r-- | ld/emultempl/ppc32elf.em | 13 | ||||
-rw-r--r-- | ld/emultempl/ppc64elf.em | 10 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/powerpc.exp | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-powerpc/relbrlt.d | 2 |
10 files changed, 230 insertions, 31 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5adc046..c92d664 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,21 @@ +2011-07-26 Alan Modra <amodra@gmail.com> + + * elf32-ppc.c: Include dwarf2.h. + (struct ppc_elf_link_hash_table): Add glink_eh_frame. + (ppc_elf_create_glink): Create .eh_frame section. + (glink_eh_frame_cie): New array. + (ppc_elf_size_dynamic_sections): Size glink_eh_frame. + (ppc_elf_finish_dynamic_sections): Write glink_eh_frame. + * elf64-ppc.c: Include dwarg2.h. + (struct ppc_link_hash_table): Add glink_eh_frame. + (create_linkage_sections): Create .eh_frame section. + (ppc64_elf_size_dynamic_sections): Arrange to drop unneeded + glink_eh_frame. + (glink_eh_frame_cie): New array. + (ppc64_elf_size_stubs): Size glink_eh_frame. + (ppc64_elf_build_stubs): Init glink_eh_frame contents. + (ppc64_elf_finish_dynamic_sections): Write glink_eh_frame. + 2011-07-25 Hans-Peter Nilsson <hp@bitrange.com> PR ld/12815 @@ -12,10 +30,10 @@ called, missing preparations for relocs of the respective type. 2011-07-24 Chao-ying Fu <fu@mips.com> - Ilie Garbacea <ilie@mips.com> - Maciej W. Rozycki <macro@codesourcery.com> - Joseph Myers <joseph@codesourcery.com> - Catherine Moore <clm@codesourcery.com> + Ilie Garbacea <ilie@mips.com> + Maciej W. Rozycki <macro@codesourcery.com> + Joseph Myers <joseph@codesourcery.com> + Catherine Moore <clm@codesourcery.com> Richard Sandiford <rdsandiford@googlemail.com> * archures.c (bfd_mach_mips_micromips): New macro. @@ -248,7 +266,7 @@ * aout-adobe.c (aout_32_bfd_lookup_section_flags): New definition. * aout-target.h (MY_bfd_lookup_section_flags): New definition. * aout-tic30.c (MY_bfd_lookup_section_flags): New definition. - * bfd-in2.h: Regenerated. + * bfd-in2.h: Regenerated. * bfd.c (bfd_lookup_section_flags): New definition. * binary.c (binary_bfd_lookup_section_flags): New definition. * bout.c (b_out_bfd_lookup_section_flags): New definition. diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index bd73b5e..359d2f8 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -34,6 +34,7 @@ #include "elf-bfd.h" #include "elf/ppc64.h" #include "elf64-ppc.h" +#include "dwarf2.h" static bfd_reloc_status_type ppc64_elf_ha_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); @@ -3720,6 +3721,7 @@ struct ppc_link_hash_table asection *sfpr; asection *brlt; asection *relbrlt; + asection *glink_eh_frame; /* Shortcut to .__tls_get_addr and __tls_get_addr. */ struct ppc_link_hash_entry *tls_get_addr; @@ -4170,6 +4172,18 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) || ! bfd_set_section_alignment (dynobj, htab->glink, 3)) return FALSE; + if (!info->no_ld_generated_unwind_info) + { + flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS + | SEC_IN_MEMORY | SEC_LINKER_CREATED); + htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj, + ".eh_frame", + flags); + if (htab->glink_eh_frame == NULL + || !bfd_set_section_alignment (abfd, htab->glink_eh_frame, 2)) + return FALSE; + } + flags = SEC_ALLOC | SEC_LINKER_CREATED; htab->iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags); if (htab->iplt == NULL @@ -9025,6 +9039,12 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* Strip this section if we don't need it; see the comment below. */ } + else if (s == htab->glink_eh_frame) + { + if (!bfd_is_abs_section (s->output_section)) + /* Not sized yet. */ + continue; + } else if (CONST_STRNEQ (s->name, ".rela")) { if (s->size != 0) @@ -10826,6 +10846,20 @@ group_sections (struct ppc_link_hash_table *htab, #undef PREV_SEC } +static const unsigned char glink_eh_frame_cie[] = +{ + 0, 0, 0, 16, /* length. */ + 0, 0, 0, 0, /* id. */ + 1, /* CIE version. */ + 'z', 'R', 0, /* Augmentation string. */ + 4, /* Code alignment. */ + 0x78, /* Data alignment. */ + 65, /* RA reg. */ + 1, /* Augmentation size. */ + DW_EH_PE_pcrel | DW_EH_PE_sdata4, /* FDE encoding. */ + DW_CFA_def_cfa, 1, 0 /* def_cfa: r1 offset 0. */ +}; + /* Determine and set the size of the stub section for a final link. The basic idea here is to examine all the relocations looking for @@ -11169,6 +11203,25 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size, htab->glink->flags |= SEC_RELOC; } + if (htab->glink_eh_frame != NULL + && !bfd_is_abs_section (htab->glink_eh_frame->output_section) + && (htab->glink_eh_frame->flags & SEC_EXCLUDE) == 0) + { + bfd_size_type size = 0; + + for (stub_sec = htab->stub_bfd->sections; + stub_sec != NULL; + stub_sec = stub_sec->next) + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) + size += 20; + if (htab->glink != NULL && htab->glink->size != 0) + size += 24; + if (size != 0) + size += sizeof (glink_eh_frame_cie); + htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size; + htab->glink_eh_frame->size = size; + } + for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) @@ -11178,7 +11231,9 @@ ppc64_elf_size_stubs (struct bfd_link_info *info, bfd_signed_vma group_size, /* Exit from this loop when no stubs have been added, and no stubs have changed size. */ - if (stub_sec == NULL) + if (stub_sec == NULL + && (htab->glink_eh_frame == NULL + || htab->glink_eh_frame->rawsize == htab->glink_eh_frame->size)) break; /* Ask the linker to do its stuff. */ @@ -11393,6 +11448,100 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms, return FALSE; } + if (htab->glink_eh_frame != NULL + && htab->glink_eh_frame->size != 0) + { + bfd_vma val; + + p = bfd_zalloc (htab->glink_eh_frame->owner, htab->glink_eh_frame->size); + if (p == NULL) + return FALSE; + htab->glink_eh_frame->contents = p; + + htab->glink_eh_frame->rawsize = htab->glink_eh_frame->size; + + memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie)); + /* CIE length (rewrite in case little-endian). */ + bfd_put_32 (htab->elf.dynobj, sizeof (glink_eh_frame_cie) - 4, p); + p += sizeof (glink_eh_frame_cie); + + for (stub_sec = htab->stub_bfd->sections; + stub_sec != NULL; + stub_sec = stub_sec->next) + if ((stub_sec->flags & SEC_LINKER_CREATED) == 0) + { + /* FDE length. */ + bfd_put_32 (htab->elf.dynobj, 16, p); + p += 4; + /* CIE pointer. */ + val = p - htab->glink_eh_frame->contents; + bfd_put_32 (htab->elf.dynobj, val, p); + p += 4; + /* Offset to stub section. */ + val = (stub_sec->output_section->vma + + stub_sec->output_offset); + val -= (htab->glink_eh_frame->output_section->vma + + htab->glink_eh_frame->output_offset); + val -= p - htab->glink_eh_frame->contents; + if (val + 0x80000000 > 0xffffffff) + { + info->callbacks->einfo + (_("%s offset too large for .eh_frame sdata4 encoding"), + stub_sec->name); + return FALSE; + } + bfd_put_32 (htab->elf.dynobj, val, p); + p += 4; + /* stub section size. */ + bfd_put_32 (htab->elf.dynobj, stub_sec->rawsize, p); + p += 4; + /* Augmentation. */ + p += 1; + /* Pad. */ + p += 3; + } + if (htab->glink != NULL && htab->glink->size != 0) + { + /* FDE length. */ + bfd_put_32 (htab->elf.dynobj, 20, p); + p += 4; + /* CIE pointer. */ + val = p - htab->glink_eh_frame->contents; + bfd_put_32 (htab->elf.dynobj, val, p); + p += 4; + /* Offset to .glink. */ + val = (htab->glink->output_section->vma + + htab->glink->output_offset + + 8); + val -= (htab->glink_eh_frame->output_section->vma + + htab->glink_eh_frame->output_offset); + val -= p - htab->glink_eh_frame->contents; + if (val + 0x80000000 > 0xffffffff) + { + info->callbacks->einfo + (_("%s offset too large for .eh_frame sdata4 encoding"), + htab->glink->name); + return FALSE; + } + bfd_put_32 (htab->elf.dynobj, val, p); + p += 4; + /* .glink size. */ + bfd_put_32 (htab->elf.dynobj, htab->glink->rawsize - 8, p); + p += 4; + /* Augmentation. */ + p += 1; + + *p++ = DW_CFA_advance_loc + 1; + *p++ = DW_CFA_register; + *p++ = 65; + *p++ = 12; + *p++ = DW_CFA_advance_loc + 4; + *p++ = DW_CFA_restore_extended; + *p++ = 65; + } + htab->glink_eh_frame->size = p - htab->glink_eh_frame->contents; + } + /* Build the stubs as directed by the stub hash table. */ bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info); @@ -11410,7 +11559,9 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms, } if (stub_sec != NULL - || htab->glink->rawsize != htab->glink->size) + || htab->glink->rawsize != htab->glink->size + || (htab->glink_eh_frame != NULL + && htab->glink_eh_frame->rawsize != htab->glink_eh_frame->size)) { htab->stub_error = TRUE; info->callbacks->einfo (_("stubs don't match calculated size\n")); @@ -13559,6 +13710,14 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd, NULL)) return FALSE; + + if (htab->glink_eh_frame != NULL + && htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME + && !_bfd_elf_write_section_eh_frame (output_bfd, info, + htab->glink_eh_frame, + htab->glink_eh_frame->contents)) + return FALSE; + /* We need to handle writing out multiple GOT sections ourselves, since we didn't add them to DYNOBJ. We know dynobj is the first bfd. */ diff --git a/ld/ChangeLog b/ld/ChangeLog index 951c8a2..b51bf9b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,16 @@ +2011-07-26 Alan Modra <amodra@gmail.com> + + * emulparams/elf32ppc.sh: Source plt_unwind.sh. + * emulparams/elf64ppc.sh: Likewise. + * emultempl/ppc32elf.em (OPTION_NO_TLS_OPT): Adjust. + (PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_LONGOPTS, + PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Append to + existing values. + * emultempl/ppc64elf.em (OPTION_STUBGROUP_SIZE): Adjust. + (PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_LONGOPTS, + PARSE_AND_LIST_OPTIONS, PARSE_AND_LIST_ARGS_CASES): Append to + existing values. + 2011-07-22 H.J. Lu <hongjiu.lu@intel.com> * Makefile.am (ALL_64_EMULATIONS): Add eelf_k1om.o and diff --git a/ld/emulparams/elf32ppc.sh b/ld/emulparams/elf32ppc.sh index e638815..8e1a9f3 100644 --- a/ld/emulparams/elf32ppc.sh +++ b/ld/emulparams/elf32ppc.sh @@ -3,6 +3,7 @@ # elf32ppcsim.sh . ${srcdir}/emulparams/elf32ppccommon.sh +. ${srcdir}/emulparams/plt_unwind.sh # Yes, we want duplicate .got and .plt sections. The linker chooses the # appropriate one magically in ppc_after_open DATA_GOT= diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh index c9337ea..8611686 100644 --- a/ld/emulparams/elf64ppc.sh +++ b/ld/emulparams/elf64ppc.sh @@ -1,3 +1,4 @@ +. ${srcdir}/emulparams/plt_unwind.sh TEMPLATE_NAME=elf32 EXTRA_EM_FILE=ppc64elf ELFSIZE=64 diff --git a/ld/emultempl/ppc32elf.em b/ld/emultempl/ppc32elf.em index 36f9df2..d9d7c03 100644 --- a/ld/emultempl/ppc32elf.em +++ b/ld/emultempl/ppc32elf.em @@ -1,5 +1,6 @@ # This shell script emits a C file. -*- C -*- -# Copyright 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. +# Copyright 2003, 2005, 2007, 2008, 2009, 2010, 2011 +# Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -176,8 +177,8 @@ fi # Define some shell vars to insert bits of code into the standard elf # parse_args and list_options functions. # -PARSE_AND_LIST_PROLOGUE=' -#define OPTION_NO_TLS_OPT 301 +PARSE_AND_LIST_PROLOGUE=${PARSE_AND_LIST_PROLOGUE}' +#define OPTION_NO_TLS_OPT 321 #define OPTION_NO_TLS_GET_ADDR_OPT (OPTION_NO_TLS_OPT + 1) #define OPTION_NEW_PLT (OPTION_NO_TLS_GET_ADDR_OPT + 1) #define OPTION_OLD_PLT (OPTION_NEW_PLT + 1) @@ -186,7 +187,7 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_NO_STUBSYMS (OPTION_STUBSYMS + 1) ' -PARSE_AND_LIST_LONGOPTS=' +PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST_LONGOPTS}' { "emit-stub-syms", no_argument, NULL, OPTION_STUBSYMS }, { "no-emit-stub-syms", no_argument, NULL, OPTION_NO_STUBSYMS }, { "no-tls-optimize", no_argument, NULL, OPTION_NO_TLS_OPT }, @@ -196,7 +197,7 @@ PARSE_AND_LIST_LONGOPTS=' { "sdata-got", no_argument, NULL, OPTION_OLD_GOT }, ' -PARSE_AND_LIST_OPTIONS=' +PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}' fprintf (file, _("\ --emit-stub-syms Label linker stubs with a symbol.\n\ --no-emit-stub-syms Don'\''t label linker stubs with a symbol.\n\ @@ -208,7 +209,7 @@ PARSE_AND_LIST_OPTIONS=' )); ' -PARSE_AND_LIST_ARGS_CASES=' +PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' case OPTION_STUBSYMS: emit_stub_syms = 1; break; diff --git a/ld/emultempl/ppc64elf.em b/ld/emultempl/ppc64elf.em index a57861b..8a81beb 100644 --- a/ld/emultempl/ppc64elf.em +++ b/ld/emultempl/ppc64elf.em @@ -652,8 +652,8 @@ fi # Define some shell vars to insert bits of code into the standard elf # parse_args and list_options functions. # -PARSE_AND_LIST_PROLOGUE=' -#define OPTION_STUBGROUP_SIZE 301 +PARSE_AND_LIST_PROLOGUE=${PARSE_AND_LIST_PROLOGUE}' +#define OPTION_STUBGROUP_SIZE 321 #define OPTION_PLT_STATIC_CHAIN (OPTION_STUBGROUP_SIZE + 1) #define OPTION_NO_PLT_STATIC_CHAIN (OPTION_PLT_STATIC_CHAIN + 1) #define OPTION_STUBSYMS (OPTION_NO_PLT_STATIC_CHAIN + 1) @@ -669,7 +669,7 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_NON_OVERLAPPING_OPD (OPTION_NO_TOC_SORT + 1) ' -PARSE_AND_LIST_LONGOPTS=' +PARSE_AND_LIST_LONGOPTS=${PARSE_AND_LIST_LONGOPTS}' { "stub-group-size", required_argument, NULL, OPTION_STUBGROUP_SIZE }, { "plt-static-chain", no_argument, NULL, OPTION_PLT_STATIC_CHAIN }, { "no-plt-static-chain", no_argument, NULL, OPTION_NO_PLT_STATIC_CHAIN }, @@ -686,7 +686,7 @@ PARSE_AND_LIST_LONGOPTS=' { "non-overlapping-opd", no_argument, NULL, OPTION_NON_OVERLAPPING_OPD }, ' -PARSE_AND_LIST_OPTIONS=' +PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}' fprintf (file, _("\ --stub-group-size=N Maximum size of a group of input sections that\n\ can be handled by one stub section. A negative\n\ @@ -742,7 +742,7 @@ PARSE_AND_LIST_OPTIONS=' )); ' -PARSE_AND_LIST_ARGS_CASES=' +PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' case OPTION_STUBGROUP_SIZE: { const char *end; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 8400fd1..a87fbe4 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,12 +1,18 @@ +2011-07-26 Alan Modra <amodra@gmail.com> + + * ld-powerpc/powerpc.exp: Use --no-ld-generated-unwind-info + with some tests. + * ld-powerpc/relbrlt.d: Likewise. + 2011-07-25 Hans-Peter Nilsson <hp@bitrange.com> PR ld/12815 * ld-mmix/pr12815-1.d, ld-mmix/pr12815-1.s, ld-mmix/pr12815-1.ld, - ld-mmix/pr12815-2.d, ld-mmix/pr12815-2.s: New tests. - + ld-mmix/pr12815-2.d, ld-mmix/pr12815-2.s: New tests. + 2011-07-24 Catherine Moore <clm@codesourcery.com> - Chao-ying Fu <fu@mips.com> - Maciej W. Rozycki <macro@codesourcery.com> + Chao-ying Fu <fu@mips.com> + Maciej W. Rozycki <macro@codesourcery.com> * lib/ld-lib.exp (run_dump_test): Support distinct assembler flags for the same source named multiple times. diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp index bfffb42..d48b148 100644 --- a/ld/testsuite/ld-powerpc/powerpc.exp +++ b/ld/testsuite/ld-powerpc/powerpc.exp @@ -113,11 +113,11 @@ set ppcelftests { "tls32"} {"TLS32 helper shared library" "-shared -melf32ppc tmpdir/tlslib32.o" "" {} {} "libtlslib32.so"} - {"TLS32 dynamic exec" "-melf32ppc tmpdir/tls32.o tmpdir/libtlslib32.so" "" {} + {"TLS32 dynamic exec" "-melf32ppc --no-ld-generated-unwind-info tmpdir/tls32.o tmpdir/libtlslib32.so" "" {} {{readelf -WSsrl tlsexe32.r} {objdump -dr tlsexe32.d} {objdump -sj.got tlsexe32.g} {objdump -sj.tdata tlsexe32.t}} "tlsexe32"} - {"TLS32 shared" "-shared -melf32ppc tmpdir/tls32.o" "" {} + {"TLS32 shared" "-shared -melf32ppc --no-ld-generated-unwind-info tmpdir/tls32.o" "" {} {{readelf -WSsrl tlsso32.r} {objdump -dr tlsso32.d} {objdump -sj.got tlsso32.g} {objdump -sj.tdata tlsso32.t}} "tls32.so"} @@ -156,15 +156,15 @@ set ppc64elftests { {} "libtlslib.so"} {"TLS helper old shared lib" "-shared -melf64ppc" "-a64" {oldtlslib.s} {} "liboldlib.so"} - {"TLS dynamic exec" "-melf64ppc tmpdir/tls.o tmpdir/libtlslib.so" "" {} + {"TLS dynamic exec" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o tmpdir/libtlslib.so" "" {} {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d} {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}} "tlsexe"} - {"TLS dynamic old" "-melf64ppc tmpdir/tls.o tmpdir/liboldlib.so" "" {} + {"TLS dynamic old" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o tmpdir/liboldlib.so" "" {} {{readelf -WSsrl tlsexe.r} {objdump -dr tlsexe.d} {objdump -sj.got tlsexe.g} {objdump -sj.tdata tlsexe.t}} "tlsexeold"} - {"TLS shared" "-shared -melf64ppc tmpdir/tls.o" "" {} + {"TLS shared" "-shared -melf64ppc --no-ld-generated-unwind-info tmpdir/tls.o" "" {} {{readelf -WSsrl tlsso.r} {objdump -dr tlsso.d} {objdump -sj.got tlsso.g} {objdump -sj.tdata tlsso.t}} "tls.so"} @@ -172,17 +172,17 @@ set ppc64elftests { {{objdump -dr tlstoc.d} {objdump -sj.got tlstoc.g} {objdump -sj.tdata tlstoc.t}} "tlstoc"} - {"TLSTOC dynamic exec" "-melf64ppc tmpdir/tlstoc.o tmpdir/libtlslib.so" + {"TLSTOC dynamic exec" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o tmpdir/libtlslib.so" "" {} {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d} {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}} "tlsexetoc"} - {"TLSTOC dynamic old" "-melf64ppc tmpdir/tlstoc.o tmpdir/liboldlib.so" + {"TLSTOC dynamic old" "-melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o tmpdir/liboldlib.so" "" {} {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetoc.d} {objdump -sj.got tlsexetoc.g} {objdump -sj.tdata tlsexetoc.t}} "tlsexetocold"} - {"TLSTOC shared" "-shared -melf64ppc tmpdir/tlstoc.o" "" {} + {"TLSTOC shared" "-shared -melf64ppc --no-ld-generated-unwind-info tmpdir/tlstoc.o" "" {} {{readelf -WSsrl tlstocso.r} {objdump -dr tlstocso.d} {objdump -sj.got tlstocso.g} {objdump -sj.tdata tlstocso.t}} "tlstoc.so"} diff --git a/ld/testsuite/ld-powerpc/relbrlt.d b/ld/testsuite/ld-powerpc/relbrlt.d index 69321eb..c12017d 100644 --- a/ld/testsuite/ld-powerpc/relbrlt.d +++ b/ld/testsuite/ld-powerpc/relbrlt.d @@ -1,6 +1,6 @@ #source: relbrlt.s #as: -a64 -#ld: -melf64ppc --emit-relocs +#ld: -melf64ppc --no-ld-generated-unwind-info --emit-relocs #objdump: -Dr .*: file format elf64-powerpc |