8sa1-binutils-gdb/ld
Andrew Burgess 5b5f4e6f8c ld: Early detection of orphans we know will be discarded
When processing an orphan section we first call lang_place_orphans, this
function handles a few sections for which the behaviour is known COMMON
sections, or sections marked as SEC_EXCLUDE.

Any orphans that are not handled in lang_place_orphans are passed on to
ldlang_place_orphan, this is where we decide where to put the orphan,
and then call lang_add_section to perform the actual orphan placement.

We previously had a larger set of checks at the start of the function
lang_add_section to discard some sections that we _knew_ should not be
added into the output file, this was where .group sections (in a final
link) and .debug* sections (with --strip-debug) were dropped.

The problem with dropping these sections at the lang_add_section stage
is that a user might also be using --orphan-handling=error to prevent
orphans.  If they are then they should not be get errors about sections
that we know will be discarded, and which are not mentioned in the
linker script.

The solution proposed in this patch is to move the "will this section be
discarded" check into a separate function, and use this in
lang_place_orphans to have the early discard phase discard sections that
we know should not be included in the output file.

ld/ChangeLog:

	PR 21961
	* ldlang.c (lang_discard_section_p): New function.
	(lang_add_section): Checks moved out into new function, which is
	now called.
	(lang_place_orphans): Call lang_discard_section_p instead of
	duplicating some of the checks from lang_add_section.
	* testsuite/ld-elf/orphan-11.d: New file.
	* testsuite/ld-elf/orphan-11.ld: New file.
	* testsuite/ld-elf/orphan-11.s: New file.
	* testsuite/ld-elf/orphan-12.d: New file.
	* testsuite/ld-elf/orphan-12.s: New file.
2017-08-24 12:41:34 +01:00
..
emulparams [ARC] Add JLI support. 2017-07-19 09:56:55 +02:00
emultempl Add -z globalaudit linker command line option to set the DF_GLOBALAUDIT flag bit in the dynamic tags. 2017-08-11 16:36:28 +01:00
po Add new Brazilian Portuguese translation for the ld subdirectory. 2017-08-17 12:13:28 +01:00
scripttempl Add support for PE startup files that want to define their own constructor and desctructor sequencing. 2017-08-10 13:17:12 +01:00
testsuite ld: Early detection of orphans we know will be discarded 2017-08-24 12:41:34 +01:00
.gitignore
aclocal.m4
ChangeLog ld: Early detection of orphans we know will be discarded 2017-08-24 12:41:34 +01:00
ChangeLog-0001
ChangeLog-0203
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-2016 ChangeLog rotation 2017-01-02 13:55:05 +10:30
ChangeLog-9197
ChangeLog-9899
config.in Add configure flag to enable gnu hash style by default. 2017-08-08 07:25:39 +09:30
configure Add new Brazilian Portuguese translation for the ld subdirectory. 2017-08-17 12:13:28 +01:00
configure.ac Add new Brazilian Portuguese translation for the ld subdirectory. 2017-08-17 12:13:28 +01:00
configure.host Run more ld tests when not native 2017-01-02 23:48:08 +10:30
configure.tgt Accept more epiphany targets 2017-06-14 06:59:37 +02:00
deffile.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
deffilep.y Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
dep-in.sed
elf-hints-local.h
fdl.texi
gen-doc.texi S/390: Add support for pgste marker 2017-06-23 08:00:46 +02:00
genscrba.sh
genscripts.sh Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
h8-doc.texi Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ld.h Treat common symbol as undefined for --no-define-common 2017-08-06 08:19:04 -07:00
ld.texinfo Add -z globalaudit linker command line option to set the DF_GLOBALAUDIT flag bit in the dynamic tags. 2017-08-11 16:36:28 +01:00
ldbuildid.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldbuildid.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldcref.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldctor.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldctor.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldemul.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldemul.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldexp.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldexp.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldfile.c Treat a prefix of "$SYSROOT" in the same way as "=" when parsing linker search paths. 2017-05-18 15:07:59 +01:00
ldfile.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldgram.y Treat common symbol as undefined for --no-define-common 2017-08-06 08:19:04 -07:00
ldint.texinfo Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldlang.c ld: Early detection of orphans we know will be discarded 2017-08-24 12:41:34 +01:00
ldlang.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldlex-wrapper.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldlex.h ld: Allow section groups to be resolved as part of a relocatable link 2017-06-06 09:53:38 +01:00
ldlex.l ld: Allow section groups to be resolved as part of a relocatable link 2017-06-06 09:53:38 +01:00
ldmain.c Add configure flag to enable gnu hash style by default. 2017-08-08 07:25:39 +09:30
ldmain.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldmisc.c LD: vfinfo: Make clever formatters consistent WRT function name reporting 2017-02-15 13:41:51 +00:00
ldmisc.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldver.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldver.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldwrite.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ldwrite.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
lexsup.c Add -z globalaudit linker command line option to set the DF_GLOBALAUDIT flag bit in the dynamic tags. 2017-08-11 16:36:28 +01:00
MAINTAINERS Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
Makefile.am Apply ld/Makefile.in patch to the correct file 2017-07-07 10:35:31 +09:30
Makefile.in S/390: Add support for pgste marker 2017-06-23 08:00:46 +02:00
mri.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mri.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
NEWS Add -z globalaudit linker command line option to set the DF_GLOBALAUDIT flag bit in the dynamic tags. 2017-08-11 16:36:28 +01:00
pe-dll.c Support pe-bigobj-x86-64 as an output format in 64-bit PE based linkers. 2017-05-09 14:42:43 +01:00
pe-dll.h PR 21274, ld segfaults linking PE DLL 2017-04-11 19:49:13 +09:30
pep-dll.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
pep-dll.h PR 21274, ld segfaults linking PE DLL 2017-04-11 19:49:13 +09:30
plugin.c Rename non_ir_ref to non_ir_ref_regular 2017-05-16 10:35:02 +09:30
plugin.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
README Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
stamp-h.in
sysdep.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
testplug2.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
testplug3.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
testplug4.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
testplug.c Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
TODO

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

		README for LD

