diff options
author | Alan Modra <amodra@gmail.com> | 2011-04-17 23:15:13 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2011-04-17 23:15:13 +0000 |
commit | 9e2278f567e4ddeb7180ef4e0b3b24e4b087d703 (patch) | |
tree | e917203967fd03ed383ff7a74bd7aee910acf4dc /bfd | |
parent | 0283589814e341df59ca48e497ff6671fbcb5955 (diff) | |
download | gdb-9e2278f567e4ddeb7180ef4e0b3b24e4b087d703.zip gdb-9e2278f567e4ddeb7180ef4e0b3b24e4b087d703.tar.gz gdb-9e2278f567e4ddeb7180ef4e0b3b24e4b087d703.tar.bz2 |
PR ld/12365
PR ld/12672
bfd/
* bfd.c (BFD_PLUGIN): Define.
(BFD_FLAGS_SAVED, BFD_FLAGS_FOR_BFD_USE_MASK): Add BFD_PLUGIN.
* bfd-in2.h: Regenerate.
* elflink.c (elf_link_output_extsym): Strip undefined plugin syms.
* opncls.c (bfd_make_readable): Don't lose original bfd flags.
ld/
* ldfile.c (ldfile_try_open_bfd): Don't attempt any plugin action
when no_more_claiming.
* ldmain.c (add_archive_element): Likewise.
(multiple_definition): Remove plugin_multiple_definition call.
(notice): Remove plugin_notice call.
* ldlang.c (lang_list_insert_after, void lang_list_remove_tail): Move.
Delete prototype.
(plugin_insert): New static var.
(open_input_bfds): Only rescan libs after plugin insert point.
(lang_gc_sections): Omit plugin claimed files.
(lang_process): Set plugin_insert. Only rescan when plugin adds
objects.
* plugin.h (no_more_claiming): Declare.
(plugin_notice, plugin_multiple_definition): Don't declare.
* plugin.c: Formatting.
(orig_notice_all, orig_allow_multiple_defs, orig_callbacks,
plugin_callbacks): New static vars.
(no_more_claiming): Make global.
(plugin_cached_allow_multiple_defs): Delete.
(plugin_get_ir_dummy_bfd): Set SEC_EXCLUDE on dummy .text section,
use newer bfd_make_section variant. Make COMMON section too.
Error handling. Correct setting of gp size.
(asymbol_from_plugin_symbol): Properly cast last arg of concat.
(message): Likewise for ACONCAT.
(asymbol_from_plugin_symbol): Use our COMMON section.
(get_symbols): When report_plugin_symbols, show visibility too.
(init_non_ironly_hash): Move. Don't test non_ironly_hash.
(plugin_load_plugins): Save state of linker callbacks, set up to
call plugin_notice instead. Call init_non_ironly_hash here.
(plugin_call_all_symbols_read): Set plugin_multiple_definition in
plugin callbacks.
(plugin_notice): Rewrite.
(plugin_multiple_definition): Make static, call original callback.
ld/testsuite/
* ld-plugin/plugin-7.d: Adjust for plugin changes.
* ld-plugin/plugin-8.d: Likewise.
* ld-plugin/plugin.exp: Pass --verbose=2 for visibility test, and
compare ld output to..
* ld-plugin/plugin-12.d: New.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/bfd-in2.h | 7 | ||||
-rw-r--r-- | bfd/bfd.c | 7 | ||||
-rw-r--r-- | bfd/elflink.c | 5 | ||||
-rw-r--r-- | bfd/opncls.c | 2 |
4 files changed, 16 insertions, 5 deletions
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index e7c410d..2c795b6 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -5110,14 +5110,17 @@ struct bfd /* Decompress sections in this BFD. */ #define BFD_DECOMPRESS 0x10000 + /* BFD is a dummy, for plugins. */ +#define BFD_PLUGIN 0x20000 + /* Flags bits to be saved in bfd_preserve_save. */ #define BFD_FLAGS_SAVED \ - (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS) + (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN) /* Flags bits which are for BFD use only. */ #define BFD_FLAGS_FOR_BFD_USE_MASK \ (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ - | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) + | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) /* Currently my_archive is tested before adding origin to anything. I believe that this can become always an add of @@ -157,14 +157,17 @@ CODE_FRAGMENT . {* Decompress sections in this BFD. *} .#define BFD_DECOMPRESS 0x10000 . +. {* BFD is a dummy, for plugins. *} +.#define BFD_PLUGIN 0x20000 +. . {* Flags bits to be saved in bfd_preserve_save. *} .#define BFD_FLAGS_SAVED \ -. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS) +. (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN) . . {* Flags bits which are for BFD use only. *} .#define BFD_FLAGS_FOR_BFD_USE_MASK \ . (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \ -. | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) +. | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT) . . {* Currently my_archive is tested before adding origin to . anything. I believe that this can become always an add of diff --git a/bfd/elflink.c b/bfd/elflink.c index 9ccc841..2275503 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -8704,6 +8704,11 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) || h->root.type == bfd_link_hash_defweak) && elf_discarded_section (h->root.u.def.section)) strip = TRUE; + else if ((h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak) + && h->root.u.undef.abfd != NULL + && (h->root.u.undef.abfd->flags & BFD_PLUGIN) != 0) + strip = TRUE; else strip = FALSE; diff --git a/bfd/opncls.c b/bfd/opncls.c index 3597dae..4043200 100644 --- a/bfd/opncls.c +++ b/bfd/opncls.c @@ -875,7 +875,7 @@ bfd_make_readable (bfd *abfd) abfd->section_count = 0; abfd->usrdata = NULL; abfd->cacheable = FALSE; - abfd->flags = BFD_IN_MEMORY; + abfd->flags |= BFD_IN_MEMORY; abfd->mtime_set = FALSE; abfd->target_defaulted = TRUE; |