This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi Thiemo,
Sorry for that. The patch looks fine. But bfd-in2.h is a generated file.
Does this patch work for you?
H.J. Lu
Intel Corporation
>-----Original Message-----
>From: Thiemo Seufer [mailto:ths@networkno.de]
>Sent: Monday, December 05, 2005 7:08 PM
>To: binutils@sourceware.org
>Cc: Lu, Hongjiu; Khem Raj
>Subject: [PATCH] Fix handling of PROVIDE_HIDDEN symbols
>
>Hello All,
>
>the addition of PROVIDE_HIDDEN support by H.J. in 2005-08-05 causes
>several failures for the mips toolchain, most notably for static
>linking of mips-linux executables, but also PR ld/1932.
>
>This is caused by calling bfd_hide_symbol after the section sizing
>was done, which converts global GOT entries to local ones when it
>is already too late. The sizing is done in
>ld/emultempl/elf32.em:gld${EMULATION_NAME}_before_allocation.
>
>I suspect other elf32.em users are affected as well.
>
>The appended patch lets bfd_elf_record_link_assignment account for
>provided hidden symbols.
>
>
>Thiemo
>
>
>2005-12-06 Thiemo Seufer <ths@networkno.de>
>
> [ bfd/ChangeLog ]
> PR ld/1932
> * bfd-in2.h (bfd_elf_record_link_assignment): Add output_bfd
> and hidden arguments.
> * elflink.c (bfd_elf_record_link_assignment): Handle hidden
> symbols which were provided by a linker script.
>
> [ ld/ChangeLog ]
> * emultempl/elf32.em (gld${EMULATION_NAME}_find_exp_assignment):
> Adjust bfd_elf_record_link_assignment call.
>
>
>Index: bfd/bfd-in2.h
>===================================================================
>RCS file: /cvs/src/src/bfd/bfd-in2.h,v
>retrieving revision 1.372
>diff -u -p -r1.372 bfd-in2.h
>--- bfd/bfd-in2.h 24 Nov 2005 06:02:08 -0000 1.372
>+++ bfd/bfd-in2.h 6 Dec 2005 02:40:35 -0000
>@@ -640,7 +640,7 @@ enum dynamic_lib_link_class {
> };
>
> extern bfd_boolean bfd_elf_record_link_assignment
>- (struct bfd_link_info *, const char *, bfd_boolean);
>+ (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
>bfd_boolean);
> extern struct bfd_link_needed_list *bfd_elf_get_needed_list
> (bfd *, struct bfd_link_info *);
> extern bfd_boolean bfd_elf_get_bfd_needed_list
>Index: bfd/elflink.c
>===================================================================
>RCS file: /cvs/src/src/bfd/elflink.c,v
>retrieving revision 1.197
>diff -u -p -r1.197 elflink.c
>--- bfd/elflink.c 3 Nov 2005 02:53:38 -0000 1.197
>+++ bfd/elflink.c 6 Dec 2005 02:40:36 -0000
>@@ -424,9 +424,11 @@ bfd_elf_link_record_dynamic_symbol (stru
> this in case some dynamic object refers to this symbol. */
>
> bfd_boolean
>-bfd_elf_record_link_assignment (struct bfd_link_info *info,
>+bfd_elf_record_link_assignment (bfd *output_bfd,
>+ struct bfd_link_info *info,
> const char *name,
>- bfd_boolean provide)
>+ bfd_boolean provide,
>+ bfd_boolean hidden)
> {
> struct elf_link_hash_entry *h;
> struct elf_link_hash_table *htab;
>@@ -473,6 +475,14 @@ bfd_elf_record_link_assignment (struct b
>
> h->def_regular = 1;
>
>+ if (provide && hidden)
>+ {
>+ const struct elf_backend_data *bed = get_elf_backend_data
>(output_bfd);
>+
>+ h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
>+ (*bed->elf_backend_hide_symbol) (info, h, TRUE);
>+ }
>+
> /* STV_HIDDEN and STV_INTERNAL symbols must be STB_LOCAL in shared
>objects
> and executables. */
> if (!info->relocatable
>Index: ld/emultempl/elf32.em
>===================================================================
>RCS file: /cvs/src/src/ld/emultempl/elf32.em,v
>retrieving revision 1.160
>diff -u -p -r1.160 elf32.em
>--- ld/emultempl/elf32.em 24 Nov 2005 06:02:08 -0000 1.160
>+++ ld/emultempl/elf32.em 6 Dec 2005 02:40:39 -0000
>@@ -986,8 +986,9 @@ gld${EMULATION_NAME}_find_exp_assignment
> will do no harm. */
> if (strcmp (exp->assign.dst, ".") != 0)
> {
>- if (!bfd_elf_record_link_assignment (&link_info, exp-
>>assign.dst,
>- provide))
>+ if (!bfd_elf_record_link_assignment (output_bfd, &link_info,
>+ exp->assign.dst, provide,
>+ exp->assign.hidden))
> einfo ("%P%F: failed to record assignment to %s: %E\n",
> exp->assign.dst);
> }
Attachment:
binutils-hide-fix-2.patch
Description: binutils-hide-fix-2.patch
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |