[RFA] pei386 dll: auto-import patch

Charles Wilson cwilson@ece.gatech.edu
Tue Jul 31 12:02:00 GMT 2001

I have taken Paul Sokolovsky's auto-import and export-filtering patch, 
as modified by Robert Collins, and have updated it to current CVS.  I've 
added documentation concerning auto-import to ld.texinfo (under Machine 
Dependent section).  In addition to the extensive testing of the older 
version (as has been discussed on and off this list for the past several 
  weeks, esp. last week), I have rebuilt current CVS binutils with this 
patch, and it works as expected.  It adds desirable behavior to ld on 
x86 under windows-derived OS's, such as mingw and cygwin.  I believe all 
the issues raised by members of those communities have been addressed.

This patch actually commingles two behaviors: additional auto-EXport 
filtering and auto-import of DATA items.  However, the auto-EXport 
improvements are a prerequisite for the auto-import to work properly. 
Also, the auto-EXport filtering merely extends the current behavior 
using established hooks.  Thus, it's not really a "new" feature, and is 
combined with the novel auto-import patch for which it is necessary prereq.

Please apply.

--Charles Wilson

2001-07-31  Paul Sokolovsky  <paul.sokolovsky@technologist.com>

         * ld/pe-dll.c: new variable pe_dll_gory_debug. New static
         variable current_sec (static struct sec *)
         * ld/pe-dll.c (auto_export): change API, pass abfd for
         contextual filtering: don't export any symbols that come
         from libgcc, libstdc++, libmingw32. crt0.o, crt1.o
         or crt2.o.
         Do not export symbols starting with
            "_imp__" (e.g. don't re-export imported symbols)
            "__rtti_" or "__builtin_" (C++ support)
         Do not export the following symbols
            "DllMainCRTStartup@12" "_cygwin_dll_entry@12"
            "_cygwin_crt0_common@8" "_cygwin_noncygwin_dll_entry@12"
            "_fmode" "_impure_ptr" "cygwin_attach_dll" "cygwin_premain0"
            "cygwin_premain1" "cygwin_premain2" "cygwin_premain3"
         Do not export symbols for specifying internal layout of DLLs
            exclude symbols starting with "_head_"
            exclude symbols ending with "_iname"
         * ld/pe-dll.c (process_def_file): Don't export undefined
	symbols. Do not export symbols starting with  "_imp__" (e.g.
	don't re-export imported symbols).  Call auto_export() with
	new API.
         * ld/pe-dll.c (pe_walk_relocs_of_symbol): New function.
         * ld/pe-dll.c (generate_reloc): add optional gory debugging
         * ld/pe-dll.c (pe_dll_generate_def_file): eliminate extraneous
         initial blank line in output
         * ld/pe-dll.c (make_one): enlarge symtab to make room for
         __nm__ symbols (DATA auto-import support).
         * ld/pe-dll.c (make_singleton_name_thunk): New function.
         * ld/pe-dll.c (make_import_fixup_mark): New function.
         * ld/pe-dll.c (make_import_fixup_entry): New function.
         * ld/pe-dll.c (pe_create_import_fixup): New function.
         * ld/pe-dll.c (add_bfd_to_link): make this function non-static.
	Specify that name argument is a CONST char *.

         * ld/pe-dll.h: declare new variables int pe_dll_auto_import and
         pe_dll_gory_debug; declare new functions
	pe_walk_relocs_of_symbol and pe_create_import_fixup.

         * ld/emultempl/pe.em: add options --disable-auto-import and
         --enable-gory-debug.  New variable data_import_dll.
         * ld/emultempl/pe.em (make_import_fixup): New function.
         * ld/emultempl/pe.em (pe_find_data_imports): New function.
         * ld/emultempl/pe.em (pr_sym): New function.
         * ld/emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Add
	optional gory debugging. Call pe_find_data_imports.  .idata is
	NOT code, it is data; flag it so.

         * ld/ldlang.c (load_symbols): check if
         ldemul_unrecognized_file(entry) prior to calling

         * bfd/cofflink.c: new variable pe_dll_auto_import
         * bfd/cofflink.c (coff_link_check_ar_symbols): also search for
         __imp__symbol as well as _symbol.

         * bfd/linker.c (_bfd_generic_link_add_archive_symbols): also
         search for __imp__symbol as well as _symbol.

2001-07-31  Charles Wilson  <cwilson@ece.gatech.edu>
	* ld/gen-doc.texi: process I80386 arch-specific documentation in

         * ld/ld.texinfo: add additional documentation for
         --export-all-symbols.  Document --out-implib,
         --enable-auto-image-base, --disable-auto-image-base,
         --dll-search-prefix, and --disable-auto-import.  Add ix86
         machine-specific documentation; currently, only documents
         the auto-import changes for DLLs.

More information about the Cygwin-apps mailing list