Binutils with MCST patches
Go to file
Eric Botcazou 317ff0084b Speed up direct linking with DLLs on Windows (1/2).
This patch deals with the auto-import feature.  There are 2 versions
of this feature: the original one, which was piggybacked on the OS
loader with an optional help from the runtime (--enable-auto-import
--enable-runtime-pseudo-reloc-v1) and is still the one mostly
documented in the sources and manual; the enhanced one by Kai Tietz,
which is entirely piggybacked on the runtime (--enable-auto-import
--enable-runtime-pseudo-reloc-v2) and is the default for Mingw and
Cygwin nowadays.

The implementation is inefficient because of pe[p]_find_data_imports:
for every undefined symbol, the function walks the entire set of
relocations for all the input files and does a direct name comparison
for each of them.

This is easily fixable by using a hash-based map for v1 and a simple
hash table for v2.  This patch leaves v1 alone and only changes v2.
It also factors out pe[p]_find_data_imports into a common function,
removes old cruft left and right, and attempts to better separate
the implementations of v1 and v2 in the code.

ld/
	* emultempl/pe.em (U_SIZE): Delete.
	(pe_data_import_dll): Likewise.
	(make_import_fixup): Return void, take 4th parameter and pass it down
	in call to pe_create_import_fixup.
	(pe_find_data_imports): Move to...
	(gld_${EMULATION_NAME}_after_open): Run the stdcall fixup pass after
	the auto-import pass and add a guard before running the latter.
	* emultempl/pep.em (U_SIZE): Delete.
	(pep_data_import_dll): Likewise.
	(make_import_fixup): Return void, take 4th parameter and pass it down
	in call to pe_create_import_fixup.
	(pep_find_data_imports): Move to...
	(gld_${EMULATION_NAME}_after_open): Run the stdcall fixup pass after
	the auto-import pass and add a guard before running the latter.
	* pe-dll.c (runtime_pseudp_reloc_v2_init): Change type to bfd_boolean.
	(pe_walk_relocs_of_symbol): Rename into...
	(pe_walk_relocs): ...this.  Add 2 more parameters,4th parameter to the
	callback prototype and pass 4th parameter in calls to the callback.
	If the import hash table is present, invoke the callback on the reloc
	if the symbol name is in the table.
	(pe_find_data_imports): ...here.  Take 2 parameters.  Build an import
	hash table for the pseudo-relocation support version 2.  When it is
	built, walk the relocations only once at the end; when it is not, do
	not build a fixup when the symbol isn't part of an import table.
	Issue the associated warning only after a first fixup is built.
	(tmp_seq2): Delete.
	(make_singleton_name_imp): Likewise.
	(make_import_fixup_mark): Return const char * and a stable string.
	(make_import_fixup_entry): Do not deal with the pseudo-relocation
	support version 2.
	(make_runtime_pseudo_reloc): Factor out code and fix formatting.
	(pe_create_import_fixup): Add 5th parameter.  Clearly separate the
	pseudo-relocation support version 2 from the rest.  Fix formatting.
	* pe-dll.h (pe_walk_relocs_of_symbol): Delete.
	(pe_find_data_imports): Declare.
	(pe_create_import_fixup): Add 5th parameter.
	* pep-dll.c (pe_data_import_dll): Delete.
	(pe_find_data_imports): Define.
	(pe_walk_relocs_of_symbol): Delete.
	* pep-dll.h (pep_walk_relocs_of_symbol): Delete.
	(pep_find_data_imports): Declare.
	(pep_create_import_fixup): Add 5th parameter.
	* ld.texinfo (--enable-auto-import): Adjust to new implementation.