This is the GNU linker.  It is distributed with other "binary
utilities" which should be in ../binutils.  See ../binutils/README for
more general notes, including where to send bug reports.

There are many features of the linker:

* The linker uses a Binary File Descriptor library (../bfd)
  that it uses to read and write object files.  This helps
  insulate the linker itself from the format of object files.

* The linker supports a number of different object file
  formats.  It can even handle multiple formats at once:
  Read two input formats and write a third.

* The linker can be configured for cross-linking.

* The linker supports a control language.

* There is a user manual (ld.texinfo), as well as the
  beginnings of an internals manual (ldint.texinfo).

Installation
============

See ../binutils/README.

If you want to make a cross-linker, you may want to specify
a different search path of -lfoo libraries than the default.
You can do this by setting the LIB_PATH variable in ./Makefile
or using the --with-lib-path configure switch.

To build just the linker, make the target all-ld from the top level
directory (one directory above this one).

Porting to a new target
=======================

See the ldint.texinfo manual.

Reporting bugs etc
===========================

See ../binutils/README.

Known problems
==============

The Solaris linker normally exports all dynamic symbols from an
executable.  The GNU linker does not do this by default.  This is
because the GNU linker tries to present the same interface for all
similar targets (in this case, all native ELF targets).  This does not
matter for normal programs, but it can make a difference for programs
which try to dlopen an executable, such as PERL or Tcl.  You can make
the GNU linker export all dynamic symbols with the -E or
--export-dynamic command line option.

HP/UX 9.01 has a shell bug that causes the linker scripts to be
generated incorrectly.  The symptom of this appears to be "fatal error
- scanner input buffer overflow" error messages.  There are various
workarounds to this:
  * Build and install bash, and build with "make SHELL=bash".
  * Update to a version of HP/UX with a working shell (e.g., 9.05).
  * Replace "(. ${srcdir}/scripttempl/${SCRIPT_NAME}.sc)" in
    genscripts.sh with "sh ${srcdir}..." (no parens) and make sure the
    emulparams script used exports any shell variables it sets.

Copyright (C) 2012-2017 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.