1999-05-03 15:29:11 +08:00
|
|
|
/* ld.h -- general linker header file
|
2019-01-01 18:31:27 +08:00
|
|
|
Copyright (C) 1991-2019 Free Software Foundation, Inc.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-06 22:09:45 +08:00
|
|
|
This file is part of the GNU Binutils.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-06 22:09:45 +08:00
|
|
|
This program is free software; you can redistribute it and/or modify
|
1999-05-03 15:29:11 +08:00
|
|
|
it under the terms of the GNU General Public License as published by
|
2007-07-06 22:09:45 +08:00
|
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-07-06 22:09:45 +08:00
|
|
|
This program is distributed in the hope that it will be useful,
|
1999-05-03 15:29:11 +08:00
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
2007-07-06 22:09:45 +08:00
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
|
|
MA 02110-1301, USA. */
|
1999-05-03 15:29:11 +08:00
|
|
|
|
|
|
|
#ifndef LD_H
|
|
|
|
#define LD_H
|
|
|
|
|
|
|
|
#ifdef HAVE_LOCALE_H
|
2005-09-30 19:42:05 +08:00
|
|
|
#endif
|
|
|
|
#ifndef SEEK_CUR
|
|
|
|
#define SEEK_CUR 1
|
|
|
|
#endif
|
|
|
|
#ifndef SEEK_END
|
|
|
|
#define SEEK_END 2
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HAVE_LOCALE_H
|
|
|
|
# ifndef ENABLE_NLS
|
|
|
|
/* The Solaris version of locale.h always includes libintl.h. If we have
|
|
|
|
been configured with --disable-nls then ENABLE_NLS will not be defined
|
|
|
|
and the dummy definitions of bindtextdomain (et al) below will conflict
|
|
|
|
with the defintions in libintl.h. So we define these values to prevent
|
|
|
|
the bogus inclusion of libintl.h. */
|
|
|
|
# define _LIBINTL_H
|
|
|
|
# define _LIBGETTEXT_H
|
|
|
|
# endif
|
1999-05-03 15:29:11 +08:00
|
|
|
# include <locale.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef ENABLE_NLS
|
|
|
|
# include <libintl.h>
|
|
|
|
# define _(String) gettext (String)
|
|
|
|
# ifdef gettext_noop
|
|
|
|
# define N_(String) gettext_noop (String)
|
|
|
|
# else
|
|
|
|
# define N_(String) (String)
|
|
|
|
# endif
|
|
|
|
#else
|
2000-05-13 21:05:36 +08:00
|
|
|
# define gettext(Msgid) (Msgid)
|
|
|
|
# define dgettext(Domainname, Msgid) (Msgid)
|
|
|
|
# define dcgettext(Domainname, Msgid, Category) (Msgid)
|
ngettext support
binutils has lacked proper pluralization of output messages for a long
time, for example, readelf will display information about a section
that "contains 1 entries" or "There are 1 section headers". Fixing
this properly requires us to use ngettext, because other languages
have different rules to English.
This patch defines macros for ngettext and friends to handle builds
with --disable-nls, and tidies the existing nls support. I've
redefined gettext rather than just defining "_" as dgettext in bfd and
opcodes in case someone wants to use gettext there (which might
conceivably happen with generated code).
bfd/
* sysdep.h: Formatting, comment fixes.
(gettext, ngettext): Redefine when ENABLE_NLS.
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
(_): Define using gettext.
(textdomain, bindtextdomain): Use safer "do nothing".
* hosts/alphavms.h (textdomain, bindtextdomain): Likewise.
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
opcodes/
* opintl.h: Formatting, comment fixes.
(gettext, ngettext): Redefine when ENABLE_NLS.
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
(_): Define using gettext.
(textdomain, bindtextdomain): Use safer "do nothing".
binutils/
* sysdep.h (textdomain, bindtextdomain): Use safer "do nothing".
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
gas/
* asintl.h (textdomain, bindtextdomain): Use safer "do nothing".
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
gold/
* system.h (textdomain, bindtextdomain): Use safer "do nothing".
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
ld/
* ld.h (textdomain, bindtextdomain): Use safer "do nothing".
(ngettext, dngettext, dcngettext): Define when !ENABLE_NLS.
2017-11-06 12:50:00 +08:00
|
|
|
# define ngettext(Msgid1, Msgid2, n) \
|
|
|
|
(n == 1 ? Msgid1 : Msgid2)
|
|
|
|
# define dngettext(Domainname, Msgid1, Msgid2, n) \
|
|
|
|
(n == 1 ? Msgid1 : Msgid2)
|
|
|
|
# define dcngettext(Domainname, Msgid1, Msgid2, n, Category) \
|
|
|
|
(n == 1 ? Msgid1 : Msgid2)
|
|
|
|
# define textdomain(Domainname) do {} while (0)
|
|
|
|
# define bindtextdomain(Domainname, Dirname) do {} while (0)
|
1999-05-03 15:29:11 +08:00
|
|
|
# define _(String) (String)
|
|
|
|
# define N_(String) (String)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Look in this environment name for the linker to pretend to be */
|
|
|
|
#define EMULATION_ENVIRON "LDEMULATION"
|
|
|
|
/* If in there look for the strings: */
|
|
|
|
|
|
|
|
/* Look in this variable for a target format */
|
|
|
|
#define TARGET_ENVIRON "GNUTARGET"
|
|
|
|
|
|
|
|
/* Input sections which are put in a section of this name are actually
|
|
|
|
discarded. */
|
|
|
|
#define DISCARD_SECTION_NAME "/DISCARD/"
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
/* A file name list. */
|
|
|
|
typedef struct name_list
|
|
|
|
{
|
2000-10-09 23:09:17 +08:00
|
|
|
const char *name;
|
|
|
|
struct name_list *next;
|
|
|
|
}
|
|
|
|
name_list;
|
2000-01-05 22:12:23 +08:00
|
|
|
|
2008-06-01 00:35:56 +08:00
|
|
|
typedef enum {sort_none, sort_ascending, sort_descending} sort_order;
|
2012-11-22 03:56:38 +08:00
|
|
|
|
2004-10-05 00:45:51 +08:00
|
|
|
/* A wildcard specification. */
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
typedef enum
|
|
|
|
{
|
2010-12-15 22:56:40 +08:00
|
|
|
none, by_name, by_alignment, by_name_alignment, by_alignment_name,
|
2012-07-10 14:50:57 +08:00
|
|
|
by_none, by_init_priority
|
2004-10-05 00:45:51 +08:00
|
|
|
} sort_type;
|
|
|
|
|
|
|
|
extern sort_type sort_section;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
struct wildcard_spec
|
|
|
|
{
|
1999-05-03 15:29:11 +08:00
|
|
|
const char *name;
|
2000-01-05 22:12:23 +08:00
|
|
|
struct name_list *exclude_name_list;
|
2004-10-05 00:45:51 +08:00
|
|
|
sort_type sorted;
|
2011-07-11 23:03:09 +08:00
|
|
|
struct flag_info *section_flag_list;
|
1999-05-03 15:29:11 +08:00
|
|
|
};
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
struct wildcard_list
|
|
|
|
{
|
2001-08-03 09:11:21 +08:00
|
|
|
struct wildcard_list *next;
|
|
|
|
struct wildcard_spec spec;
|
|
|
|
};
|
|
|
|
|
1999-05-03 15:29:11 +08:00
|
|
|
#define BYTE_SIZE (1)
|
|
|
|
#define SHORT_SIZE (2)
|
|
|
|
#define LONG_SIZE (4)
|
|
|
|
#define QUAD_SIZE (8)
|
|
|
|
|
2009-09-11 23:27:38 +08:00
|
|
|
enum endian_enum { ENDIAN_UNSET = 0, ENDIAN_BIG, ENDIAN_LITTLE };
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
typedef struct
|
|
|
|
{
|
1999-05-03 15:29:11 +08:00
|
|
|
/* 1 => assign space to common symbols even if `relocatable_output'. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean force_common_definition;
|
2001-09-29 20:57:54 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, build MIPS embedded PIC relocation tables in the output
|
1999-05-03 15:29:11 +08:00
|
|
|
file. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean embedded_relocs;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, force generation of a file with a .exe file. */
|
|
|
|
bfd_boolean force_exe_suffix;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, generate a cross reference report. */
|
|
|
|
bfd_boolean cref;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE (which is the default), warn about mismatched input
|
1999-05-03 15:29:11 +08:00
|
|
|
files. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean warn_mismatch;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2007-05-03 17:24:16 +08:00
|
|
|
/* Warn on attempting to open an incompatible library during a library
|
|
|
|
search. */
|
|
|
|
bfd_boolean warn_search_mismatch;
|
|
|
|
|
2009-01-26 23:23:39 +08:00
|
|
|
/* If non-zero check section addresses, once computed,
|
|
|
|
for overlaps. Relocatable links only check when this is > 0. */
|
|
|
|
signed char check_section_addresses;
|
2000-09-29 21:21:41 +08:00
|
|
|
|
2002-12-23 18:45:03 +08:00
|
|
|
/* If TRUE allow the linking of input files in an unknown architecture
|
|
|
|
assuming that the user knows what they are doing. This was the old
|
|
|
|
behaviour of the linker. The new default behaviour is to reject such
|
|
|
|
input files. */
|
|
|
|
bfd_boolean accept_unknown_input_arch;
|
2007-01-19 23:13:29 +08:00
|
|
|
|
2016-07-16 00:49:08 +08:00
|
|
|
/* Name of the import library to generate. */
|
|
|
|
char *out_implib_filename;
|
|
|
|
|
2011-07-16 15:58:40 +08:00
|
|
|
/* If TRUE we'll just print the default output on stdout. */
|
|
|
|
bfd_boolean print_output_format;
|
|
|
|
|
2015-06-05 21:09:31 +08:00
|
|
|
/* If set, display the target memory usage (per memory region). */
|
|
|
|
bfd_boolean print_memory_usage;
|
|
|
|
|
2017-06-06 17:15:27 +08:00
|
|
|
/* Should we force section groups to be resolved? Controlled with
|
ld: Allow section groups to be resolved as part of a relocatable link
This commit adds a new linker feature: the ability to resolve section
groups as part of a relocatable link.
Currently section groups are automatically resolved when performing a
final link, and are carried through when performing a relocatable link.
By carried through this means that one copy of each section group (from
all the copies that might be found in all the input files) is placed
into the output file. Sections that are part of a section group will
not match input section specifiers within a linker script and are
forcibly kept as separate sections.
There is a slight resemblance between section groups and common
section. Like section groups, common sections are carried through when
performing a relocatable link, and resolved (allocated actual space)
only at final link time.
However, with common sections there is an ability to force the linker to
allocate space for the common sections when performing a relocatable
link, there's currently no such ability for section groups.
This commit adds such a mechanism. This new facility can be accessed in
two ways, first there's a command line switch --force-group-allocation,
second, there's a new linker script command FORCE_GROUP_ALLOCATION. If
one of these is used when performing a relocatable link then the linker
will resolve the section groups as though it were performing a final
link, the section group will be deleted, and the members of the group
will be placed like normal input sections. If there are multiple copies
of the group (from multiple input files) then only one copy of the group
members will be placed, the duplicate copies will be discarded.
Unlike common sections that have the --no-define-common command line
flag, and INHIBIT_COMMON_ALLOCATION linker script command there is no
way to prevent group resolution during a final link, this is because the
ELF gABI specifically prohibits the presence of SHT_GROUP sections in a
fully linked executable. However, the code as written should make
adding such a feature trivial, setting the new resolve_section_groups
flag to false during a final link should work as you'd expect.
bfd/ChangeLog:
* elf.c (_bfd_elf_make_section_from_shdr): Don't initially mark
SEC_GROUP sections as SEC_EXCLUDE.
(bfd_elf_set_group_contents): Replace use of abort with an assert.
(assign_section_numbers): Use resolve_section_groups flag instead
of relocatable link type.
(_bfd_elf_init_private_section_data): Use resolve_section_groups
flag instead of checking the final_link flag for part of the
checks in here. Fix white space as a result.
* elflink.c (elf_link_input_bfd): Use resolve_section_groups flag
instead of relocatable link type.
(bfd_elf_final_link): Likewise.
include/ChangeLog:
* bfdlink.h (struct bfd_link_info): Add new resolve_section_groups
flag.
ld/ChangeLog:
* ld.h (struct args_type): Add force_group_allocation field.
* ldgram.y: Add support for FORCE_GROUP_ALLOCATION.
* ldlex.h: Likewise.
* ldlex.l: Likewise.
* lexsup.c: Likewise.
* ldlang.c (unique_section_p): Check resolve_section_groups flag
not the relaxable link flag.
(lang_add_section): Discard section groups when we're resolving
groups. Clear the SEC_LINK_ONCE flag if we're resolving section
groups.
* ldmain.c (main): Initialise resolve_section_groups flag in
link_info based on command line flags.
* testsuite/ld-elf/group11.d: New file.
* testsuite/ld-elf/group12.d: New file.
* testsuite/ld-elf/group12.ld: New file.
* NEWS: Mention new features.
* ld.texinfo (Options): Document --force-group-allocation.
(Miscellaneous Commands): Document FORCE_GROUP_ALLOCATION.
2017-03-23 01:27:49 +08:00
|
|
|
--force-group-allocation on the command line or FORCE_GROUP_ALLOCATION
|
|
|
|
in the linker script. */
|
|
|
|
bfd_boolean force_group_allocation;
|
|
|
|
|
2007-05-07 23:04:53 +08:00
|
|
|
/* Big or little endian as set on command line. */
|
2009-09-11 23:27:38 +08:00
|
|
|
enum endian_enum endian;
|
2007-05-07 23:04:53 +08:00
|
|
|
|
|
|
|
/* Name of runtime interpreter to invoke. */
|
|
|
|
char *interpreter;
|
|
|
|
|
2016-11-26 04:01:44 +08:00
|
|
|
/* Name to give runtime library from the -soname argument. */
|
2007-05-07 23:04:53 +08:00
|
|
|
char *soname;
|
|
|
|
|
|
|
|
/* Runtime library search path from the -rpath argument. */
|
|
|
|
char *rpath;
|
|
|
|
|
|
|
|
/* Link time runtime library search path from the -rpath-link
|
|
|
|
argument. */
|
|
|
|
char *rpath_link;
|
|
|
|
|
|
|
|
/* Name of shared object whose symbol table should be filtered with
|
|
|
|
this shared object. From the --filter option. */
|
|
|
|
char *filter_shlib;
|
|
|
|
|
|
|
|
/* Name of shared object for whose symbol table this shared object
|
|
|
|
is an auxiliary filter. From the --auxiliary option. */
|
|
|
|
char **auxiliary_filters;
|
|
|
|
|
|
|
|
/* A version symbol to be applied to the symbol names found in the
|
|
|
|
.exports sections. */
|
|
|
|
char *version_exports_section;
|
|
|
|
|
|
|
|
/* Default linker script. */
|
|
|
|
char *default_script;
|
1999-05-03 15:29:11 +08:00
|
|
|
} args_type;
|
|
|
|
|
|
|
|
extern args_type command_line;
|
|
|
|
|
|
|
|
typedef int token_code_type;
|
|
|
|
|
ld: Extend options for altering orphan handling behaviour.
Replace the options --warn-orphan and --no-warn-orphan with a single
option --orphan-handling=MODE, where mode can be place, warn, error, and
discard.
Mode 'place' is the default, and is the current behaviour, placing the
orphan section into a suitable output section.
Mode 'warn' is the same as '--warn-orphan'. The orphan is also placed
using the same algorithm as for 'place'.
Mode 'error' is the same as '--warn-orphan' and '--fatal-warnings'.
Mode 'discard' assigns all output sections to the /DISCARD/ section.
ld/ChangeLog:
* ld.h (enum orphan_handling_enum): New.
(ld_config_type): Remove warn_orphan, add orphan_handling.
* ldemul.c (ldemul_place_orphan): Remove warning about orphan
sections.
* ldlang.c (ldlang_place_orphan): New function.
(lang_place_orphans): Call ldlang_place_orphan.
* ldlex.h (enum option_values): Remove OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add OPTION_ORPHAN_HANDLING.
* lexsup.c (ld_options): Remove 'warn-orphan' and
'no-warn-orphan', add 'orphan-handling'.
(parse_args): Remove handling for OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add handling for OPTION_ORPHAN_HANDLING.
* NEWS: Replace text about --warn-orphan with --orphan-handling.
* ld.texinfo (Options): Remove --warn-orphan entry and add
entry on --orphan-handling.
(Orphan Sections): Add reference to relevant command line options.
ld/testsuite/ChangeLog:
* ld-elf/elf.exp: Switch to rely on run_dump_test.
* ld-elf/orphan-5.l: Update expected output.
* ld-elf/orphan-5.d: New file.
* ld-elf/orphan-6.d: New file.
* ld-elf/orphan-6.l: New file.
* ld-elf/orphan-7.d: New file.
* ld-elf/orphan-7.map: New file.
* ld-elf/orphan-8.d: New file.
* ld-elf/orphan-8.map: New file.
2015-07-29 02:20:37 +08:00
|
|
|
/* Different ways we can handle orphan sections. */
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
enum orphan_handling_enum
|
|
|
|
{
|
ld: Extend options for altering orphan handling behaviour.
Replace the options --warn-orphan and --no-warn-orphan with a single
option --orphan-handling=MODE, where mode can be place, warn, error, and
discard.
Mode 'place' is the default, and is the current behaviour, placing the
orphan section into a suitable output section.
Mode 'warn' is the same as '--warn-orphan'. The orphan is also placed
using the same algorithm as for 'place'.
Mode 'error' is the same as '--warn-orphan' and '--fatal-warnings'.
Mode 'discard' assigns all output sections to the /DISCARD/ section.
ld/ChangeLog:
* ld.h (enum orphan_handling_enum): New.
(ld_config_type): Remove warn_orphan, add orphan_handling.
* ldemul.c (ldemul_place_orphan): Remove warning about orphan
sections.
* ldlang.c (ldlang_place_orphan): New function.
(lang_place_orphans): Call ldlang_place_orphan.
* ldlex.h (enum option_values): Remove OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add OPTION_ORPHAN_HANDLING.
* lexsup.c (ld_options): Remove 'warn-orphan' and
'no-warn-orphan', add 'orphan-handling'.
(parse_args): Remove handling for OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add handling for OPTION_ORPHAN_HANDLING.
* NEWS: Replace text about --warn-orphan with --orphan-handling.
* ld.texinfo (Options): Remove --warn-orphan entry and add
entry on --orphan-handling.
(Orphan Sections): Add reference to relevant command line options.
ld/testsuite/ChangeLog:
* ld-elf/elf.exp: Switch to rely on run_dump_test.
* ld-elf/orphan-5.l: Update expected output.
* ld-elf/orphan-5.d: New file.
* ld-elf/orphan-6.d: New file.
* ld-elf/orphan-6.l: New file.
* ld-elf/orphan-7.d: New file.
* ld-elf/orphan-7.map: New file.
* ld-elf/orphan-8.d: New file.
* ld-elf/orphan-8.map: New file.
2015-07-29 02:20:37 +08:00
|
|
|
/* The classic strategy, find a suitable section to place the orphan
|
|
|
|
into. */
|
|
|
|
orphan_handling_place = 0,
|
|
|
|
|
|
|
|
/* Discard any orphan sections as though they were assign to the section
|
|
|
|
/DISCARD/. */
|
|
|
|
orphan_handling_discard,
|
|
|
|
|
|
|
|
/* Find somewhere to place the orphan section, as with
|
|
|
|
ORPHAN_HANDLING_PLACE, but also issue a warning. */
|
|
|
|
orphan_handling_warn,
|
|
|
|
|
|
|
|
/* Issue a fatal error if any orphan sections are found. */
|
|
|
|
orphan_handling_error,
|
|
|
|
};
|
|
|
|
|
2016-02-25 18:33:29 +08:00
|
|
|
typedef struct
|
|
|
|
{
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean magic_demand_paged;
|
|
|
|
bfd_boolean make_executable;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, -shared is supported. */
|
1999-05-03 15:29:11 +08:00
|
|
|
/* ??? A better way to do this is perhaps to define this in the
|
|
|
|
ld_emulation_xfer_struct since this is really a target dependent
|
|
|
|
parameter. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean has_shared;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, build constructors. */
|
|
|
|
bfd_boolean build_constructors;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, warn about any constructors. */
|
|
|
|
bfd_boolean warn_constructors;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, warn about merging common symbols with others. */
|
|
|
|
bfd_boolean warn_common;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, only warn once about a particular undefined symbol. */
|
|
|
|
bfd_boolean warn_once;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
ld: Extend options for altering orphan handling behaviour.
Replace the options --warn-orphan and --no-warn-orphan with a single
option --orphan-handling=MODE, where mode can be place, warn, error, and
discard.
Mode 'place' is the default, and is the current behaviour, placing the
orphan section into a suitable output section.
Mode 'warn' is the same as '--warn-orphan'. The orphan is also placed
using the same algorithm as for 'place'.
Mode 'error' is the same as '--warn-orphan' and '--fatal-warnings'.
Mode 'discard' assigns all output sections to the /DISCARD/ section.
ld/ChangeLog:
* ld.h (enum orphan_handling_enum): New.
(ld_config_type): Remove warn_orphan, add orphan_handling.
* ldemul.c (ldemul_place_orphan): Remove warning about orphan
sections.
* ldlang.c (ldlang_place_orphan): New function.
(lang_place_orphans): Call ldlang_place_orphan.
* ldlex.h (enum option_values): Remove OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add OPTION_ORPHAN_HANDLING.
* lexsup.c (ld_options): Remove 'warn-orphan' and
'no-warn-orphan', add 'orphan-handling'.
(parse_args): Remove handling for OPTION_WARN_ORPHAN and
OPTION_NO_WARN_ORPHAN, add handling for OPTION_ORPHAN_HANDLING.
* NEWS: Replace text about --warn-orphan with --orphan-handling.
* ld.texinfo (Options): Remove --warn-orphan entry and add
entry on --orphan-handling.
(Orphan Sections): Add reference to relevant command line options.
ld/testsuite/ChangeLog:
* ld-elf/elf.exp: Switch to rely on run_dump_test.
* ld-elf/orphan-5.l: Update expected output.
* ld-elf/orphan-5.d: New file.
* ld-elf/orphan-6.d: New file.
* ld-elf/orphan-6.l: New file.
* ld-elf/orphan-7.d: New file.
* ld-elf/orphan-7.map: New file.
* ld-elf/orphan-8.d: New file.
* ld-elf/orphan-8.map: New file.
2015-07-29 02:20:37 +08:00
|
|
|
/* How should we deal with orphan sections. */
|
|
|
|
enum orphan_handling_enum orphan_handling;
|
2015-04-07 23:29:41 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, warn if multiple global-pointers are needed (Alpha
|
1999-05-03 15:29:11 +08:00
|
|
|
only). */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean warn_multiple_gp;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, warn if the starting address of an output section
|
1999-05-03 15:29:11 +08:00
|
|
|
changes due to the alignment of an input section. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean warn_section_align;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
/* If TRUE, warning messages are fatal */
|
|
|
|
bfd_boolean fatal_warnings;
|
2001-04-13 10:22:23 +08:00
|
|
|
|
2008-06-01 00:35:56 +08:00
|
|
|
sort_order sort_common;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean text_read_only;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean stats;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2000-09-05 11:05:19 +08:00
|
|
|
/* If set, orphan input sections will be mapped to separate output
|
|
|
|
sections. */
|
2002-11-30 16:39:46 +08:00
|
|
|
bfd_boolean unique_orphan_sections;
|
2000-09-05 11:05:19 +08:00
|
|
|
|
2007-05-07 23:04:53 +08:00
|
|
|
/* If set, only search library directories explicitly selected
|
|
|
|
on the command line. */
|
|
|
|
bfd_boolean only_cmd_line_lib_dirs;
|
2001-11-02 09:13:09 +08:00
|
|
|
|
2011-01-13 21:29:55 +08:00
|
|
|
/* If set, numbers and absolute symbols are simply treated as
|
|
|
|
numbers everywhere. */
|
|
|
|
bfd_boolean sane_expr;
|
|
|
|
|
2012-11-22 03:56:38 +08:00
|
|
|
/* If set, code and non-code sections should never be in one segment. */
|
|
|
|
bfd_boolean separate_code;
|
|
|
|
|
2007-03-28 22:42:28 +08:00
|
|
|
/* The rpath separation character. Usually ':'. */
|
|
|
|
char rpath_separator;
|
|
|
|
|
2007-05-07 23:04:53 +08:00
|
|
|
char *map_filename;
|
|
|
|
FILE *map_file;
|
|
|
|
|
|
|
|
unsigned int split_by_reloc;
|
|
|
|
bfd_size_type split_by_file;
|
|
|
|
|
2004-05-21 23:38:04 +08:00
|
|
|
/* The size of the hash table to use. */
|
2011-04-20 20:52:16 +08:00
|
|
|
unsigned long hash_table_size;
|
2006-05-31 00:45:32 +08:00
|
|
|
|
|
|
|
/* The maximum page size for ELF. */
|
|
|
|
bfd_vma maxpagesize;
|
|
|
|
|
|
|
|
/* The common page size for ELF. */
|
|
|
|
bfd_vma commonpagesize;
|
2019-04-03 04:17:16 +08:00
|
|
|
|
|
|
|
/* If set, print discarded sections in map file output. */
|
|
|
|
bfd_boolean print_map_discarded;
|
1999-05-03 15:29:11 +08:00
|
|
|
} ld_config_type;
|
|
|
|
|
|
|
|
extern ld_config_type config;
|
|
|
|
|
2001-08-12 15:59:28 +08:00
|
|
|
extern FILE * saved_script_handle;
|
2002-11-30 16:39:46 +08:00
|
|
|
extern bfd_boolean force_make_executable;
|
1999-05-03 15:29:11 +08:00
|
|
|
|
2003-06-28 13:28:54 +08:00
|
|
|
extern int yyparse (void);
|
|
|
|
extern void add_cref (const char *, bfd *, asection *, bfd_vma);
|
2006-07-19 09:50:23 +08:00
|
|
|
extern bfd_boolean handle_asneeded_cref (bfd *, enum notice_asneeded_action);
|
2003-06-28 13:28:54 +08:00
|
|
|
extern void output_cref (FILE *);
|
|
|
|
extern void check_nocrossrefs (void);
|
|
|
|
extern void ld_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
|
1999-09-13 00:59:49 +08:00
|
|
|
|
2000-04-29 08:56:29 +08:00
|
|
|
/* If gcc >= 2.6, we can give a function name, too. */
|
|
|
|
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
|
2003-06-28 13:28:54 +08:00
|
|
|
#define __PRETTY_FUNCTION__ NULL
|
1999-09-13 00:59:49 +08:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#undef abort
|
|
|
|
#define abort() ld_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
|
|
|
|
|
1999-05-03 15:29:11 +08:00
|
|
|
#endif
|