aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2009-11-23 14:41:33 +0000
committerPaul Brook <paul@codesourcery.com>2009-11-23 14:41:33 +0000
commit1338dd10efb7f5b6ab29142fa07004ff900a20b4 (patch)
tree2a33ea567499e5224c3204234a776f05784b93a7 /bfd
parent * cgen-engine.h (EXTRACT_MSB0_SINT): Renamed from EXTRACT_MSB0_INT. (diff)
downloadbinutils-gdb-1338dd10efb7f5b6ab29142fa07004ff900a20b4.tar.gz
binutils-gdb-1338dd10efb7f5b6ab29142fa07004ff900a20b4.tar.bz2
binutils-gdb-1338dd10efb7f5b6ab29142fa07004ff900a20b4.zip
2009-11-23 Paul Brook <paul@codesourcery.com>
ld/ * ldexp.c: Copy symbol type for simple assignments. bfd/ * libbfd-in.h (_bfd_generic_copy_link_hash_symbol_type): Add prototype. * elf-bfd.h (_bfd_elf_copy_link_hash_symbol_type): Add prototype. * linker.c (_bfd_generic_copy_link_hash_symbol_type): New function. * elflink.c (_bfd_elf_copy_link_hash_symbol_type): New function. * targets.c (BFD_JUMP_TABLE_LINK, struct bfd_target): Add _copy_link_hash_symbol_type. * bfd/coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Add _bfd_generic_copy_link_hash_symbol_type. * bfd/coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Add _bfd_generic_copy_link_hash_symbol_type. * aout-adobe.c (aout_32_bfd_copy_link_hash_symbol_type): Define. * aout-target.h (MY_bfd_copy_link_hash_symbol_type): Define. * aout-tic30.c (MY_bfd_copy_link_hash_symbol_type): Define. * binary.c (binary_bfd_copy_link_hash_symbol_type): Define. * bout.c (b_out_bfd_copy_link_hash_symbol_type): Define. * coffcode.h (coff_bfd_copy_link_hash_symbol_type): Define. * elfxx-target.h (bfd_elfNN_bfd_copy_link_hash_symbol_type): Define. * i386msdos.c (msdos_bfd_copy_link_hash_symbol_type): Define. * i386os9k.c (os9k_bfd_copy_link_hash_symbol_type): Define. * ieee.c (ieee_bfd_copy_link_hash_symbol_type): Define. * ihex.c (ihex_bfd_copy_link_hash_symbol_type): Define. * libecoff.h (_bfd_ecoff_bfd_copy_link_hash_symbol_type): Define. * mach-o.c (bfd_mach_o_bfd_copy_link_hash_symbol_type): Define. * mmo.c (mmo_bfd_copy_link_hash_symbol_type): Define. * nlm-target.h (nlm_bfd_copy_link_hash_symbol_type): Define. * oasys.c (oasys_bfd_copy_link_hash_symbol_type): Define. * pef.c (bfd_pef_bfd_copy_link_hash_symbol_type): Define. * ppcboot.c (ppcboot_bfd_copy_link_hash_symbol_type): Define. * som.c (som_bfd_copy_link_hash_symbol_type): Define. * srec.c (srec_bfd_copy_link_hash_symbol_type): Define. * tekhex.c (tekhex_bfd_copy_link_hash_symbol_type): Define. * versados.c (versados_bfd_copy_link_hash_symbol_type): Define. * vms.c (vms_bfd_copy_link_hash_symbol_type): Define. * xsym.c (bfd_sym_bfd_copy_link_hash_symbol_type): Define. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. ld/testsuite * ld-arm/script-type.sym: New test. * ld-arm/script-type.s: New test. * ld-arm/script-type.s: New test.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog40
-rw-r--r--bfd/aout-adobe.c2
-rw-r--r--bfd/aout-target.h4
-rw-r--r--bfd/aout-tic30.c4
-rw-r--r--bfd/bfd-in2.h7
-rw-r--r--bfd/binary.c2
-rw-r--r--bfd/bout.c2
-rw-r--r--bfd/coff-rs6000.c2
-rw-r--r--bfd/coff64-rs6000.c2
-rw-r--r--bfd/coffcode.h2
-rw-r--r--bfd/elf-bfd.h2
-rw-r--r--bfd/elflink.c12
-rw-r--r--bfd/elfxx-target.h5
-rw-r--r--bfd/i386msdos.c2
-rw-r--r--bfd/i386os9k.c2
-rw-r--r--bfd/ieee.c2
-rw-r--r--bfd/ihex.c2
-rw-r--r--bfd/libbfd-in.h7
-rw-r--r--bfd/libbfd.h7
-rw-r--r--bfd/libecoff.h2
-rw-r--r--bfd/linker.c11
-rw-r--r--bfd/mach-o-target.c2
-rw-r--r--bfd/mmo.c2
-rw-r--r--bfd/nlm-target.h2
-rw-r--r--bfd/oasys.c2
-rw-r--r--bfd/pef.c2
-rw-r--r--bfd/ppcboot.c2
-rw-r--r--bfd/som.c2
-rw-r--r--bfd/srec.c2
-rw-r--r--bfd/targets.c7
-rw-r--r--bfd/tekhex.c2
-rw-r--r--bfd/versados.c2
-rw-r--r--bfd/vms.c2
-rw-r--r--bfd/xsym.c2
34 files changed, 152 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a3b9a8fe4b8..2f7a85d8efb 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,43 @@
+2009-11-23 Paul Brook <paul@codesourcery.com>
+
+ * libbfd-in.h (_bfd_generic_copy_link_hash_symbol_type): Add
+ prototype.
+ * elf-bfd.h (_bfd_elf_copy_link_hash_symbol_type): Add prototype.
+ * linker.c (_bfd_generic_copy_link_hash_symbol_type): New function.
+ * elflink.c (_bfd_elf_copy_link_hash_symbol_type): New function.
+ * targets.c (BFD_JUMP_TABLE_LINK, struct bfd_target): Add
+ _copy_link_hash_symbol_type.
+ * bfd/coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Add
+ _bfd_generic_copy_link_hash_symbol_type.
+ * bfd/coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Add
+ _bfd_generic_copy_link_hash_symbol_type.
+ * aout-adobe.c (aout_32_bfd_copy_link_hash_symbol_type): Define.
+ * aout-target.h (MY_bfd_copy_link_hash_symbol_type): Define.
+ * aout-tic30.c (MY_bfd_copy_link_hash_symbol_type): Define.
+ * binary.c (binary_bfd_copy_link_hash_symbol_type): Define.
+ * bout.c (b_out_bfd_copy_link_hash_symbol_type): Define.
+ * coffcode.h (coff_bfd_copy_link_hash_symbol_type): Define.
+ * elfxx-target.h (bfd_elfNN_bfd_copy_link_hash_symbol_type): Define.
+ * i386msdos.c (msdos_bfd_copy_link_hash_symbol_type): Define.
+ * i386os9k.c (os9k_bfd_copy_link_hash_symbol_type): Define.
+ * ieee.c (ieee_bfd_copy_link_hash_symbol_type): Define.
+ * ihex.c (ihex_bfd_copy_link_hash_symbol_type): Define.
+ * libecoff.h (_bfd_ecoff_bfd_copy_link_hash_symbol_type): Define.
+ * mach-o.c (bfd_mach_o_bfd_copy_link_hash_symbol_type): Define.
+ * mmo.c (mmo_bfd_copy_link_hash_symbol_type): Define.
+ * nlm-target.h (nlm_bfd_copy_link_hash_symbol_type): Define.
+ * oasys.c (oasys_bfd_copy_link_hash_symbol_type): Define.
+ * pef.c (bfd_pef_bfd_copy_link_hash_symbol_type): Define.
+ * ppcboot.c (ppcboot_bfd_copy_link_hash_symbol_type): Define.
+ * som.c (som_bfd_copy_link_hash_symbol_type): Define.
+ * srec.c (srec_bfd_copy_link_hash_symbol_type): Define.
+ * tekhex.c (tekhex_bfd_copy_link_hash_symbol_type): Define.
+ * versados.c (versados_bfd_copy_link_hash_symbol_type): Define.
+ * vms.c (vms_bfd_copy_link_hash_symbol_type): Define.
+ * xsym.c (bfd_sym_bfd_copy_link_hash_symbol_type): Define.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+
2009-11-19 Tristan Gingold <gingold@adacore.com>
* coff-rs6000.c (rs6000coff_vec): Use generic routines instead of
diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c
index 02f6ccbb35f..ca0e0035d29 100644
--- a/bfd/aout-adobe.c
+++ b/bfd/aout-adobe.c
@@ -468,6 +468,8 @@ aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED,
#define aout_32_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define aout_32_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define aout_32_bfd_link_just_syms _bfd_generic_link_just_syms
+#define aout_32_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define aout_32_bfd_final_link _bfd_generic_final_link
#define aout_32_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/aout-target.h b/bfd/aout-target.h
index 96d7f971574..39c8d34c1ae 100644
--- a/bfd/aout-target.h
+++ b/bfd/aout-target.h
@@ -523,6 +523,10 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
#ifndef MY_bfd_link_just_syms
#define MY_bfd_link_just_syms _bfd_generic_link_just_syms
#endif
+#ifndef MY_bfd_copy_link_hash_symbol_type
+#define MY_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
+#endif
#ifndef MY_bfd_link_split_section
#define MY_bfd_link_split_section _bfd_generic_link_split_section
#endif
diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c
index ef74fa6d968..feaec8a8c7d 100644
--- a/bfd/aout-tic30.c
+++ b/bfd/aout-tic30.c
@@ -980,6 +980,10 @@ tic30_aout_set_arch_mach (bfd *abfd,
#ifndef MY_bfd_link_just_syms
#define MY_bfd_link_just_syms _bfd_generic_link_just_syms
#endif
+#ifndef MY_bfd_copy_link_hash_symbol_type
+#define MY_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
+#endif
#ifndef MY_bfd_link_split_section
#define MY_bfd_link_split_section _bfd_generic_link_split_section
#endif
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 455ec5696fc..aa58ca659fd 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -5601,6 +5601,7 @@ typedef struct bfd_target
NAME##_bfd_link_hash_table_free, \
NAME##_bfd_link_add_symbols, \
NAME##_bfd_link_just_syms, \
+ NAME##_bfd_copy_link_hash_symbol_type, \
NAME##_bfd_final_link, \
NAME##_bfd_link_split_section, \
NAME##_bfd_gc_sections, \
@@ -5632,6 +5633,12 @@ typedef struct bfd_target
/* Indicate that we are only retrieving symbol values from this section. */
void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
+ /* Copy the symbol type of a linker hash table entry. */
+#define bfd_copy_link_hash_symbol_type(b, t, f) \
+ BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
+ void (*_bfd_copy_link_hash_symbol_type)
+ (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+
/* Do a link based on the link_order structures attached to each
section of the BFD. */
bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
diff --git a/bfd/binary.c b/bfd/binary.c
index d264a09209e..2af0293ef4c 100644
--- a/bfd/binary.c
+++ b/bfd/binary.c
@@ -307,6 +307,8 @@ binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define binary_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define binary_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define binary_bfd_link_just_syms _bfd_generic_link_just_syms
+#define binary_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define binary_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define binary_bfd_final_link _bfd_generic_final_link
#define binary_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/bout.c b/bfd/bout.c
index f2721e87e59..ad53d8fc320 100644
--- a/bfd/bout.c
+++ b/bfd/bout.c
@@ -1386,6 +1386,8 @@ b_out_bfd_get_relocated_section_contents (bfd *output_bfd,
#define b_out_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define b_out_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define b_out_bfd_link_just_syms _bfd_generic_link_just_syms
+#define b_out_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define b_out_bfd_final_link _bfd_generic_final_link
#define b_out_bfd_link_split_section _bfd_generic_link_split_section
#define b_out_bfd_gc_sections bfd_generic_gc_sections
diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c
index 2482cfbc7e1..2ee74ecf574 100644
--- a/bfd/coff-rs6000.c
+++ b/bfd/coff-rs6000.c
@@ -4230,6 +4230,7 @@ const bfd_target rs6000coff_vec =
_bfd_generic_link_hash_table_free,
_bfd_xcoff_bfd_link_add_symbols,
_bfd_generic_link_just_syms,
+ _bfd_generic_copy_link_hash_symbol_type,
_bfd_xcoff_bfd_final_link,
_bfd_generic_link_split_section,
bfd_generic_gc_sections,
@@ -4483,6 +4484,7 @@ const bfd_target pmac_xcoff_vec =
_bfd_generic_link_hash_table_free,
_bfd_xcoff_bfd_link_add_symbols,
_bfd_generic_link_just_syms,
+ _bfd_generic_copy_link_hash_symbol_type,
_bfd_xcoff_bfd_final_link,
_bfd_generic_link_split_section,
bfd_generic_gc_sections,
diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c
index 9b653e62b91..4d618c1acc2 100644
--- a/bfd/coff64-rs6000.c
+++ b/bfd/coff64-rs6000.c
@@ -2800,6 +2800,7 @@ const bfd_target rs6000coff64_vec =
_bfd_generic_link_hash_table_free,
_bfd_xcoff_bfd_link_add_symbols,
_bfd_generic_link_just_syms,
+ _bfd_generic_copy_link_hash_symbol_type,
_bfd_xcoff_bfd_final_link,
_bfd_generic_link_split_section,
bfd_generic_gc_sections,
@@ -3054,6 +3055,7 @@ const bfd_target aix5coff64_vec =
_bfd_generic_link_hash_table_free,
_bfd_xcoff_bfd_link_add_symbols,
_bfd_generic_link_just_syms,
+ _bfd_generic_copy_link_hash_symbol_type,
_bfd_xcoff_bfd_final_link,
_bfd_generic_link_split_section,
bfd_generic_gc_sections,
diff --git a/bfd/coffcode.h b/bfd/coffcode.h
index 19f4159ac31..55c54deb77a 100644
--- a/bfd/coffcode.h
+++ b/bfd/coffcode.h
@@ -5328,6 +5328,8 @@ dummy_reloc16_extra_cases (bfd *abfd ATTRIBUTE_UNUSED,
#endif /* ! defined (coff_relocate_section) */
#define coff_bfd_link_just_syms _bfd_generic_link_just_syms
+#define coff_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define coff_bfd_link_split_section _bfd_generic_link_split_section
#ifndef coff_start_final_link
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index 7cc420c7a8f..daa2b62d9a5 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -1751,6 +1751,8 @@ extern asection *_bfd_elf_check_kept_section
(asection *, struct bfd_link_info *);
extern void _bfd_elf_link_just_syms
(asection *, struct bfd_link_info *);
+extern void _bfd_elf_copy_link_hash_symbol_type
+ (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
extern bfd_boolean _bfd_elf_copy_private_header_data
(bfd *, bfd *);
extern bfd_boolean _bfd_elf_copy_private_symbol_data
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 0153411ae85..8e29154e6e3 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -12596,3 +12596,15 @@ _bfd_elf_make_dynamic_reloc_section (asection * sec,
return reloc_sec;
}
+
+/* Copy the ELF symbol type associated with a linker hash entry. */
+void
+_bfd_elf_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_hash_entry * hdest,
+ struct bfd_link_hash_entry * hsrc)
+{
+ struct elf_link_hash_entry *ehdest = (struct elf_link_hash_entry *)hdest;
+ struct elf_link_hash_entry *ehsrc = (struct elf_link_hash_entry *)hsrc;
+
+ ehdest->type = ehsrc->type;
+}
diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h
index 413f273f8b9..ebce6a8f07a 100644
--- a/bfd/elfxx-target.h
+++ b/bfd/elfxx-target.h
@@ -260,6 +260,11 @@
#define bfd_elfNN_bfd_link_just_syms _bfd_elf_link_just_syms
#endif
+#ifndef bfd_elfNN_bfd_copy_link_hash_symbol_type
+#define bfd_elfNN_bfd_copy_link_hash_symbol_type \
+ _bfd_elf_copy_link_hash_symbol_type
+#endif
+
#ifndef bfd_elfNN_bfd_link_split_section
#define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section
#endif
diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c
index 2059d9cafc1..95d9775cf7b 100644
--- a/bfd/i386msdos.c
+++ b/bfd/i386msdos.c
@@ -153,6 +153,8 @@ msdos_set_section_contents (bfd *abfd,
#define msdos_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define msdos_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define msdos_bfd_link_just_syms _bfd_generic_link_just_syms
+#define msdos_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define msdos_bfd_final_link _bfd_generic_final_link
#define msdos_bfd_link_split_section _bfd_generic_link_split_section
#define msdos_set_arch_mach _bfd_generic_set_arch_mach
diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c
index 4c33a6e67ec..a5e89208df0 100644
--- a/bfd/i386os9k.c
+++ b/bfd/i386os9k.c
@@ -177,6 +177,8 @@ os9k_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define os9k_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define os9k_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define os9k_bfd_link_just_syms _bfd_generic_link_just_syms
+#define os9k_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define os9k_bfd_final_link _bfd_generic_final_link
#define os9k_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/ieee.c b/bfd/ieee.c
index 1fecf5ae325..68bdd5ed57a 100644
--- a/bfd/ieee.c
+++ b/bfd/ieee.c
@@ -3775,6 +3775,8 @@ ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define ieee_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define ieee_bfd_link_just_syms _bfd_generic_link_just_syms
+#define ieee_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define ieee_bfd_final_link _bfd_generic_final_link
#define ieee_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/ihex.c b/bfd/ihex.c
index aaad6d7b46d..6a9816c0b5f 100644
--- a/bfd/ihex.c
+++ b/bfd/ihex.c
@@ -939,6 +939,8 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define ihex_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define ihex_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define ihex_bfd_link_just_syms _bfd_generic_link_just_syms
+#define ihex_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define ihex_bfd_final_link _bfd_generic_final_link
#define ihex_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
index 2e441db7e7d..8c6f9b6321d 100644
--- a/bfd/libbfd-in.h
+++ b/bfd/libbfd-in.h
@@ -410,6 +410,9 @@ extern bfd_boolean _bfd_generic_set_section_contents
((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
#define _bfd_nolink_bfd_link_just_syms \
((void (*) (asection *, struct bfd_link_info *)) bfd_void)
+#define _bfd_nolink_bfd_copy_link_hash_symbol_type \
+ ((void (*) (bfd *, struct bfd_link_hash_entry *, \
+ struct bfd_link_hash_entry *)) bfd_void)
#define _bfd_nolink_bfd_final_link \
((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
#define _bfd_nolink_bfd_link_split_section \
@@ -524,6 +527,10 @@ extern bfd_boolean _bfd_generic_link_add_one_symbol
extern void _bfd_generic_link_just_syms
(asection *, struct bfd_link_info *);
+/* Generic routine that does nothing. */
+extern void _bfd_generic_copy_link_hash_symbol_type
+ (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+
/* Generic link routine. */
extern bfd_boolean _bfd_generic_final_link
(bfd *, struct bfd_link_info *);
diff --git a/bfd/libbfd.h b/bfd/libbfd.h
index 7fe65789bd7..8146ef90116 100644
--- a/bfd/libbfd.h
+++ b/bfd/libbfd.h
@@ -415,6 +415,9 @@ extern bfd_boolean _bfd_generic_set_section_contents
((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
#define _bfd_nolink_bfd_link_just_syms \
((void (*) (asection *, struct bfd_link_info *)) bfd_void)
+#define _bfd_nolink_bfd_copy_link_hash_symbol_type \
+ ((void (*) (bfd *, struct bfd_link_hash_entry *, \
+ struct bfd_link_hash_entry *)) bfd_void)
#define _bfd_nolink_bfd_final_link \
((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
#define _bfd_nolink_bfd_link_split_section \
@@ -529,6 +532,10 @@ extern bfd_boolean _bfd_generic_link_add_one_symbol
extern void _bfd_generic_link_just_syms
(asection *, struct bfd_link_info *);
+/* Generic routine that does nothing. */
+extern void _bfd_generic_copy_link_hash_symbol_type
+ (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+
/* Generic link routine. */
extern bfd_boolean _bfd_generic_final_link
(bfd *, struct bfd_link_info *);
diff --git a/bfd/libecoff.h b/bfd/libecoff.h
index 0e7ea855c55..75c65e7fbe0 100644
--- a/bfd/libecoff.h
+++ b/bfd/libecoff.h
@@ -315,6 +315,8 @@ extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create
extern bfd_boolean _bfd_ecoff_bfd_link_add_symbols
(bfd *, struct bfd_link_info *);
#define _bfd_ecoff_bfd_link_just_syms _bfd_generic_link_just_syms
+#define _bfd_ecoff_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
extern bfd_boolean _bfd_ecoff_bfd_final_link
(bfd *, struct bfd_link_info *);
diff --git a/bfd/linker.c b/bfd/linker.c
index 1163a5591c1..76bc70af093 100644
--- a/bfd/linker.c
+++ b/bfd/linker.c
@@ -797,6 +797,17 @@ _bfd_generic_link_just_syms (asection *sec,
sec->output_offset = sec->vma;
}
+/* Copy the type of a symbol assiciated with a linker hast table entry.
+ Override this so that symbols created in linker scripts get their
+ type from the RHS of the assignment.
+ The default implementation does nothing. */
+void
+_bfd_generic_copy_link_hash_symbol_type (bfd *abfd ATTRIBUTE_UNUSED,
+ struct bfd_link_hash_entry * hdest ATTRIBUTE_UNUSED,
+ struct bfd_link_hash_entry * hsrc ATTRIBUTE_UNUSED)
+{
+}
+
/* Add symbols from an object file to the global hash table. */
static bfd_boolean
diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c
index c3084673e99..2a30b2ed1f6 100644
--- a/bfd/mach-o-target.c
+++ b/bfd/mach-o-target.c
@@ -53,6 +53,8 @@
#define bfd_mach_o_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define bfd_mach_o_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define bfd_mach_o_bfd_link_just_syms _bfd_generic_link_just_syms
+#define bfd_mach_o_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define bfd_mach_o_bfd_final_link _bfd_generic_final_link
#define bfd_mach_o_bfd_link_split_section _bfd_generic_link_split_section
#define bfd_mach_o_set_arch_mach bfd_default_set_arch_mach
diff --git a/bfd/mmo.c b/bfd/mmo.c
index 39cc2699e06..eee27c3a269 100644
--- a/bfd/mmo.c
+++ b/bfd/mmo.c
@@ -3199,6 +3199,8 @@ mmo_write_object_contents (bfd *abfd)
#define mmo_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define mmo_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define mmo_bfd_link_just_syms _bfd_generic_link_just_syms
+#define mmo_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define mmo_bfd_final_link _bfd_generic_final_link
#define mmo_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/nlm-target.h b/bfd/nlm-target.h
index 809019066a8..add69372d23 100644
--- a/bfd/nlm-target.h
+++ b/bfd/nlm-target.h
@@ -54,6 +54,8 @@
#define nlm_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define nlm_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define nlm_bfd_link_just_syms _bfd_generic_link_just_syms
+#define nlm_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define nlm_bfd_final_link _bfd_generic_final_link
#define nlm_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/oasys.c b/bfd/oasys.c
index aad22a12ff3..17714ec2078 100644
--- a/bfd/oasys.c
+++ b/bfd/oasys.c
@@ -1203,6 +1203,8 @@ oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED,
#define oasys_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define oasys_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define oasys_bfd_link_just_syms _bfd_generic_link_just_syms
+#define oasys_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define oasys_bfd_final_link _bfd_generic_final_link
#define oasys_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/pef.c b/bfd/pef.c
index 4fcae1e5435..b7156f06234 100644
--- a/bfd/pef.c
+++ b/bfd/pef.c
@@ -57,6 +57,8 @@
#define bfd_pef_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define bfd_pef_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define bfd_pef_bfd_link_just_syms _bfd_generic_link_just_syms
+#define bfd_pef_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define bfd_pef_bfd_final_link _bfd_generic_final_link
#define bfd_pef_bfd_link_split_section _bfd_generic_link_split_section
#define bfd_pef_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c
index 0d9a3bcdfac..853ee88fcf8 100644
--- a/bfd/ppcboot.c
+++ b/bfd/ppcboot.c
@@ -480,6 +480,8 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg)
#define ppcboot_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define ppcboot_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define ppcboot_bfd_link_just_syms _bfd_generic_link_just_syms
+#define ppcboot_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define ppcboot_bfd_final_link _bfd_generic_final_link
#define ppcboot_bfd_link_split_section _bfd_generic_link_split_section
#define ppcboot_get_section_contents_in_window \
diff --git a/bfd/som.c b/bfd/som.c
index 0fb8e1de37b..f259da80550 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -6343,6 +6343,8 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
#define som_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define som_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define som_bfd_link_just_syms _bfd_generic_link_just_syms
+#define som_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define som_bfd_final_link _bfd_generic_final_link
#define som_bfd_gc_sections bfd_generic_gc_sections
#define som_bfd_merge_sections bfd_generic_merge_sections
diff --git a/bfd/srec.c b/bfd/srec.c
index d66fa6d99d8..1251a7e93c9 100644
--- a/bfd/srec.c
+++ b/bfd/srec.c
@@ -1261,6 +1261,8 @@ srec_print_symbol (bfd *abfd,
#define srec_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define srec_bfd_link_just_syms _bfd_generic_link_just_syms
+#define srec_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define srec_bfd_final_link _bfd_generic_final_link
#define srec_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/targets.c b/bfd/targets.c
index 31ec42f4784..d9811a80109 100644
--- a/bfd/targets.c
+++ b/bfd/targets.c
@@ -436,6 +436,7 @@ BFD_JUMP_TABLE macros.
. NAME##_bfd_link_hash_table_free, \
. NAME##_bfd_link_add_symbols, \
. NAME##_bfd_link_just_syms, \
+. NAME##_bfd_copy_link_hash_symbol_type, \
. NAME##_bfd_final_link, \
. NAME##_bfd_link_split_section, \
. NAME##_bfd_gc_sections, \
@@ -467,6 +468,12 @@ BFD_JUMP_TABLE macros.
. {* Indicate that we are only retrieving symbol values from this section. *}
. void (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
.
+. {* Copy the symbol type of a linker hash table entry. *}
+.#define bfd_copy_link_hash_symbol_type(b, t, f) \
+. BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
+. void (*_bfd_copy_link_hash_symbol_type)
+. (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
+.
. {* Do a link based on the link_order structures attached to each
. section of the BFD. *}
. bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
diff --git a/bfd/tekhex.c b/bfd/tekhex.c
index 0be3ab96757..bc3c9ca9bc5 100644
--- a/bfd/tekhex.c
+++ b/bfd/tekhex.c
@@ -952,6 +952,8 @@ tekhex_print_symbol (bfd *abfd,
#define tekhex_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define tekhex_bfd_link_just_syms _bfd_generic_link_just_syms
+#define tekhex_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define tekhex_bfd_final_link _bfd_generic_final_link
#define tekhex_bfd_link_split_section _bfd_generic_link_split_section
#define tekhex_get_section_contents_in_window _bfd_generic_get_section_contents_in_window
diff --git a/bfd/versados.c b/bfd/versados.c
index 8fbc17b8d3c..f3de87188bb 100644
--- a/bfd/versados.c
+++ b/bfd/versados.c
@@ -813,6 +813,8 @@ versados_canonicalize_reloc (bfd *abfd,
#define versados_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define versados_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define versados_bfd_link_just_syms _bfd_generic_link_just_syms
+#define versados_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define versados_bfd_final_link _bfd_generic_final_link
#define versados_bfd_link_split_section _bfd_generic_link_split_section
diff --git a/bfd/vms.c b/bfd/vms.c
index 61f485ed683..76b59b38091 100644
--- a/bfd/vms.c
+++ b/bfd/vms.c
@@ -140,6 +140,8 @@ static bfd_boolean vms_bfd_set_private_flags (bfd *abfd, flagword flags);
#define vms_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
#define vms_make_empty_symbol _bfd_generic_make_empty_symbol
#define vms_bfd_link_just_syms _bfd_generic_link_just_syms
+#define vms_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define vms_bfd_is_group_section bfd_generic_is_group_section
#define vms_bfd_discard_group bfd_generic_discard_group
#define vms_section_already_linked _bfd_generic_section_already_linked
diff --git a/bfd/xsym.c b/bfd/xsym.c
index 706310ac616..dd1ffd77731 100644
--- a/bfd/xsym.c
+++ b/bfd/xsym.c
@@ -51,6 +51,8 @@
#define bfd_sym_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
#define bfd_sym_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define bfd_sym_bfd_link_just_syms _bfd_generic_link_just_syms
+#define bfd_sym_bfd_copy_link_hash_symbol_type \
+ _bfd_generic_copy_link_hash_symbol_type
#define bfd_sym_bfd_final_link _bfd_generic_final_link
#define bfd_sym_bfd_link_split_section _bfd_generic_link_split_section
#define bfd_sym_get_section_contents_in_window _bfd_generic_get_section_contents_in_window