Speed up direct linking with DLLs on Windows (2/2).
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 4 Apr 2018 10:13:05 +0000 (12:13 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 4 Apr 2018 10:13:05 +0000 (12:13 +0200)
commit9d8e8f445c1a021a1e381f4bd0bbc756b4258038
tree9c525142c2dce2687d24bda075f470a82f245d44
parent317ff0084bc68bfae2eabd82015e9239a68b5195
Speed up direct linking with DLLs on Windows (2/2).

This patch deals with the generation of the import library on the fly.

The implementation is inefficient because the linker makes a lot of
calls to realloc and memmove when importing the symbols in order to
maintain a sorted list of symbols.

This is fixable by relying on the fact that, for every linked DLL,
the list of symbols it exports is already sorted so you can import
them en masse once you have found the insertion point.

ld/
* deffile.h (def_file_add_import_from): Declare.
(def_file_add_import_at): Likewise.
* deffilep.y (fill_in_import): New function extracted from...
(def_file_add_import): ...here.  Call it.
(def_file_add_import_from): New function.
(def_file_add_import_at): Likewise.
* pe-dll.c (pe_implied_import_dll): Use an optimized version of the
insertion loop for imported symbols if possible.
ld/ChangeLog
ld/deffile.h
ld/deffilep.y
ld/pe-dll.c