From 63bc6f6c391c4e5a61044cf33422cfe81893487c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 4 Nov 2003 08:51:36 +0000 Subject: [PATCH] * elf64-ppc.c (ppc_size_one_stub): Size relbrlt. Accept info arg rather than htab. (ppc64_elf_size_stubs): Adjust ppc_size_one_stub traversal. Zero relbrlt size. (ppc64_elf_build_stubs): Allocate space for relbrlt. --- bfd/ChangeLog | 8 ++++++++ bfd/elf64-ppc.c | 22 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 9bad45f336..c05032090b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2003-11-04 Alan Modra + + * elf64-ppc.c (ppc_size_one_stub): Size relbrlt. Accept info arg + rather than htab. + (ppc64_elf_size_stubs): Adjust ppc_size_one_stub traversal. Zero + relbrlt size. + (ppc64_elf_build_stubs): Allocate space for relbrlt. + 2003-11-04 Alan Modra * bfd-in.h (_bfd_elf_tls_setup): Declare. diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index d6291f4e04..4024a94e35 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -6354,13 +6354,16 @@ static bfd_boolean ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) { struct ppc_stub_hash_entry *stub_entry; + struct bfd_link_info *info; struct ppc_link_hash_table *htab; bfd_vma off; int size; /* Massage our args to the form they really have. */ stub_entry = (struct ppc_stub_hash_entry *) gen_entry; - htab = in_arg; + info = in_arg; + + htab = ppc_hash_table (info); if (stub_entry->stub_type == ppc_stub_plt_call) { @@ -6427,6 +6430,9 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) br_entry->iter = htab->stub_iteration; br_entry->offset = htab->brlt->_raw_size; htab->brlt->_raw_size += 8; + + if (info->shared) + htab->relbrlt->_raw_size += sizeof (Elf64_External_Rela); } stub_entry->stub_type += ppc_stub_plt_branch - ppc_stub_long_branch; @@ -7007,8 +7013,13 @@ ppc64_elf_size_stubs (bfd *output_bfd, } htab->brlt->_raw_size = 0; htab->brlt->_cooked_size = 0; + if (info->shared) + { + htab->relbrlt->_raw_size = 0; + htab->relbrlt->_cooked_size = 0; + } - bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, htab); + bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info); /* Ask the linker to do its stuff. */ (*htab->layout_sections_again) (); @@ -7211,6 +7222,13 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms, if (htab->brlt->contents == NULL) return FALSE; } + if (info->shared && htab->relbrlt->_raw_size != 0) + { + htab->relbrlt->contents = bfd_zalloc (htab->relbrlt->owner, + htab->relbrlt->_raw_size); + if (htab->relbrlt->contents == NULL) + return FALSE; + } /* Build the stubs as directed by the stub hash table. */ bfd_hash_traverse (&htab->stub_hash_table, ppc_build_one_stub, info); -- 2.34.1