diff options
author | Alan Modra <amodra@bigpond.net.au> | 2002-05-15 00:18:58 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2002-05-15 00:18:58 +0000 |
commit | 9f0c321d837daed1a1ca51925635fb3b9838138a (patch) | |
tree | 8fcd6155177705c25be688de1680dfca53817c27 | |
parent | d9ad6ef9a106a1e1309e80ab95ab5345b4b273f2 (diff) | |
download | gdb-9f0c321d837daed1a1ca51925635fb3b9838138a.tar.gz |
Fix ld --just-symbols
* aix5ppc-core.c: Warning fixes.
* aout-adobe.c (aout_32_bfd_link_just_syms): Define.
* aout-target.h (MY_bfd_link_just_syms): Define.
* aout-tic30.c (MY_bfd_link_just_syms): Define.
* bfd.c (bfd_link_just_syms): Define.
* binary.c (binary_bfd_link_just_syms): Define.
* bout.c (b_out_bfd_link_just_syms): Define.
* coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Update initializer.
* coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Likewise.
* coffcode.h (coff_bfd_link_just_syms): Define.
* elf-bfd.h (enum elf_link_info_type): Add ELF_INFO_TYPE_JUST_SYMS.
(elf_discarded_section): Check for ELF_INFO_TYPE_JUST_SYMS.
(_bfd_elf_link_just_syms): Declare.
* elf.c (_bfd_elf_link_just_syms): New function.
* elf-eh-frame.c (_bfd_elf_maybe_strip_eh_frame_hdr): Check that
sections haven't already been discarded by the linker.
* elflink.h (elf_link_add_object_symbols): Likewise for stab
sections and SEC_MERGE sections.
(elf_bfd_discard_info): Similarly here.
* elfxx-target.h (bfd_elfNN_bfd_link_just_syms): Define.
* i386msdos.c (msdos_bfd_link_just_syms): Define.
* i386os9k.c (os9k_bfd_link_just_syms): Define.
* ieee.c (ieee_bfd_link_just_syms): Define.
* ihex.c (ihex_bfd_link_just_syms): Define.
* libbfd-in.h (_bfd_nolink_bfd_link_just_syms): Define.
(_bfd_generic_link_just_syms): Declare.
* libecoff.h (_bfd_ecoff_bfd_link_just_syms): Define.
* linker.c (_bfd_generic_link_just_syms): New function.
* mmo.c (mmo_bfd_link_just_syms): Define.
* nlm-target.h (nlm_bfd_link_just_syms): Define.
* oasys.c (oasys_bfd_link_just_syms): Define.
* ppcboot.c (ppcboot_bfd_link_just_syms): Define.
* som.c (som_bfd_link_just_syms): Define.
* srec.c (srec_bfd_link_just_syms): Define.
* targets.c (struct bfd_target): Add _bfd_link_just_syms.
(BFD_JUMP_TABLE_LINK): And here.
* tekhex.c (tekhex_bfd_link_just_syms): Define.
* versados.c (versados_bfd_link_just_syms): Define.
* vms.c (vms_bfd_link_just_syms): Define.
* libbfd.h: Regenerate.
* bfd-in2.h: Regenerate.
-rw-r--r-- | bfd/ChangeLog | 44 | ||||
-rw-r--r-- | bfd/aix5ppc-core.c | 10 | ||||
-rw-r--r-- | bfd/aout-adobe.c | 1 | ||||
-rw-r--r-- | bfd/aout-target.h | 3 | ||||
-rw-r--r-- | bfd/aout-tic30.c | 3 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/bfd.c | 3 | ||||
-rw-r--r-- | bfd/binary.c | 1 | ||||
-rw-r--r-- | bfd/bout.c | 1 | ||||
-rw-r--r-- | bfd/coff-rs6000.c | 6 | ||||
-rw-r--r-- | bfd/coff64-rs6000.c | 6 | ||||
-rw-r--r-- | bfd/coffcode.h | 1 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 8 | ||||
-rw-r--r-- | bfd/elf-eh-frame.c | 4 | ||||
-rw-r--r-- | bfd/elf.c | 13 | ||||
-rw-r--r-- | bfd/elflink.h | 19 | ||||
-rw-r--r-- | bfd/elfxx-target.h | 5 | ||||
-rw-r--r-- | bfd/i386msdos.c | 1 | ||||
-rw-r--r-- | bfd/i386os9k.c | 1 | ||||
-rw-r--r-- | bfd/ieee.c | 1 | ||||
-rw-r--r-- | bfd/ihex.c | 1 | ||||
-rw-r--r-- | bfd/libbfd-in.h | 8 | ||||
-rw-r--r-- | bfd/libbfd.h | 8 | ||||
-rw-r--r-- | bfd/libecoff.h | 1 | ||||
-rw-r--r-- | bfd/linker.c | 13 | ||||
-rw-r--r-- | bfd/mmo.c | 1 | ||||
-rw-r--r-- | bfd/nlm-target.h | 1 | ||||
-rw-r--r-- | bfd/oasys.c | 1 | ||||
-rw-r--r-- | bfd/ppcboot.c | 1 | ||||
-rw-r--r-- | bfd/som.c | 1 | ||||
-rw-r--r-- | bfd/srec.c | 1 | ||||
-rw-r--r-- | bfd/targets.c | 4 | ||||
-rw-r--r-- | bfd/tekhex.c | 1 | ||||
-rw-r--r-- | bfd/versados.c | 1 | ||||
-rw-r--r-- | bfd/vms.c | 1 |
35 files changed, 160 insertions, 22 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index e1f12ccbad8..54028e81471 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,47 @@ +2002-05-15 Alan Modra <amodra@bigpond.net.au> + + * aix5ppc-core.c: Warning fixes. + * aout-adobe.c (aout_32_bfd_link_just_syms): Define. + * aout-target.h (MY_bfd_link_just_syms): Define. + * aout-tic30.c (MY_bfd_link_just_syms): Define. + * bfd.c (bfd_link_just_syms): Define. + * binary.c (binary_bfd_link_just_syms): Define. + * bout.c (b_out_bfd_link_just_syms): Define. + * coff-rs6000.c (rs6000coff_vec, pmac_xcoff_vec): Update initializer. + * coff64-rs6000.c (rs6000coff64_vec, aix5coff64_vec): Likewise. + * coffcode.h (coff_bfd_link_just_syms): Define. + * elf-bfd.h (enum elf_link_info_type): Add ELF_INFO_TYPE_JUST_SYMS. + (elf_discarded_section): Check for ELF_INFO_TYPE_JUST_SYMS. + (_bfd_elf_link_just_syms): Declare. + * elf.c (_bfd_elf_link_just_syms): New function. + * elf-eh-frame.c (_bfd_elf_maybe_strip_eh_frame_hdr): Check that + sections haven't already been discarded by the linker. + * elflink.h (elf_link_add_object_symbols): Likewise for stab + sections and SEC_MERGE sections. + (elf_bfd_discard_info): Similarly here. + * elfxx-target.h (bfd_elfNN_bfd_link_just_syms): Define. + * i386msdos.c (msdos_bfd_link_just_syms): Define. + * i386os9k.c (os9k_bfd_link_just_syms): Define. + * ieee.c (ieee_bfd_link_just_syms): Define. + * ihex.c (ihex_bfd_link_just_syms): Define. + * libbfd-in.h (_bfd_nolink_bfd_link_just_syms): Define. + (_bfd_generic_link_just_syms): Declare. + * libecoff.h (_bfd_ecoff_bfd_link_just_syms): Define. + * linker.c (_bfd_generic_link_just_syms): New function. + * mmo.c (mmo_bfd_link_just_syms): Define. + * nlm-target.h (nlm_bfd_link_just_syms): Define. + * oasys.c (oasys_bfd_link_just_syms): Define. + * ppcboot.c (ppcboot_bfd_link_just_syms): Define. + * som.c (som_bfd_link_just_syms): Define. + * srec.c (srec_bfd_link_just_syms): Define. + * targets.c (struct bfd_target): Add _bfd_link_just_syms. + (BFD_JUMP_TABLE_LINK): And here. + * tekhex.c (tekhex_bfd_link_just_syms): Define. + * versados.c (versados_bfd_link_just_syms): Define. + * vms.c (vms_bfd_link_just_syms): Define. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + 2002-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de> * elf32-mips.c: Remove superfluous definitions copied from diff --git a/bfd/aix5ppc-core.c b/bfd/aix5ppc-core.c index 5ba182f735b..12f4917b702 100644 --- a/bfd/aix5ppc-core.c +++ b/bfd/aix5ppc-core.c @@ -328,7 +328,7 @@ int xcoff64_core_file_failing_signal PARAMS ((bfd *)); const bfd_target * xcoff64_core_p (abfd) - bfd *abfd; + bfd *abfd ATTRIBUTE_UNUSED; { bfd_set_error (bfd_error_wrong_format); return 0; @@ -336,22 +336,22 @@ xcoff64_core_p (abfd) boolean xcoff64_core_file_matches_executable_p (core_bfd, exec_bfd) - bfd *core_bfd; - bfd *exec_bfd; + bfd *core_bfd ATTRIBUTE_UNUSED; + bfd *exec_bfd ATTRIBUTE_UNUSED; { return false; } char * xcoff64_core_file_failing_command (abfd) - bfd *abfd; + bfd *abfd ATTRIBUTE_UNUSED; { return 0; } int xcoff64_core_file_failing_signal (abfd) - bfd *abfd; + bfd *abfd ATTRIBUTE_UNUSED; { return 0; } diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c index 01f26914d2e..c11c504c584 100644 --- a/bfd/aout-adobe.c +++ b/bfd/aout-adobe.c @@ -515,6 +515,7 @@ aout_adobe_sizeof_headers (ignore_abfd, ignore) #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_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 30c735a3f8f..15a25687692 100644 --- a/bfd/aout-target.h +++ b/bfd/aout-target.h @@ -534,6 +534,9 @@ MY_bfd_final_link (abfd, info) #ifndef MY_bfd_link_add_symbols #define MY_bfd_link_add_symbols NAME(aout,link_add_symbols) #endif +#ifndef MY_bfd_link_just_syms +#define MY_bfd_link_just_syms _bfd_generic_link_just_syms +#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 58ef3ea9f8a..e00c1379e87 100644 --- a/bfd/aout-tic30.c +++ b/bfd/aout-tic30.c @@ -986,6 +986,9 @@ tic30_aout_set_arch_mach (abfd, arch, machine) #ifndef MY_bfd_link_add_symbols #define MY_bfd_link_add_symbols NAME(aout,link_add_symbols) #endif +#ifndef MY_bfd_link_just_syms +#define MY_bfd_link_just_syms _bfd_generic_link_just_syms +#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 774d4391557..0dfc073b03b 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -3510,6 +3510,9 @@ bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags)); #define bfd_link_add_symbols(abfd, info) \ BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) +#define bfd_link_just_syms(sec, info) \ + BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) + #define bfd_final_link(abfd, info) \ BFD_SEND (abfd, _bfd_final_link, (abfd, info)) @@ -3834,6 +3837,7 @@ CONCAT2 (NAME,_bfd_relax_section), \ CONCAT2 (NAME,_bfd_link_hash_table_create), \ CONCAT2 (NAME,_bfd_link_hash_table_free), \ CONCAT2 (NAME,_bfd_link_add_symbols), \ +CONCAT2 (NAME,_bfd_link_just_syms), \ CONCAT2 (NAME,_bfd_final_link), \ CONCAT2 (NAME,_bfd_link_split_section), \ CONCAT2 (NAME,_bfd_gc_sections), \ @@ -3856,6 +3860,9 @@ CONCAT2 (NAME,_bfd_merge_sections) /* Add symbols from this object file into the hash table. */ boolean (*_bfd_link_add_symbols) PARAMS ((bfd *, struct bfd_link_info *)); + /* Indicate that we are only retrieving symbol values from this section. */ + void (*_bfd_link_just_syms) PARAMS ((asection *, struct bfd_link_info *)); + /* Do a link based on the link_order structures attached to each section of the BFD. */ boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *)); diff --git a/bfd/bfd.c b/bfd/bfd.c index c1135c817dd..9de4d53d4d1 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -1195,6 +1195,9 @@ DESCRIPTION .#define bfd_link_add_symbols(abfd, info) \ . BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info)) . +.#define bfd_link_just_syms(sec, info) \ +. BFD_SEND (abfd, _bfd_link_just_syms, (sec, info)) +. .#define bfd_final_link(abfd, info) \ . BFD_SEND (abfd, _bfd_final_link, (abfd, info)) . diff --git a/bfd/binary.c b/bfd/binary.c index 3207e89fceb..3a0390131e4 100644 --- a/bfd/binary.c +++ b/bfd/binary.c @@ -339,6 +339,7 @@ binary_sizeof_headers (abfd, exec) #define binary_bfd_merge_sections bfd_generic_merge_sections #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_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 0e070adcbf1..d02364ee77c 100644 --- a/bfd/bout.c +++ b/bfd/bout.c @@ -1451,6 +1451,7 @@ b_out_bfd_get_relocated_section_contents (output_bfd, link_info, link_order, #define b_out_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 10ef5dfd777..f560c7f1968 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -4167,7 +4167,8 @@ const bfd_target rs6000coff_vec = _bfd_xcoff_bfd_link_hash_table_create, /* _bfd_link_hash_table_create */ _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_xcoff_bfd_final_link, /* _bfd_filnal_link */ + _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ + _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ _bfd_generic_link_split_section, /* _bfd_link_split_section */ bfd_generic_gc_sections, /* _bfd_gc_sections */ bfd_generic_merge_sections, /* _bfd_merge_sections */ @@ -4428,7 +4429,8 @@ const bfd_target pmac_xcoff_vec = _bfd_xcoff_bfd_link_hash_table_create, /* _bfd_link_hash_table_create */ _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_xcoff_bfd_final_link, /* _bfd_filnal_link */ + _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ + _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ _bfd_generic_link_split_section, /* _bfd_link_split_section */ bfd_generic_gc_sections, /* _bfd_gc_sections */ bfd_generic_merge_sections, /* _bfd_merge_sections */ diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index 931a914cbf6..5ed5be4d198 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -2712,7 +2712,8 @@ const bfd_target rs6000coff64_vec = _bfd_xcoff_bfd_link_hash_table_create,/* _bfd_link_hash_table_create */ _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_xcoff_bfd_final_link, /* _bfd_filnal_link */ + _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ + _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ _bfd_generic_link_split_section, /* _bfd_link_split_section */ bfd_generic_gc_sections, /* _bfd_gc_sections */ bfd_generic_merge_sections, /* _bfd_merge_sections */ @@ -2964,7 +2965,8 @@ const bfd_target aix5coff64_vec = _bfd_xcoff_bfd_link_hash_table_create,/* _bfd_link_hash_table_create */ _bfd_generic_link_hash_table_free, /* _bfd_link_hash_table_free */ _bfd_xcoff_bfd_link_add_symbols, /* _bfd_link_add_symbols */ - _bfd_xcoff_bfd_final_link, /* _bfd_filnal_link */ + _bfd_generic_link_just_syms, /* _bfd_link_just_syms */ + _bfd_xcoff_bfd_final_link, /* _bfd_final_link */ _bfd_generic_link_split_section, /* _bfd_link_split_section */ bfd_generic_gc_sections, /* _bfd_gc_sections */ bfd_generic_merge_sections, /* _bfd_merge_sections */ diff --git a/bfd/coffcode.h b/bfd/coffcode.h index eadb8984be8..cea516f6172 100644 --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -5175,6 +5175,7 @@ dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr, #define coff_bfd_final_link _bfd_generic_final_link #endif /* ! defined (coff_relocate_section) */ +#define coff_bfd_link_just_syms _bfd_generic_link_just_syms #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 5959077d536..06661d53883 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -230,6 +230,7 @@ enum elf_link_info_type ELF_INFO_TYPE_MERGE, ELF_INFO_TYPE_EH_FRAME, ELF_INFO_TYPE_EH_FRAME_HDR, + ELF_INFO_TYPE_JUST_SYMS, ELF_INFO_TYPE_LAST }; @@ -908,7 +909,8 @@ struct bfd_elf_section_data #define elf_discarded_section(sec) \ (!bfd_is_abs_section(sec) \ && bfd_is_abs_section((sec)->output_section) \ - && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_MERGE) + && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \ + && elf_section_data (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS) #define get_elf_backend_data(abfd) \ ((struct elf_backend_data *) (abfd)->xvec->backend_data) @@ -1226,10 +1228,10 @@ extern boolean _bfd_elf_link_hash_table_init const char *))); extern boolean _bfd_elf_slurp_version_tables PARAMS ((bfd *)); - extern boolean _bfd_elf_merge_sections PARAMS ((bfd *, struct bfd_link_info *)); - +extern void _bfd_elf_link_just_syms + PARAMS ((asection *, struct bfd_link_info *)); extern boolean _bfd_elf_copy_private_symbol_data PARAMS ((bfd *, asymbol *, bfd *, asymbol *)); extern boolean _bfd_elf_copy_private_section_data diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 6a23edb2c42..6f10cd7aabe 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -787,7 +787,7 @@ _bfd_elf_maybe_strip_eh_frame_hdr (info) struct eh_frame_hdr_info *hdr_info; sec = bfd_get_section_by_name (elf_hash_table (info)->dynobj, ".eh_frame_hdr"); - if (sec == NULL) + if (sec == NULL || bfd_is_abs_section (sec->output_section)) return true; hdr_info @@ -805,7 +805,7 @@ _bfd_elf_maybe_strip_eh_frame_hdr (info) /* Count only sections which have at least a single CIE or FDE. There cannot be any CIE or FDE <= 8 bytes. */ o = bfd_get_section_by_name (abfd, ".eh_frame"); - if (o && o->_raw_size > 8) + if (o && o->_raw_size > 8 && !bfd_is_abs_section (o->output_section)) break; } diff --git a/bfd/elf.c b/bfd/elf.c index f8fdbd2a9fd..c3339f93b7a 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -814,6 +814,19 @@ _bfd_elf_merge_sections (abfd, info) merge_sections_remove_hook); return true; } + +void +_bfd_elf_link_just_syms (sec, info) + asection *sec; + struct bfd_link_info *info; +{ + sec->output_section = bfd_abs_section_ptr; + sec->output_offset = sec->vma; + if (!is_elf_hash_table (info)) + return; + + elf_section_data (sec)->sec_info_type = ELF_INFO_TYPE_JUST_SYMS; +} /* Copy the program header and other data from one object module to another. */ diff --git a/bfd/elflink.h b/bfd/elflink.h index bfe63742522..5a818bbcee7 100644 --- a/bfd/elflink.h +++ b/bfd/elflink.h @@ -2258,7 +2258,9 @@ elf_link_add_object_symbols (abfd, info) asection *stab, *stabstr; stab = bfd_get_section_by_name (abfd, ".stab"); - if (stab != NULL && !(stab->flags & SEC_MERGE)) + if (stab != NULL + && (stab->flags & SEC_MERGE) == 0 + && !bfd_is_abs_section (stab->output_section)) { stabstr = bfd_get_section_by_name (abfd, ".stabstr"); @@ -2284,7 +2286,8 @@ elf_link_add_object_symbols (abfd, info) asection *s; for (s = abfd->sections; s != NULL; s = s->next) - if (s->flags & SEC_MERGE) + if ((s->flags & SEC_MERGE) != 0 + && !bfd_is_abs_section (s->output_section)) { struct bfd_elf_section_data *secdata; @@ -8267,11 +8270,19 @@ elf_bfd_discard_info (output_bfd, info) if (ehdr) { eh = bfd_get_section_by_name (abfd, ".eh_frame"); - if (eh && eh->_raw_size == 0) + if (eh && (eh->_raw_size == 0 + || bfd_is_abs_section (eh->output_section))) eh = NULL; } - stab = strip ? NULL : bfd_get_section_by_name (abfd, ".stab"); + stab = NULL; + if (!strip) + { + stab = bfd_get_section_by_name (abfd, ".stab"); + if (stab && (stab->_raw_size == 0 + || bfd_is_abs_section (stab->output_section))) + stab = NULL; + } if ((! stab || elf_section_data(stab)->sec_info_type != ELF_INFO_TYPE_STABS) && ! eh diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index 7d391d42e6e..08b680a9a84 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -194,6 +194,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define bfd_elfNN_bfd_final_link _bfd_generic_final_link #endif #endif /* ! defined (elf_backend_relocate_section) */ + +#ifndef bfd_elfNN_bfd_link_just_syms +#define bfd_elfNN_bfd_link_just_syms _bfd_elf_link_just_syms +#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 655ecfd65a4..0edb90e3486 100644 --- a/bfd/i386msdos.c +++ b/bfd/i386msdos.c @@ -176,6 +176,7 @@ msdos_set_section_contents (abfd, section, location, offset, count) #define msdos_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 099a7142fba..47f9ef3a1a8 100644 --- a/bfd/i386os9k.c +++ b/bfd/i386os9k.c @@ -332,6 +332,7 @@ os9k_sizeof_headers (ignore_abfd, ignore) #define os9k_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 cd56101aa13..8439f6daafb 100644 --- a/bfd/ieee.c +++ b/bfd/ieee.c @@ -4013,6 +4013,7 @@ ieee_bfd_debug_info_accumulate (abfd, section) #define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 0aad1649d52..cee736ace7d 100644 --- a/bfd/ihex.c +++ b/bfd/ihex.c @@ -980,6 +980,7 @@ ihex_sizeof_headers (abfd, exec) #define ihex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 68006fa463f..106ba8d9247 100644 --- a/bfd/libbfd-in.h +++ b/bfd/libbfd-in.h @@ -328,6 +328,8 @@ extern boolean _bfd_generic_set_section_contents ((void (*) PARAMS ((struct bfd_link_hash_table *))) bfd_void) #define _bfd_nolink_bfd_link_add_symbols \ ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) +#define _bfd_nolink_bfd_link_just_syms \ + ((void (*) PARAMS ((asection *, struct bfd_link_info *))) bfd_void) #define _bfd_nolink_bfd_final_link \ ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) #define _bfd_nolink_bfd_link_split_section \ @@ -410,8 +412,6 @@ extern boolean _bfd_generic_link_add_archive_symbols PARAMS ((bfd *, struct bfd_link_info *, boolean (*checkfn) (bfd *, struct bfd_link_info *, boolean *))); - - /* Forward declaration to avoid prototype errors. */ typedef struct bfd_link_hash_entry _bfd_link_hash_entry; @@ -421,6 +421,10 @@ extern boolean _bfd_generic_link_add_one_symbol asection *, bfd_vma, const char *, boolean copy, boolean constructor, struct bfd_link_hash_entry **)); +/* Generic routine to mark section as supplying symbols only. */ +extern void _bfd_generic_link_just_syms + PARAMS ((asection *, struct bfd_link_info *)); + /* Generic link routine. */ extern boolean _bfd_generic_final_link PARAMS ((bfd *, struct bfd_link_info *)); diff --git a/bfd/libbfd.h b/bfd/libbfd.h index cbe4973a669..2fe674c79fc 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -333,6 +333,8 @@ extern boolean _bfd_generic_set_section_contents ((void (*) PARAMS ((struct bfd_link_hash_table *))) bfd_void) #define _bfd_nolink_bfd_link_add_symbols \ ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) +#define _bfd_nolink_bfd_link_just_syms \ + ((void (*) PARAMS ((asection *, struct bfd_link_info *))) bfd_void) #define _bfd_nolink_bfd_final_link \ ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) #define _bfd_nolink_bfd_link_split_section \ @@ -415,8 +417,6 @@ extern boolean _bfd_generic_link_add_archive_symbols PARAMS ((bfd *, struct bfd_link_info *, boolean (*checkfn) (bfd *, struct bfd_link_info *, boolean *))); - - /* Forward declaration to avoid prototype errors. */ typedef struct bfd_link_hash_entry _bfd_link_hash_entry; @@ -426,6 +426,10 @@ extern boolean _bfd_generic_link_add_one_symbol asection *, bfd_vma, const char *, boolean copy, boolean constructor, struct bfd_link_hash_entry **)); +/* Generic routine to mark section as supplying symbols only. */ +extern void _bfd_generic_link_just_syms + PARAMS ((asection *, struct bfd_link_info *)); + /* Generic link routine. */ extern boolean _bfd_generic_final_link PARAMS ((bfd *, struct bfd_link_info *)); diff --git a/bfd/libecoff.h b/bfd/libecoff.h index c900ee8ddfd..eb90a8cddb9 100644 --- a/bfd/libecoff.h +++ b/bfd/libecoff.h @@ -333,6 +333,7 @@ extern struct bfd_link_hash_table *_bfd_ecoff_bfd_link_hash_table_create #define _bfd_ecoff_bfd_link_hash_table_free _bfd_generic_link_hash_table_free extern boolean _bfd_ecoff_bfd_link_add_symbols PARAMS ((bfd *, struct bfd_link_info *)); +#define _bfd_ecoff_bfd_link_just_syms _bfd_generic_link_just_syms extern boolean _bfd_ecoff_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *)); diff --git a/bfd/linker.c b/bfd/linker.c index b4b9f292b87..8d2287239ad 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -757,6 +757,19 @@ _bfd_generic_link_add_symbols_collect (abfd, info) return generic_link_add_symbols (abfd, info, true); } +/* Indicate that we are only retrieving symbol values from this + section. We want the symbols to act as though the values in the + file are absolute. */ + +void +_bfd_generic_link_just_syms (sec, info) + asection *sec; + struct bfd_link_info *info ATTRIBUTE_UNUSED; +{ + sec->output_section = bfd_abs_section_ptr; + sec->output_offset = sec->vma; +} + /* Add symbols from an object file to the global hash table. */ static boolean diff --git a/bfd/mmo.c b/bfd/mmo.c index fe70a18407b..94593830151 100644 --- a/bfd/mmo.c +++ b/bfd/mmo.c @@ -3247,6 +3247,7 @@ mmo_canonicalize_reloc (abfd, section, relptr, symbols) #define mmo_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 79877fe7cd0..e8f46261299 100644 --- a/bfd/nlm-target.h +++ b/bfd/nlm-target.h @@ -47,6 +47,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define nlm_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 4cadb6900ed..5c2bf5e1ceb 100644 --- a/bfd/oasys.c +++ b/bfd/oasys.c @@ -1493,6 +1493,7 @@ oasys_sizeof_headers (abfd, exec) #define oasys_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_final_link _bfd_generic_final_link #define oasys_bfd_link_split_section _bfd_generic_link_split_section diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c index d40590f702f..22043b5f347 100644 --- a/bfd/ppcboot.c +++ b/bfd/ppcboot.c @@ -472,6 +472,7 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg) #define ppcboot_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 4672379e934..55c9013572a 100644 --- a/bfd/som.c +++ b/bfd/som.c @@ -6335,6 +6335,7 @@ som_bfd_link_split_section (abfd, sec) #define som_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_final_link _bfd_generic_final_link #define som_bfd_gc_sections bfd_generic_gc_sections diff --git a/bfd/srec.c b/bfd/srec.c index f40af69bcdf..b556f267379 100644 --- a/bfd/srec.c +++ b/bfd/srec.c @@ -1273,6 +1273,7 @@ srec_print_symbol (abfd, afile, symbol, how) #define srec_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 b9d3a93a6eb..c53afdd29bf 100644 --- a/bfd/targets.c +++ b/bfd/targets.c @@ -396,6 +396,7 @@ the tokens. .CONCAT2 (NAME,_bfd_link_hash_table_create), \ .CONCAT2 (NAME,_bfd_link_hash_table_free), \ .CONCAT2 (NAME,_bfd_link_add_symbols), \ +.CONCAT2 (NAME,_bfd_link_just_syms), \ .CONCAT2 (NAME,_bfd_final_link), \ .CONCAT2 (NAME,_bfd_link_split_section), \ .CONCAT2 (NAME,_bfd_gc_sections), \ @@ -418,6 +419,9 @@ the tokens. . {* Add symbols from this object file into the hash table. *} . boolean (*_bfd_link_add_symbols) PARAMS ((bfd *, struct bfd_link_info *)); . +. {* Indicate that we are only retrieving symbol values from this section. *} +. void (*_bfd_link_just_syms) PARAMS ((asection *, struct bfd_link_info *)); +. . {* Do a link based on the link_order structures attached to each . section of the BFD. *} . boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *)); diff --git a/bfd/tekhex.c b/bfd/tekhex.c index 565568a27b4..4391da18441 100644 --- a/bfd/tekhex.c +++ b/bfd/tekhex.c @@ -1008,6 +1008,7 @@ tekhex_print_symbol (abfd, filep, symbol, how) #define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_final_link _bfd_generic_final_link #define tekhex_bfd_link_split_section _bfd_generic_link_split_section diff --git a/bfd/versados.c b/bfd/versados.c index 9a7bcc71a40..e1cd9f7dc5e 100644 --- a/bfd/versados.c +++ b/bfd/versados.c @@ -870,6 +870,7 @@ versados_canonicalize_reloc (abfd, section, relptr, symbols) #define versados_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #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_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 7ca74591016..d2fb16b645d 100644 --- a/bfd/vms.c +++ b/bfd/vms.c @@ -132,6 +132,7 @@ static boolean vms_bfd_merge_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd)); static boolean vms_bfd_set_private_flags PARAMS ((bfd *abfd, flagword flags)); #define vms_make_empty_symbol _bfd_generic_make_empty_symbol +#define vms_bfd_link_just_syms _bfd_generic_link_just_syms /*===========================================================================*/ |