bfd/
* 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. ld/ * 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. ld/testsuite/ * ld-powerpc/powerpc.exp: Use --no-ld-generated-unwind-info with some tests. * ld-powerpc/relbrlt.d: Likewise.
This commit is contained in:
parent
4f72695838
commit
58d180e827
10 changed files with 230 additions and 31 deletions
|
@ -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.
|
||||
|
|
163
bfd/elf64-ppc.c
163
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. */
|
||||
|
|
13
ld/ChangeLog
13
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
|
||||
|
|
|
@ -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=
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
. ${srcdir}/emulparams/plt_unwind.sh
|
||||
TEMPLATE_NAME=elf32
|
||||
EXTRA_EM_FILE=ppc64elf
|
||||
ELFSIZE=64
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue