public inbox for archer-commits@sourceware.org help / color / mirror / Atom feed
From: jkratoch@sourceware.org To: archer-commits@sourceware.org Subject: [SCM] master: Merge remote branch 'gdb/master' Date: Thu, 14 Oct 2010 20:55:00 -0000 [thread overview] Message-ID: <20101014205548.5895.qmail@sourceware.org> (raw) The branch, master has been updated via d8d2c40696f0b959f9a997b05f10e92646ae6997 (commit) via c619812c381908704dd4d385be9a7f74d2b6e49a (commit) via 0dec04cd391afbd7848a83092d1fbfc5dfbdb0e1 (commit) via 715c8705f637e8505d601c1ccf86fc3e00d58c95 (commit) via c0dab19a92624ea7778c8c10a46acf2e7fa5b0a7 (commit) via 18adfa0ebdbcf5bc5b83209a72c1bd7c112b1193 (commit) via 8be50900be59aee3d98bfd3739efc43879ecf59d (commit) via cee21f54f10cbc59edd243eead62003426680657 (commit) via 1f66ce293dcf912e856512ab042685442cb1a604 (commit) via ba4425ae906ea625835613f9152d5f0e8d4f6208 (commit) from 6cf47741faf811d7816dd54cf838e256e32d29b9 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit d8d2c40696f0b959f9a997b05f10e92646ae6997 Merge: 6cf4774 c619812 Author: Jan Kratochvil <jan.kratochvil@redhat.com> Date: Thu Oct 14 22:55:38 2010 +0200 Merge remote branch 'gdb/master' commit c619812c381908704dd4d385be9a7f74d2b6e49a Author: H.J. Lu <hjl.tools@gmail.com> Date: Thu Oct 14 18:45:09 2010 +0000 Add CheckRegSize to instructions which require register size check. gas/ 2010-10-14 H.J. Lu <hongjiu.lu@intel.com> * config/tc-i386.c (match_template): Check checkregsize instead of w for register size check. gas/testsuite/ 2010-10-14 H.J. Lu <hongjiu.lu@intel.com> * gas/i386/i386.exp: Run inval-reg. * gas/i386/inval-reg.l: New. * gas/i386/inval-reg.s: Likewise. opcodes/ 2010-10-14 H.J. Lu <hongjiu.lu@intel.com> * i386-gen.c (opcode_modifiers): Add CheckRegSize. * i386-opc.h (CheckRegSize): New. (i386_opcode_modifier): Add checkregsize. * i386-opc.tbl: Add CheckRegSize to instructions which require register size check. * i386-tbl.h: Regenerated. commit 0dec04cd391afbd7848a83092d1fbfc5dfbdb0e1 Author: swagiaal <swagiaal> Date: Thu Oct 14 16:13:35 2010 +0000 Fixed void* vs int* overload issue (PR C++/10343). 2010-10-14 Sami Wagiaalla <swagiaal@redhat.com> * gdbtypes.h: Create BASE_PTR_CONVERSION_BADNESS. * gdbtypes.c (rank_one_type): Move type comparison code out of here to... (types_equal): ...here. And changed it as follows: Outside of typedefs type must be of the same TYPE_CODE. When compairing two pointers or references they are equal if their targets are equal. Correct pointer conversions. 2010-10-14 Sami Wagiaalla <swagiaal@redhat.com> * gdb.cp/converts.cc: New test program. * gdb.cp/converts.exp: New test. * gdb.cp/overload.exp: Added test for void* vs int*. * gdb.cp/overload.exp: Ditto. * gdb.cp/oranking.exp: Removed related kfail. commit 715c8705f637e8505d601c1ccf86fc3e00d58c95 Author: Pierre Muller <muller@ics.u-strasbg.fr> Date: Thu Oct 14 15:18:53 2010 +0000 * p-lang.c (is_pascal_string_type): Avoid crashes on structures having fields without names. commit c0dab19a92624ea7778c8c10a46acf2e7fa5b0a7 Author: Dave Korn <dave.korn@artimi.com> Date: Thu Oct 14 01:31:25 2010 +0000 Applied patch series for LD plugin interface (six parts). [PATCH] Add infrastructure for plugin API; functionality to follow. include/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 1/6). * plugin-api.h (LDPT_GNU_LD_VERSION): New ld_plugin_tag enum member. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 1/6). * configure.in: Add AC_CHECKs for file io and dlfcn headers and functions and AC_SEARCH for -ldl. (enable_plugins): New shell variable set if above tests find dlopen functionality. (ENABLE_PLUGINS): Add related automake conditional. * configure: Regenerate. * config.in: Likewise. * Makefile.am (PLUGIN_C): Declare plugin C source file, conditional on ENABLE_PLUGINS being defined. (PLUGIN_H): Likewise for header file. (PLUGIN_OBJECT): Likewise for object file. (PLUGIN_CFLAGS): Likewise -D flag required to compile plugin support. (AM_CPPFLAGS): Use PLUGIN_CFLAGS. (CFILES): Use PLUGIN_C. (HFILES): Use PLUGIN_H. (OFILES): Use PLUGIN_OBJECT. (ld_new_SOURCES): Use PLUGIN_C. (noinst_LTLIBRARIES)[ENABLE_PLUGINS]: Declare test plugin. (libldtestplug_la_SOURCES)[ENABLE_PLUGINS]: Add automake definition for test plugin. (libldtestplug_la_CFLAGS)[ENABLE_PLUGINS]: Likewise. (libldtestplug_la_LDFLAGS)[ENABLE_PLUGINS]: Likewise. * Makefile.in: Regenerate. * sysdep.h: Include stdarg.h, unistd.h and one of fcntl.h or sys/file.h where available. Include dlfcn.h when ENABLE_PLUGINS. (O_RDONLY): Supply default definition likewise to bfd's sysdep.h (O_WRONLY): Likewise. (O_RDWR): Likewise. (O_ACCMODE): Likewise. (O_BINARY): Likewise. (SEEK_SET): Likewise. (SEEK_CUR): Likewise. (SEEK_END): Likewise. * ldmisc.c (vfinfo): Make non-static. Add %p format char. * ldmisc.h (vfinfo): Declare extern prototype. * lexsup.c (enum option_values)[ENABLE_PLUGINS]: Add new entries for OPTION_PLUGIN and OPTION_PLUGIN_OPT. (ld_options[])[ENABLE_PLUGINS]: Add option data for the above two. (parse_args)[ENABLE_PLUGINS]: Handle them, and load all plugins once option parsing is complete. * ldmain.c (main)[ENABLE_PLUGINS]: Call plugin cleanup hooks just after lang_finish. * plugin.c: New source file. * plugin.h: Likewise new header. * testplug.c: New source file. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 1/6). * ld-bootstrap/bootstrap.exp: Skip static tests also if LD plugins are enabled. * lib/ld-lib.exp (proc regexp_diff): Extend verbose debug output. (proc set_file_contents): Write a file with the supplied content. (run_ld_link_tests): Add new 'ld' action to test linker output. (proc check_plugin_api_available): Return true if linker under test supports the plugin API. * ld-plugin/func.c: New test source file. * ld-plugin/main.c: Likewise. * ld-plugin/text.c: Likewise. * ld-plugin/plugin-1.d: New dump test output pattern script. * ld-plugin/plugin-2.d: Likewise. * ld-plugin/plugin-3.d: Likewise. * ld-plugin/plugin-4.d: Likewise. * ld-plugin/plugin-5.d: Likewise. * ld-plugin/plugin.exp: New test control script. --- [PATCH] Implement claim file and all symbols read hooks and add symbols callback. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 2/6). * ldfile.c (ldfile_try_open_bfd)[ENABLE_PLUGINS]: Don't return early during compat checks if they pass, instead offer any successfully opened and accepted file to the plugin claim file hooks chain. Create a dummy bfd to accept symbols added by the plugin, if the plugin claims the file. * ldlang.c (lang_process)[ENABLE_PLUGINS]: Call plugin all symbols read hook chain before ldemul_after_open. * ldlang.h (struct lang_input_statement_struct): Add new single-bit 'claimed' flag. * plugin.c (IRONLY_SUFFIX): New macro for dummy bfd file suffix. (IRONLY_SUFFIX_LEN): Length of the above string. (plugin_get_ir_dummy_bfd): New function to create the dummy bfd used to store symbols for ir-only files. (is_ir_dummy_bfd): New function to check if a bfd is ir-only. (asymbol_from_plugin_symbol): New function converts symbol formats. (add_symbols): Call it to convert plugin syms to bfd syms and add them to the dummy bfd. * plugin.h: Add missing include guards. (plugin_get_ir_dummy_bfd): Add prototype. (is_ir_dummy_bfd): Likewise. * testplug.c (TV_MESSAGE): New helper macro. (struct claim_file): New struct. (claim_file_t): New typedef. (tag_names[]): Make static and const. (claimfiles_list): New variable. (claimfiles_tail_chain_ptr): Likewise. (last_claimfile): Likewise. (record_claim_file): Record a file to claim on a singly-linked list. (parse_symdefstr): Parse an ASCII representation of a symbol from a plugin option into the fields of a struct ld_plugin_symbol. (record_claimed_file_symbol): Use it to parse plugin option for adding a symbol. (parse_option): Parse claim file and add symbol options. (dump_tv_tag): Use TV_MESSAGE. (onload): Likewise. (onclaim_file): Make static. Use TV_MESSAGE. Scan list of files to claim and claim this file if required, adding any symbols specified. (onall_symbols_read): Make static and use TV_MESSAGE. (oncleanup): Likewise. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 2/6). * ld-plugin/plugin-3.d: Enable regexes for new functionality. * ld-plugin/plugin-5.d: Likewise. * ld-plugin/plugin-6.d: New testcase. * ld-plugin/plugin-7.d: Likewise. * ld-plugin/plugin.exp: Use 'nm' on compiled test objects to determine whether symbols in plugin arguments need an underscore prefix. Add new plugin-6.d and plugin-7.d testcases. --- [PATCH] Implement get symbols callback. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 3/6). * ldmain.c (notice)[ENABLE_PLUGINS]: Call plugin_notice. * plugin.c (non_ironly_hash): Add new bfd hash table. (plugin_load_plugins): Exit early if no plugins to load. If plugins do load successfully, set notice_all flag in link info. (get_symbols): Implement. (plugin_load_plugins): Exit early if no plugins to load, else after loading plugins successfully enable notice_all mode. (init_non_ironly_hash): Lazily init non_ironly_hash table. (plugin_notice): Record symbols referenced from non-IR files in the non_ironly_hash. Suppress tracing, cref generation and nocrossrefs tracking for symbols from dummy IR bfds. * plugin.h: Fix formatting. (plugin_notice): Add prototype. * testplug.c (dumpresolutions): New global var. (parse_options): Accept "dumpresolutions". (onall_symbols_read): Get syms and dump resolutions if it was given. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 3/6). * ld-plugin/plugin-8.d: New testcase. * ld-plugin/plugin.exp: Invoke it. --- [PATCH] Implement add input file, add input lib and set extra lib path callbacks. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 4/6). * ldlang.c (lang_process)[ENABLE_PLUGINS]: Move invocation of plugin_call_all_symbols_read to before setting of gc_sym_list, and open any new input files that may have been added during it. * ldmain.c (multiple_definition)[ENABLE_PLUGINS]: Call out to plugin_multiple_definition and let it have first say over what to do with the clashing definitions. * plugin.c (no_more_claiming): New boolean variable. (plugin_cached_allow_multiple_defs): Likewise. (add_input_file): Implement. (add_input_library): Likewise. (set_extra_library_path): Likewise. (plugin_call_claim_file): Don't do anything when no_more_claiming set. (plugin_call_all_symbols_read): Set it. Disable link info "allow_multiple_definition" flag, but cache its value. (plugin_multiple_definition): New function. * plugin.h (plugin_multiple_definition): Add prototype. * testplug.c (addfile_enum_t): New enumerated typedef. (add_file_t): New struct typedef. (addfiles_list): New variable. (addfiles_tail_chain_ptr): Likewise. (record_add_file): New function. (parse_option): Parse "add:", "lib:" and "dir:" options and call it. (onall_symbols_read): Iterate the list of new files, libs and dirs, adding them. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 4/6). * ld-plugin/plugin-9.d: New testcase. * ld-plugin/plugin.exp: Invoke it. --- [PATCH] Add ELF symbol visibility support to plugin interface. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 5/6). * plugin.c (asymbol_from_plugin_symbol): If the bfd is an ELF bfd, find the elf symbol data and set the visibility in the st_other field. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 5/6). * ld-plugin/plugin-ignore.d: New dump test control script. * ld-plugin/plugin-vis-1.d: Likewise. * ld-plugin/plugin.exp: Add list of ELF-only tests and run them if testing on an ELF target. --- [PATCH] Add archive support to plugin interface. bfd/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 6/6). * aoutx.h (aout_link_check_ar_symbols): Take new "subsbfd" reference parameter and pass it when invoking add_archive_element callback. (aout_link_check_archive_element): Handle substitute bfd if it was set during add_archive_element callback in the above. * cofflink.c (coff_link_check_ar_symbols): Take new "subsbfd" reference parameter and pass it when invoking add_archive_element callback. (coff_link_check_archive_element): Handle substitute bfd if it was set during add_archive_element callback in the above. * ecoff.c (read_ext_syms_and_strs): New function holds symbol-reading code factored-out from ecoff_link_check_archive_element. (reread_ext_syms_and_strs): Clear old symbols and call it. (ecoff_link_check_archive_element): Use the above. Handle substitute BFD if one is set by add_archive_element callback. (ecoff_link_add_archive_symbols): Likewise allow bfd substitution. * elflink.c (elf_link_add_archive_symbols): Likewise. * linker.c (generic_link_check_archive_element): Likewise. * pdp11.c (aout_link_check_ar_symbols): Take new "subsbfd" reference parameter and pass it when invoking add_archive_element callback. (aout_link_check_archive_element): Handle substitute bfd if it was set during add_archive_element callback in the above. * vms-alpha.c (alpha_vms_link_add_archive_symbols): Handle substitute BFD if one is set by add_archive_element callback. * xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Take new "subsbfd" reference parameter and pass it when invoking add_archive_element callback. (xcoff_link_check_ar_symbols): Likewise. (xcoff_link_check_archive_element): Handle bfd substitution if it was set by callback in the above. include/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 6/6). * bfdlink.h (struct_bfd_link_callbacks): Document new argument to add_archive_element callback used to return a replacement bfd which is to be added to the hash table in place of the original element. ld/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 6/6). * ldlang.c (load_symbols): Handle bfd subsitution when calling the add_archive_element callback. * ldmain.c (add_archive_element)[ENABLE_PLUGINS]: Offer the archive member to the plugins and if claimed set "subsbfd" output parameter to point to the dummy IR-only BFD. ld/testsuite/ChangeLog: 2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> Apply LD plugin patch series (part 6/6). * ld-plugin/plugin-10.d: New dump test control script. * ld-plugin/plugin-11.d: Likewise. * ld-plugin/plugin.exp: Run them. --- commit 18adfa0ebdbcf5bc5b83209a72c1bd7c112b1193 Author: gdbadmin <gdbadmin@sourceware.org> Date: Thu Oct 14 00:00:02 2010 +0000 *** empty log message *** commit 8be50900be59aee3d98bfd3739efc43879ecf59d Author: Alan Modra <amodra@bigpond.net.au> Date: Wed Oct 13 23:00:05 2010 +0000 daily update commit cee21f54f10cbc59edd243eead62003426680657 Author: Doug Evans <dje@google.com> Date: Wed Oct 13 20:08:39 2010 +0000 New python module gdb.types. * NEWS: Document it. * data-directory/Makefile.in (PYTHON_FILES): Add gdb/types.py. * python/lib/gdb/types.py: New file. testsuite/ * lib/gdb-python.exp (gdb_check_python_config): New function. * gdb.python/Makefile.in (EXECUTABLES): Add lib-types. * gdb.python/lib-types.cc: New file. * gdb.python/lib-types.exp: New file. doc/ * gdb.texinfo (Python): Add "Python modules". (Types in Python): Add reference to gdb.types section. (Python modules): New node. commit 1f66ce293dcf912e856512ab042685442cb1a604 Author: Tom Tromey <tromey@redhat.com> Date: Wed Oct 13 17:38:05 2010 +0000 * language.h (LA_PRINT_ARRAY_INDEX): Fix argument name. commit ba4425ae906ea625835613f9152d5f0e8d4f6208 Author: Doug Evans <dje@google.com> Date: Wed Oct 13 15:10:07 2010 +0000 * c-typeprint.c: Whitespace cleanup. (cp_type_print_method_args): Remove unnecessary forward decl. (cp_type_print_derivation_info): Ditto. (c_type_print_varspec_prefix): Mark as static at definition. (c_type_print_modifier): Fix arg descriptions. ----------------------------------------------------------------------- Summary of changes: bfd/ChangeLog | 32 + bfd/aoutx.h | 24 +- bfd/cofflink.c | 19 +- bfd/ecoff.c | 101 +- bfd/elflink.c | 9 +- bfd/linker.c | 41 +- bfd/pdp11.c | 18 +- bfd/version.h | 2 +- bfd/vms-alpha.c | 11 +- bfd/xcofflink.c | 23 +- gdb/ChangeLog | 33 + gdb/NEWS | 4 + gdb/c-typeprint.c | 20 +- gdb/data-directory/Makefile.in | 3 +- gdb/doc/ChangeLog | 6 + gdb/doc/gdb.texinfo | 54 + gdb/gdbtypes.c | 94 +- gdb/gdbtypes.h | 3 + gdb/language.h | 2 +- gdb/p-lang.c | 6 +- gdb/python/lib/gdb/types.py | 91 + gdb/testsuite/ChangeLog | 15 + gdb/testsuite/gdb.cp/converts.cc | 53 + gdb/testsuite/gdb.cp/converts.exp | 48 + gdb/testsuite/gdb.cp/oranking.exp | 1 - gdb/testsuite/gdb.cp/overload.cc | 7 + gdb/testsuite/gdb.cp/overload.exp | 10 + gdb/testsuite/gdb.python/Makefile.in | 2 +- gdb/testsuite/gdb.python/lib-types.cc | 61 + gdb/testsuite/gdb.python/lib-types.exp | 143 + gdb/testsuite/lib/gdb-python.exp | 18 + gdb/version.in | 2 +- include/ChangeLog | 12 + include/bfdlink.h | 6 +- include/plugin-api.h | 3 +- opcodes/ChangeLog | 11 + opcodes/i386-gen.c | 1 + opcodes/i386-opc.h | 3 + opcodes/i386-opc.tbl | 368 +- opcodes/i386-tbl.h |14834 ++++++++++++++++---------------- 40 files changed, 8475 insertions(+), 7719 deletions(-) create mode 100644 gdb/python/lib/gdb/types.py create mode 100644 gdb/testsuite/gdb.cp/converts.cc create mode 100644 gdb/testsuite/gdb.cp/converts.exp create mode 100644 gdb/testsuite/gdb.python/lib-types.cc create mode 100644 gdb/testsuite/gdb.python/lib-types.exp First 500 lines of diff: diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 2e18e8c..7981dce 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,35 @@ +2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com> + + Apply LD plugin patch series (part 6/6). + * aoutx.h (aout_link_check_ar_symbols): Take new "subsbfd" reference + parameter and pass it when invoking add_archive_element callback. + (aout_link_check_archive_element): Handle substitute bfd if it + was set during add_archive_element callback in the above. + * cofflink.c (coff_link_check_ar_symbols): Take new "subsbfd" reference + parameter and pass it when invoking add_archive_element callback. + (coff_link_check_archive_element): Handle substitute bfd if it + was set during add_archive_element callback in the above. + * ecoff.c (read_ext_syms_and_strs): New function holds symbol-reading + code factored-out from ecoff_link_check_archive_element. + (reread_ext_syms_and_strs): Clear old symbols and call it. + (ecoff_link_check_archive_element): Use the above. Handle substitute + BFD if one is set by add_archive_element callback. + (ecoff_link_add_archive_symbols): Likewise allow bfd substitution. + * elflink.c (elf_link_add_archive_symbols): Likewise. + * linker.c (generic_link_check_archive_element): Likewise. + * pdp11.c (aout_link_check_ar_symbols): Take new "subsbfd" reference + parameter and pass it when invoking add_archive_element callback. + (aout_link_check_archive_element): Handle substitute bfd if it was + set during add_archive_element callback in the above. + * vms-alpha.c (alpha_vms_link_add_archive_symbols): Handle substitute + BFD if one is set by add_archive_element callback. + * xcofflink.c (xcoff_link_check_dynamic_ar_symbols): Take new "subsbfd" + reference parameter and pass it when invoking add_archive_element + callback. + (xcoff_link_check_ar_symbols): Likewise. + (xcoff_link_check_archive_element): Handle bfd substitution if it was + set by callback in the above. + 2010-10-11 Alan Modra <amodra@gmail.com> * elf32-frv.c (elf32_frv_relocate_section): Set "name" for global syms. diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 11598a0..efa9d47 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -3210,7 +3210,8 @@ aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) static bfd_boolean aout_link_check_ar_symbols (bfd *abfd, struct bfd_link_info *info, - bfd_boolean *pneeded) + bfd_boolean *pneeded, + bfd **subsbfd) { struct external_nlist *p; struct external_nlist *pend; @@ -3304,7 +3305,8 @@ aout_link_check_ar_symbols (bfd *abfd, continue; } - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3331,9 +3333,8 @@ aout_link_check_ar_symbols (bfd *abfd, outside BFD. We assume that we should link in the object file. This is done for the -u option in the linker. */ - if (! (*info->callbacks->add_archive_element) (info, - abfd, - name)) + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3381,7 +3382,8 @@ aout_link_check_ar_symbols (bfd *abfd, it if the current link symbol is common. */ if (h->type == bfd_link_hash_undefined) { - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -3402,15 +3404,21 @@ aout_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, bfd_boolean *pneeded) { + bfd *subsbfd = NULL; + if (! aout_get_external_symbols (abfd)) return FALSE; - if (! aout_link_check_ar_symbols (abfd, info, pneeded)) + if (! aout_link_check_ar_symbols (abfd, info, pneeded, &subsbfd)) return FALSE; if (*pneeded) { - if (! aout_link_add_symbols (abfd, info)) + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (subsbfd && !aout_get_external_symbols (subsbfd)) + return FALSE; + if (! aout_link_add_symbols (subsbfd ? subsbfd : abfd, info)) return FALSE; } diff --git a/bfd/cofflink.c b/bfd/cofflink.c index a29b687..a28d396 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -197,7 +197,8 @@ coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) static bfd_boolean coff_link_check_ar_symbols (bfd *abfd, struct bfd_link_info *info, - bfd_boolean *pneeded) + bfd_boolean *pneeded, + bfd **subsbfd) { bfd_size_type symesz; bfd_byte *esym; @@ -243,7 +244,8 @@ coff_link_check_ar_symbols (bfd *abfd, if (h != (struct bfd_link_hash_entry *) NULL && h->type == bfd_link_hash_undefined) { - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -267,14 +269,23 @@ coff_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, bfd_boolean *pneeded) { + bfd *subsbfd = NULL; + if (! _bfd_coff_get_external_symbols (abfd)) return FALSE; - if (! coff_link_check_ar_symbols (abfd, info, pneeded)) + if (! coff_link_check_ar_symbols (abfd, info, pneeded, &subsbfd)) + return FALSE; + + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (*pneeded + && subsbfd + && ! _bfd_coff_get_external_symbols (subsbfd)) return FALSE; if (*pneeded - && ! coff_link_add_symbols (abfd, info)) + && ! coff_link_add_symbols (subsbfd ? subsbfd : abfd, info)) return FALSE; if ((! info->keep_memory || ! *pneeded) diff --git a/bfd/ecoff.c b/bfd/ecoff.c index af9d7d6..37003d2 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -3509,6 +3509,58 @@ ecoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) return FALSE; } +/* Factored out from ecoff_link_check_archive_element. */ + +static bfd_boolean +read_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size, + bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd, + const struct ecoff_backend_data * const backend) +{ + if (! ecoff_slurp_symbolic_header (abfd)) + return FALSE; + + /* If there are no symbols, we don't want it. */ + if (bfd_get_symcount (abfd) == 0) + return TRUE; + + *symhdr = &ecoff_data (abfd)->debug_info.symbolic_header; + + *external_ext_size = backend->debug_swap.external_ext_size; + *esize = (*symhdr)->iextMax * *external_ext_size; + *external_ext = bfd_malloc (*esize); + if (*external_ext == NULL && *esize != 0) + return FALSE; + + if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbExtOffset, SEEK_SET) != 0 + || bfd_bread (*external_ext, *esize, abfd) != *esize) + return FALSE; + + *ssext = (char *) bfd_malloc ((bfd_size_type) (*symhdr)->issExtMax); + if (*ssext == NULL && (*symhdr)->issExtMax != 0) + return FALSE; + + if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbSsExtOffset, SEEK_SET) != 0 + || (bfd_bread (*ssext, (bfd_size_type) (*symhdr)->issExtMax, abfd) + != (bfd_size_type) (*symhdr)->issExtMax)) + return FALSE; + return TRUE; +} + +static bfd_boolean +reread_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size, + bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd, + const struct ecoff_backend_data * const backend) +{ + if (*external_ext != NULL) + free (*external_ext); + *external_ext = NULL; + if (*ssext != NULL) + free (*ssext); + *ssext = NULL; + return read_ext_syms_and_strs (symhdr, external_ext_size, esize, + external_ext, ssext, abfd, backend); +} + /* This is called if we used _bfd_generic_link_add_archive_symbols because we were not dealing with an ECOFF archive. */ @@ -3530,35 +3582,15 @@ ecoff_link_check_archive_element (bfd *abfd, *pneeded = FALSE; - if (! ecoff_slurp_symbolic_header (abfd)) + /* Read in the external symbols and external strings. */ + if (!read_ext_syms_and_strs (&symhdr, &external_ext_size, &esize, + &external_ext, &ssext, abfd, backend)) goto error_return; /* If there are no symbols, we don't want it. */ if (bfd_get_symcount (abfd) == 0) goto successful_return; - symhdr = &ecoff_data (abfd)->debug_info.symbolic_header; - - /* Read in the external symbols and external strings. */ - external_ext_size = backend->debug_swap.external_ext_size; - esize = symhdr->iextMax * external_ext_size; - external_ext = bfd_malloc (esize); - if (external_ext == NULL && esize != 0) - goto error_return; - - if (bfd_seek (abfd, (file_ptr) symhdr->cbExtOffset, SEEK_SET) != 0 - || bfd_bread (external_ext, esize, abfd) != esize) - goto error_return; - - ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax); - if (ssext == NULL && symhdr->issExtMax != 0) - goto error_return; - - if (bfd_seek (abfd, (file_ptr) symhdr->cbSsExtOffset, SEEK_SET) != 0 - || (bfd_bread (ssext, (bfd_size_type) symhdr->issExtMax, abfd) - != (bfd_size_type) symhdr->issExtMax)) - goto error_return; - /* Look through the external symbols to see if they define some symbol that is currently undefined. */ ext_ptr = (char *) external_ext; @@ -3568,6 +3600,7 @@ ecoff_link_check_archive_element (bfd *abfd, EXTR esym; bfd_boolean def; const char *name; + bfd *subsbfd; struct bfd_link_hash_entry *h; (*swap_ext_in) (abfd, (void *) ext_ptr, &esym); @@ -3612,9 +3645,18 @@ ecoff_link_check_archive_element (bfd *abfd, continue; /* Include this element. */ - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + subsbfd = NULL; + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, &subsbfd)) + goto error_return; + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (subsbfd + && !reread_ext_syms_and_strs (&symhdr, &external_ext_size, &esize, + &external_ext, &ssext, subsbfd, backend)) goto error_return; - if (! ecoff_link_add_externals (abfd, info, external_ext, ssext)) + if (! ecoff_link_add_externals (subsbfd ? subsbfd : abfd, info, + external_ext, ssext)) goto error_return; *pneeded = TRUE; @@ -3691,6 +3733,7 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) unsigned int file_offset; const char *name; bfd *element; + bfd *subsbfd; h = *pundef; @@ -3777,9 +3820,13 @@ ecoff_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) /* Unlike the generic linker, we know that this element provides a definition for an undefined symbol and we know that we want to include it. We don't need to check anything. */ - if (! (*info->callbacks->add_archive_element) (info, element, name)) + subsbfd = NULL; + if (! (*info->callbacks->add_archive_element) + (info, element, name, &subsbfd)) return FALSE; - if (! ecoff_link_add_object_symbols (element, info)) + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (! ecoff_link_add_object_symbols (subsbfd ? subsbfd : element, info)) return FALSE; pundef = &(*pundef)->u.undef.next; diff --git a/bfd/elflink.c b/bfd/elflink.c index 41fba17..6d37dc8 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -5011,6 +5011,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) { struct elf_link_hash_entry *h; bfd *element; + bfd *subsbfd = NULL; struct bfd_link_hash_entry *undefs_tail; symindex mark; @@ -5073,10 +5074,12 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) undefs_tail = info->hash->undefs_tail; - if (! (*info->callbacks->add_archive_element) (info, element, - symdef->name)) + if (! (*info->callbacks->add_archive_element) + (info, element, symdef->name, &subsbfd)) goto error_return; - if (! bfd_link_add_symbols (element, info)) + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (! bfd_link_add_symbols (subsbfd ? subsbfd : element, info)) goto error_return; /* If there are any new undefined symbols, we need to make diff --git a/bfd/linker.c b/bfd/linker.c index 76bc70a..fc52b51 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -223,7 +223,10 @@ SUBSUBSECTION archive and decide which elements of the archive should be included in the link. For each such element it must call the <<add_archive_element>> linker callback, and it must add the - symbols from the object file to the linker hash table. + symbols from the object file to the linker hash table. (The + callback may in fact indicate that a replacement BFD should be + used, in which case the symbols from that BFD should be added + to the linker hash table instead.) @findex _bfd_generic_link_add_archive_symbols In most cases the work of looking through the symbols in the @@ -243,9 +246,13 @@ SUBSUBSECTION element should be included in the link. If the element is to be included, the <<add_archive_element>> linker callback routine must be called with the element as an argument, and - the elements symbols must be added to the linker hash table + the element's symbols must be added to the linker hash table just as though the element had itself been passed to the - <<_bfd_link_add_symbols>> function. + <<_bfd_link_add_symbols>> function. The <<add_archive_element>> + callback has the option to indicate that it would like to + replace the element archive with a substitute BFD, in which + case it is the symbols of that substitute BFD that must be + added to the linker hash table instead. When the a.out <<_bfd_link_add_symbols>> function receives an archive, it calls <<_bfd_generic_link_add_archive_symbols>> @@ -257,7 +264,8 @@ SUBSUBSECTION symbol) it calls the <<add_archive_element>> callback and then <<aout_link_check_archive_element>> calls <<aout_link_add_symbols>> to actually add the symbols to the - linker hash table. + linker hash table - possibly those of a substitute BFD, if the + <<add_archive_element>> callback avails itself of that option. The ECOFF back end is unusual in that it does not normally call <<_bfd_generic_link_add_archive_symbols>>, because ECOFF @@ -957,8 +965,10 @@ archive_hash_table_init included. CHECKFN should set *PNEEDED to TRUE if the object file should be included, and must also call the bfd_link_info add_archive_element callback function and handle adding the symbols - to the global hash table. CHECKFN should only return FALSE if some - sort of error occurs. + to the global hash table. CHECKFN must notice if the callback + indicates a substitute BFD, and arrange to add those symbols instead + if it does so. CHECKFN should only return FALSE if some sort of + error occurs. For some formats, such as a.out, it is possible to look through an object file but not actually include it in the link. The @@ -1213,11 +1223,20 @@ generic_link_check_archive_element (bfd *abfd, { bfd_size_type symcount; asymbol **symbols; + bfd *subsbfd = NULL; /* This object file defines this symbol, so pull it in. */ - if (! (*info->callbacks->add_archive_element) (info, abfd, - bfd_asymbol_name (p))) + if (! (*info->callbacks->add_archive_element) + (info, abfd, bfd_asymbol_name (p), &subsbfd)) return FALSE; + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (subsbfd) + { + abfd = subsbfd; + if (!bfd_generic_link_read_symbols (abfd)) + return FALSE; + } symcount = _bfd_generic_link_get_symcount (abfd); symbols = _bfd_generic_link_get_symbols (abfd); if (! generic_link_add_symbol_list (abfd, info, symcount, @@ -1238,12 +1257,16 @@ generic_link_check_archive_element (bfd *abfd, symbfd = h->u.undef.abfd; if (symbfd == NULL) { + bfd *subsbfd = NULL; /* This symbol was created as undefined from outside BFD. We assume that we should link in the object file. This is for the -u option in the linker. */ if (! (*info->callbacks->add_archive_element) - (info, abfd, bfd_asymbol_name (p))) + (info, abfd, bfd_asymbol_name (p), &subsbfd)) return FALSE; + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. But no symbols are going to get + registered by anything we're returning to from here. */ *pneeded = TRUE; return TRUE; } diff --git a/bfd/pdp11.c b/bfd/pdp11.c index 1a7694c..5f4d28c 100644 --- a/bfd/pdp11.c +++ b/bfd/pdp11.c @@ -2545,7 +2545,8 @@ aout_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) static bfd_boolean aout_link_check_ar_symbols (bfd *abfd, struct bfd_link_info *info, - bfd_boolean *pneeded) + bfd_boolean *pneeded, + bfd **subsbfd) { struct external_nlist *p; struct external_nlist *pend; @@ -2600,7 +2601,8 @@ aout_link_check_ar_symbols (bfd *abfd, but not if it is defined in the .text section. That seems a bit crazy to me, and I haven't implemented it. However, it might be correct. */ - if (! (*info->callbacks->add_archive_element) (info, abfd, name)) + if (! (*info->callbacks->add_archive_element) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -2628,7 +2630,7 @@ aout_link_check_ar_symbols (bfd *abfd, in the object file. This is done for the -u option in the linker. */ if (! (*info->callbacks->add_archive_element) - (info, abfd, name)) + (info, abfd, name, subsbfd)) return FALSE; *pneeded = TRUE; return TRUE; @@ -2680,15 +2682,21 @@ aout_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, bfd_boolean *pneeded) { + bfd *subsbfd = NULL; + if (! aout_get_external_symbols (abfd)) return FALSE; - if (! aout_link_check_ar_symbols (abfd, info, pneeded)) + if (! aout_link_check_ar_symbols (abfd, info, pneeded, &subsbfd)) return FALSE; if (*pneeded) { - if (! aout_link_add_symbols (abfd, info)) + /* Potentially, the add_archive_element hook may have set a + substitute BFD for us. */ + if (subsbfd && ! aout_get_external_symbols (subsbfd)) + return FALSE; + if (! aout_link_add_symbols (subsbfd ? subsbfd : abfd, info)) return FALSE; } diff --git a/bfd/version.h b/bfd/version.h index 6ec0248..39625fd 100644 --- a/bfd/version.h +++ b/bfd/version.h hooks/post-receive -- Repository for Project Archer.
next reply other threads:[~2010-10-14 20:55 UTC|newest] Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top 2010-10-14 20:55 jkratoch [this message] -- strict thread matches above, loose matches on Subject: below -- 2011-02-01 19:25 jkratoch 2011-01-29 16:44 jkratoch 2011-01-25 12:53 pmuldoon 2011-01-25 9:10 jkratoch 2011-01-17 13:31 pmuldoon 2011-01-15 11:35 jkratoch 2011-01-14 8:04 jkratoch 2011-01-10 12:00 pmuldoon 2011-01-10 9:10 jkratoch 2011-01-07 5:57 jkratoch 2011-01-06 12:22 pmuldoon 2011-01-04 4:59 jkratoch 2010-12-31 22:30 jkratoch 2010-12-30 7:22 jkratoch 2010-12-22 20:11 swagiaal 2010-12-14 17:13 jkratoch 2010-12-14 8:27 pmuldoon 2010-12-10 17:16 jkratoch 2010-12-08 15:55 pmuldoon 2010-12-06 6:40 jkratoch 2010-12-04 1:03 jkratoch 2010-12-02 15:47 pmuldoon 2010-11-30 0:15 jkratoch 2010-11-28 18:02 jkratoch 2010-11-28 5:41 jkratoch 2010-11-16 5:04 jkratoch 2010-11-12 11:47 pmuldoon 2010-11-11 11:39 pmuldoon 2010-11-10 9:09 pmuldoon 2010-11-08 9:34 pmuldoon 2010-11-07 18:15 jkratoch 2010-10-22 14:28 pmuldoon 2010-10-20 12:48 pmuldoon 2010-10-19 16:01 pmuldoon 2010-10-17 20:27 jkratoch 2010-10-15 17:07 jkratoch 2010-10-13 15:06 jkratoch 2010-10-12 16:45 jkratoch 2010-10-11 9:21 jkratoch 2010-10-11 8:47 pmuldoon 2010-10-06 9:00 pmuldoon 2010-09-30 8:56 pmuldoon 2010-09-27 9:48 jkratoch 2010-09-20 12:34 pmuldoon 2010-09-16 20:49 ratmice 2010-09-04 19:59 jkratoch 2010-09-03 7:26 jkratoch 2010-09-02 15:04 jkratoch 2010-09-01 15:29 swagiaal 2010-08-23 13:54 jkratoch 2010-08-20 17:49 jkratoch 2010-08-12 15:19 swagiaal 2010-08-06 15:32 jkratoch 2010-07-29 19:17 swagiaal 2010-07-22 16:57 jkratoch 2010-07-22 16:26 jkratoch 2010-07-20 18:51 jkratoch 2010-07-09 8:09 jkratoch 2010-06-24 8:55 jkratoch 2010-06-23 20:56 jkratoch 2010-06-17 12:53 jkratoch 2010-06-07 8:14 jkratoch 2010-06-02 19:03 jkratoch 2010-05-28 21:27 jkratoch 2010-05-26 18:36 swagiaal 2010-05-17 18:02 jkratoch 2010-05-17 1:04 jkratoch 2010-05-10 19:30 swagiaal 2010-05-05 14:24 swagiaal 2010-05-03 13:49 jkratoch 2010-05-03 8:48 jkratoch 2010-05-02 23:10 jkratoch 2010-05-02 15:54 jkratoch 2010-04-30 7:11 jkratoch 2010-04-28 11:44 jkratoch 2010-04-25 20:22 jkratoch 2010-04-09 20:37 jkratoch 2010-04-07 1:41 jkratoch 2010-04-05 10:11 jkratoch 2010-04-04 11:58 jkratoch 2010-03-22 23:58 jkratoch 2010-03-20 17:23 jkratoch 2010-03-18 10:01 jkratoch 2010-03-17 18:04 jkratoch 2010-03-12 18:35 jkratoch 2010-03-04 22:28 jkratoch 2010-03-01 22:16 jkratoch 2010-02-26 22:16 jkratoch 2010-02-26 17:50 jkratoch 2010-02-17 16:01 swagiaal 2010-02-13 22:51 jkratoch 2010-02-11 12:51 jkratoch 2010-02-09 19:01 jkratoch 2010-02-08 21:46 jkratoch 2010-02-03 4:38 jkratoch 2010-01-31 17:25 jkratoch 2010-01-28 19:17 swagiaal 2010-01-28 10:56 jkratoch 2010-01-27 19:21 swagiaal 2010-01-27 8:08 jkratoch 2010-01-26 18:58 swagiaal 2010-01-20 21:48 jkratoch 2010-01-15 2:09 jkratoch 2010-01-15 0:52 jkratoch 2010-01-14 22:23 jkratoch 2010-01-13 20:53 jkratoch 2010-01-10 20:47 jkratoch 2010-01-09 10:03 jkratoch 2010-01-09 8:41 jkratoch 2010-01-08 19:16 jkratoch 2009-12-06 17:43 jkratoch 2009-12-03 16:32 jkratoch 2009-11-30 13:59 jkratoch 2009-11-24 21:21 jkratoch 2009-11-21 9:24 jkratoch 2009-11-20 21:06 jkratoch 2009-11-20 15:57 jkratoch 2009-11-17 19:59 jkratoch 2009-11-16 2:22 jkratoch
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20101014205548.5895.qmail@sourceware.org \ --to=jkratoch@sourceware.org \ --cc=archer-commits@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).