2018-04-04 12:07:50 +02:00
bfd PR binutils/22875: HPPA/ELF: Also fail with relocation placeholders 2018-04-04 02:00:49 +01:00
binutils Retire Jason Eckhardt as i860 maintainer. 2018-04-04 08:35:19 +01:00
config Fix PR ld/22263 on SPARC. 2018-02-06 18:17:39 +01:00
cpu opcodes error messages 2018-03-03 11:34:26 +10:30
elfcpp Add support for R_AARCH64_TLSLE_LDST8_TPREL_LO12, etc. 2018-03-28 09:10:25 -07:00
etc Update year range in copyright notice of binutils files 2018-01-03 17:49:56 +10:30
gas Make power8 the default cpu when assembling for 64-bit little endian targets. 2018-03-30 08:33:27 -05:00
gdb Change read_alphacoff_dynamic_symtab to use gdb::byte_vector 2018-04-03 12:03:33 -06:00
gold Update Spanish translations for ld/ opcodes/ and gold/ sub-directories 2018-04-04 09:00:18 +01:00
gprof Add missing translations to ALL_LINGUAS 2018-03-01 09:17:02 +10:30
include [1/2][GAS][AARCH64]Add BFD_RELOC_AARCH64_TLSLE_LDST8/16/32/64_TPREL_LO12 support in GAS. 2018-03-28 18:03:55 +01:00
intl Require ngettext in test of system gettext implementation 2017-11-07 15:56:44 +10:30
ld Speed up direct linking with DLLs on Windows (1/2). 2018-04-04 12:07:50 +02:00
libdecnumber Remove leading/trailing white spaces in ChangeLog 2015-07-24 04:16:47 -07:00
libiberty Avoid compilation warning in libiberty/simple-object-xcoff.c 2018-01-27 18:25:06 +02:00
opcodes Update Spanish translations for ld/ opcodes/ and gold/ sub-directories 2018-04-04 09:00:18 +01:00
readline Avoid MinGW compilation warning in readline/input.c 2017-05-19 11:05:59 +03:00
sim MAINTAINERS: Update my company e-mail address 2018-01-22 15:39:18 +00:00
texinfo
zlib Sync ZLIB with FSF GCC sources, bringing in version 1.2.11. 2017-02-20 12:52:22 +00:00
.cvsignore
.gitattributes Add a .gitattributes file for use with git-merge-changelog 2014-07-25 18:07:23 -04:00
.gitignore Add archives and make stamps to the .gitignore file. 2016-09-27 15:10:42 +01:00
COPYING
COPYING.LIB
COPYING.LIBGLOSS Update the address of the FSF in the copyright notice of files which were using the old address. 2017-12-14 12:48:55 +00:00
COPYING.NEWLIB
COPYING3
COPYING3.LIB
ChangeLog WebAssembly: Disable subdirectory configuration for unsupported LD 2018-02-13 12:56:29 +00:00
MAINTAINERS Update description of ownership of files in include/ 2014-11-04 16:14:14 -08:00
Makefile.def Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
Makefile.in Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
Makefile.tpl Sync top-level make and configure files with FSF GCC mainline versions. 2017-01-23 11:55:48 +00:00
README
README-maintainer-mode
compile Update from upstream Automake 2014-11-16 13:43:48 +01:00
config-ml.in Update top level configure files by synchronizing them with gcc. 2018-01-10 15:29:21 +00:00
config.guess Update top level configure files by synchronizing them with gcc. 2018-01-10 15:29:21 +00:00
config.rpath
config.sub Update top level configure files by synchronizing them with gcc. 2018-01-10 15:29:21 +00:00
configure WebAssembly: Disable subdirectory configuration for unsupported LD 2018-02-13 12:56:29 +00:00
configure.ac WebAssembly: Disable subdirectory configuration for unsupported LD 2018-02-13 12:56:29 +00:00
depcomp Update from upstream Automake 2014-11-16 13:43:48 +01:00
djunpack.bat
install-sh Update from upstream Automake 2014-11-16 13:43:48 +01:00
libtool.m4 Sync top-level btool.m4 with GCC 2016-01-12 08:44:52 -08:00
ltgcc.m4
ltmain.sh PR target/59788 2014-02-06 11:01:57 +01:00
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
makefile.vms
missing Update from upstream Automake 2014-11-16 13:43:48 +01:00
mkdep
mkinstalldirs Update from upstream Automake 2014-11-16 13:43:48 +01:00
move-if-change Update `move-if-change' from gnulib 2014-11-16 17:04:02 +01:00
setup.com
src-release.sh Improve junk file removal in source tarball creation script. 2018-01-30 17:48:24 +00:00
symlink-tree
ylwrap Update from upstream Automake 2014-11-16 13:43:48 +01:00

README

		   README for GNU development tools

This directory contains various GNU compilers, assemblers, linkers, 
debuggers, etc., plus their support routines, definitions, and documentation.

If you are receiving this as part of a GDB release, see the file gdb/README.
If with a binutils release, see binutils/README;  if with a libg++ release,
see libg++/README, etc.  That'll give you info about this
package -- supported targets, how to use it, how to report bugs, etc.

It is now possible to automatically configure and build a variety of
tools with one command.  To build all of the tools contained herein,
run the ``configure'' script here, e.g.:

	./configure 
	make

To install them (by default in /usr/local/bin, /usr/local/lib, etc),
then do:
	make install

(If the configure script can't determine your type of computer, give it
the name as an argument, for instance ``./configure sun4''.  You can
use the script ``config.sub'' to test whether a name is recognized; if
it is, config.sub translates it to a triplet specifying CPU, vendor,
and OS.)

If you have more than one compiler on your system, it is often best to
explicitly set CC in the environment before running configure, and to
also set CC when running make.  For example (assuming sh/bash/ksh):

	CC=gcc ./configure
	make

A similar example using csh:

	setenv CC gcc
	./configure
	make

Much of the code and documentation enclosed is copyright by
the Free Software Foundation, Inc.  See the file COPYING or
COPYING.LIB in the various directories, for a description of the
GNU General Public License terms under which you can copy the files.

REPORTING BUGS: Again, see gdb/README, binutils/README, etc., for info
on where and how to report problems.