aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-07-15 12:18:01 +0000
committerAlan Modra <amodra@gmail.com>2005-07-15 12:18:01 +0000
commiteaae8ded6211112d8b3f31b095433d660bcc5e59 (patch)
tree12928118eb2627deb54fadeacf82f2f133fc3308
parent265eeb58f37c15a72f247f39ecefad113373d0ba (diff)
downloadfsf-binutils-gdb-eaae8ded6211112d8b3f31b095433d660bcc5e59.zip
fsf-binutils-gdb-eaae8ded6211112d8b3f31b095433d660bcc5e59.tar.gz
fsf-binutils-gdb-eaae8ded6211112d8b3f31b095433d660bcc5e59.tar.bz2
* elflink.c (bfd_elf_record_link_assignment): Remove output_bfd param.
(_bfd_elf_provide_symbol): Allow redefinition of weak syms and those defined in output sections. Call bfd_elf_record_link_assignment. * bfd-in.h (bfd_elf_record_link_assignment): Update prototype. * bfd-in2.h: Regenerate.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/bfd-in.h2
-rw-r--r--bfd/bfd-in2.h2
-rw-r--r--bfd/elflink.c10
4 files changed, 17 insertions, 5 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a078260..7d836d1 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2005-07-15 Alan Modra <amodra@bigpond.net.au>
+
+ * elflink.c (bfd_elf_record_link_assignment): Remove output_bfd param.
+ (_bfd_elf_provide_symbol): Allow redefinition of weak syms and those
+ defined in output sections. Call bfd_elf_record_link_assignment.
+ * bfd-in.h (bfd_elf_record_link_assignment): Update prototype.
+ * bfd-in2.h: Regenerate.
+
2005-07-14 Jim Blandy <jimb@redhat.com>
Add support for m32c-*-elf (Renesas m32c and m16c).
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 34188d1..33e19ea 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -633,7 +633,7 @@ enum dynamic_lib_link_class {
};
extern bfd_boolean bfd_elf_record_link_assignment
- (bfd *, struct bfd_link_info *, const char *, bfd_boolean);
+ (struct bfd_link_info *, const char *, 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
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 96cf124..062a819 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -640,7 +640,7 @@ enum dynamic_lib_link_class {
};
extern bfd_boolean bfd_elf_record_link_assignment
- (bfd *, struct bfd_link_info *, const char *, bfd_boolean);
+ (struct bfd_link_info *, const char *, 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
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 791575b..7307c15 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -433,8 +433,7 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info,
this in case some dynamic object refers to this symbol. */
bfd_boolean
-bfd_elf_record_link_assignment (bfd *output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info,
+bfd_elf_record_link_assignment (struct bfd_link_info *info,
const char *name,
bfd_boolean provide)
{
@@ -9843,8 +9842,13 @@ _bfd_elf_provide_symbol (struct bfd_link_info *info, const char *name,
{
struct elf_link_hash_entry *h;
+ bfd_elf_record_link_assignment (info, name, TRUE);
+
h = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, FALSE);
- if (h != NULL && !h->def_regular)
+ if (h != NULL
+ && !(h->root.type == bfd_link_hash_defined
+ && h->root.u.def.section != NULL
+ && h->root.u.def.section != h->root.u.def.section->output_section))
bfd_elf_set_symbol (h, val, s);
}