diff options
author | Paul Brook <paul@codesourcery.com> | 2009-11-23 14:41:33 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2009-11-23 14:41:33 +0000 |
commit | 1338dd10efb7f5b6ab29142fa07004ff900a20b4 (patch) | |
tree | 2a33ea567499e5224c3204234a776f05784b93a7 /bfd | |
parent | * cgen-engine.h (EXTRACT_MSB0_SINT): Renamed from EXTRACT_MSB0_INT. (diff) | |
download | binutils-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/ChangeLog | 40 | ||||
-rw-r--r-- | bfd/aout-adobe.c | 2 | ||||
-rw-r--r-- | bfd/aout-target.h | 4 | ||||
-rw-r--r-- | bfd/aout-tic30.c | 4 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/binary.c | 2 | ||||
-rw-r--r-- | bfd/bout.c | 2 | ||||
-rw-r--r-- | bfd/coff-rs6000.c | 2 | ||||
-rw-r--r-- | bfd/coff64-rs6000.c | 2 | ||||
-rw-r--r-- | bfd/coffcode.h | 2 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 2 | ||||
-rw-r--r-- | bfd/elflink.c | 12 | ||||
-rw-r--r-- | bfd/elfxx-target.h | 5 | ||||
-rw-r--r-- | bfd/i386msdos.c | 2 | ||||
-rw-r--r-- | bfd/i386os9k.c | 2 | ||||
-rw-r--r-- | bfd/ieee.c | 2 | ||||
-rw-r--r-- | bfd/ihex.c | 2 | ||||
-rw-r--r-- | bfd/libbfd-in.h | 7 | ||||
-rw-r--r-- | bfd/libbfd.h | 7 | ||||
-rw-r--r-- | bfd/libecoff.h | 2 | ||||
-rw-r--r-- | bfd/linker.c | 11 | ||||
-rw-r--r-- | bfd/mach-o-target.c | 2 | ||||
-rw-r--r-- | bfd/mmo.c | 2 | ||||
-rw-r--r-- | bfd/nlm-target.h | 2 | ||||
-rw-r--r-- | bfd/oasys.c | 2 | ||||
-rw-r--r-- | bfd/pef.c | 2 | ||||
-rw-r--r-- | bfd/ppcboot.c | 2 | ||||
-rw-r--r-- | bfd/som.c | 2 | ||||
-rw-r--r-- | bfd/srec.c | 2 | ||||
-rw-r--r-- | bfd/targets.c | 7 | ||||
-rw-r--r-- | bfd/tekhex.c | 2 | ||||
-rw-r--r-- | bfd/versados.c | 2 | ||||
-rw-r--r-- | bfd/vms.c | 2 | ||||
-rw-r--r-- | bfd/xsym.c | 2 |
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 |