* ldlang.h (struct lang_input_statement_flags): New, extract from..

(lang_input_statement_type): ..here.  New field "flags".
	(input_flags): Declare.
	(missing_file): Delete.
	* ldmain.h (whole_archive): Delete.
	(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
	* ld.h (ld_config_type <dynamic_link>): Delete.
	* ldmain.c (whole_archive): Delete.
	(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
	* ldlang.c (missing_file, ldlang_sysrooted_script): Delete.
	(input_flags): New variable.  Replace all uses of config.dynamic_link,
	missing_file, ldlang_sysrooted_script, whole_archive,
	add_DT_NEEDED_for_regular and add_DT_NEEDED_for_dynamic with fields
	from here.
	* ldfile.c: Likewise.
	* ldgram.y: Likewise.
	* ldmain.c: Likewise.
	* ldwrite.c: Likewise.
	* lexsup.c: Likewise.
	* plugin.c: Likewise.
	* emultempl/aix.em: Likewise.
	* emultempl/armelf.em: Likewise.
	* emultempl/elf32.em: Likewise.
	* emultempl/hppaelf.em: Likewise.
	* emultempl/linux.em: Likewise.
	* emultempl/pe.em: Likewise.
	* emultempl/pep.em: Likewise.
	* emultempl/ppc64elf.em: Likewise.
	* emultempl/scoreelf.em: Likewise.
	* emultempl/spuelf.em: Likewise.
	* emultempl/sunos.em: Likewise.
	* emultempl/vms.em: Likewise.
	* ldlang.c (new_afile): Use memset to init zero fields.
	(load_symbols): Simplify save and restore of flags around command
	file processing.
	* ldfile.c (is_sysrooted_pathname): Tidy.
This commit is contained in:
Alan Modra 2012-03-05 22:43:40 +00:00
parent d8df103b50
commit 66be105571
23 changed files with 245 additions and 244 deletions

View File

@ -1,3 +1,42 @@
2012-03-06 Alan Modra <amodra@gmail.com>
* ldlang.h (struct lang_input_statement_flags): New, extract from..
(lang_input_statement_type): ..here. New field "flags".
(input_flags): Declare.
(missing_file): Delete.
* ldmain.h (whole_archive): Delete.
(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
* ld.h (ld_config_type <dynamic_link>): Delete.
* ldmain.c (whole_archive): Delete.
(add_DT_NEEDED_for_regular, add_DT_NEEDED_for_dynamic): Delete.
* ldlang.c (missing_file, ldlang_sysrooted_script): Delete.
(input_flags): New variable. Replace all uses of config.dynamic_link,
missing_file, ldlang_sysrooted_script, whole_archive,
add_DT_NEEDED_for_regular and add_DT_NEEDED_for_dynamic with fields
from here.
* ldfile.c: Likewise.
* ldgram.y: Likewise.
* ldmain.c: Likewise.
* ldwrite.c: Likewise.
* lexsup.c: Likewise.
* plugin.c: Likewise.
* emultempl/aix.em: Likewise.
* emultempl/armelf.em: Likewise.
* emultempl/elf32.em: Likewise.
* emultempl/hppaelf.em: Likewise.
* emultempl/linux.em: Likewise.
* emultempl/pe.em: Likewise.
* emultempl/pep.em: Likewise.
* emultempl/ppc64elf.em: Likewise.
* emultempl/scoreelf.em: Likewise.
* emultempl/spuelf.em: Likewise.
* emultempl/sunos.em: Likewise.
* emultempl/vms.em: Likewise.
* ldlang.c (new_afile): Use memset to init zero fields.
(load_symbols): Simplify save and restore of flags around command
file processing.
* ldfile.c (is_sysrooted_pathname): Tidy.
2012-03-05 Hans-Peter Nilsson <hp@axis.com>
* configure.tgt (mips64*el-*-freebsd*, mips64*-*-freebsd*)

View File

@ -10,7 +10,7 @@ fragment <<EOF
/* AIX emulation code for ${EMULATION_NAME}
Copyright 1991, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012
Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
AIX support by Ian Lance Taylor <ian@cygnus.com>
@ -145,7 +145,7 @@ gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = TRUE;
/* The link_info.[init|fini]_functions are initialized in ld/lexsup.c.
@ -669,7 +669,7 @@ gld${EMULATION_NAME}_unrecognized_file (lang_input_statement_type *entry)
*flpp = n;
ret = TRUE;
entry->loaded = TRUE;
entry->flags.loaded = TRUE;
}
fclose (e);
@ -1505,7 +1505,7 @@ gld${EMULATION_NAME}_open_dynamic_archive (const char *arch,
{
char *path;
if (!entry->maybe_archive)
if (!entry->flags.maybe_archive)
return FALSE;
path = concat (search->name, "/lib", entry->filename, arch, ".a", NULL);

View File

@ -1,6 +1,6 @@
# This shell script emits a C file. -*- C -*-
# Copyright 1991, 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
# 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
@ -50,7 +50,7 @@ gld${EMULATION_NAME}_before_parse (void)
#ifndef TARGET_ /* I.e., if not generic. */
ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
#endif /* not TARGET_ */
config.dynamic_link = ${DYNAMIC_LINK-TRUE};
input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
}
@ -240,7 +240,7 @@ build_section_lists (lang_statement_union_type *statement)
{
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0
&& i->output_section != NULL
&& i->output_section->owner == link_info.output_bfd)

View File

@ -13,7 +13,7 @@ fragment <<EOF
/* ${ELFSIZE} bit ELF emulation code for ${EMULATION_NAME}
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
ELF support by Ian Lance Taylor <ian@cygnus.com>
@ -102,7 +102,7 @@ static void
gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
config.dynamic_link = ${DYNAMIC_LINK-TRUE};
input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
}
@ -121,16 +121,16 @@ gld${EMULATION_NAME}_load_symbols (lang_input_statement_type *entry)
/* Tell the ELF linker that we don't want the output file to have a
DT_NEEDED entry for this file, unless it is used to resolve
references in a regular object. */
if (entry->add_DT_NEEDED_for_regular)
if (entry->flags.add_DT_NEEDED_for_regular)
link_class = DYN_AS_NEEDED;
/* Tell the ELF linker that we don't want the output file to have a
DT_NEEDED entry for any dynamic library in DT_NEEDED tags from
this file at all. */
if (!entry->add_DT_NEEDED_for_dynamic)
if (!entry->flags.add_DT_NEEDED_for_dynamic)
link_class |= DYN_NO_ADD_NEEDED;
if (entry->just_syms_flag
if (entry->flags.just_syms
&& (bfd_get_file_flags (entry->the_bfd) & DYNAMIC) != 0)
einfo (_("%P%F: --just-symbols may not be used on DSO: %B\n"),
entry->the_bfd);
@ -862,7 +862,7 @@ gld${EMULATION_NAME}_check_needed (lang_input_statement_type *s)
return;
}
if (s->search_dirs_flag)
if (s->flags.search_dirs)
{
const char *f = strrchr (s->filename, '/');
if (f != NULL
@ -1560,7 +1560,7 @@ ${ELF_INTERPRETER_SET_DEFAULT}
char *msg;
bfd_boolean ret;
if (is->just_syms_flag)
if (is->flags.just_syms)
continue;
s = bfd_get_section_by_name (is->the_bfd, ".gnu.warning");
@ -1621,7 +1621,7 @@ gld${EMULATION_NAME}_open_dynamic_archive
const char *filename;
char *string;
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
return FALSE;
filename = entry->filename;
@ -1675,7 +1675,7 @@ gld${EMULATION_NAME}_open_dynamic_archive
if (bfd_check_format (entry->the_bfd, bfd_object)
&& (entry->the_bfd->flags & DYNAMIC) != 0)
{
ASSERT (entry->maybe_archive && entry->search_dirs_flag);
ASSERT (entry->flags.maybe_archive && entry->flags.search_dirs);
/* Rather than duplicating the logic above. Just use the
filename we recorded earlier. */

View File

@ -1,6 +1,6 @@
# This shell script emits a C file. -*- C -*-
# Copyright 1991, 1993, 1994, 1997, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
# 2005, 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
@ -229,7 +229,7 @@ build_section_lists (lang_statement_union_type *statement)
{
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0
&& i->output_section != NULL
&& i->output_section->owner == link_info.output_bfd)

View File

@ -10,7 +10,7 @@ fragment <<EOF
/* Linux a.out emulation code for ${EMULATION_NAME}
Copyright 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
2003, 2004, 2005, 2007, 2008, 2012 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
Linux support by Eric Youngdale <ericy@cais.cais.com>
@ -49,7 +49,7 @@ static void
gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = TRUE;
}
@ -62,7 +62,7 @@ gld${EMULATION_NAME}_open_dynamic_archive
{
char *string;
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
return FALSE;
string = (char *) xmalloc (strlen (search->name)

View File

@ -9,7 +9,8 @@ rm -f e${EMULATION_NAME}.c
(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
fragment <<EOF
/* Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of the GNU Binutils.
@ -164,7 +165,7 @@ gld_${EMULATION_NAME}_before_parse (void)
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
output_filename = "${EXECUTABLE_NAME:-a.exe}";
#ifdef DLL_SUPPORT
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = 1;
EOF
@ -2093,7 +2094,7 @@ gld_${EMULATION_NAME}_open_dynamic_archive
unsigned int i;
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
return FALSE;
filename = entry->filename;

View File

@ -8,7 +8,7 @@ fi
rm -f e${EMULATION_NAME}.c
(echo;echo;echo;echo;echo)>e${EMULATION_NAME}.c # there, now line numbers match ;-)
fragment <<EOF
/* Copyright 2006, 2007, 2008, 2009, 2010, 2011
/* Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
Written by Kai Tietz, OneVision Software GmbH&CoKg.
@ -139,7 +139,7 @@ gld_${EMULATION_NAME}_before_parse (void)
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
output_filename = "${EXECUTABLE_NAME:-a.exe}";
#ifdef DLL_SUPPORT
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = 1;
link_info.pei386_auto_import = 1;
link_info.pei386_runtime_pseudo_reloc = 2; /* Use by default version 2. */
@ -1830,7 +1830,7 @@ gld_${EMULATION_NAME}_open_dynamic_archive
unsigned int i;
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
return FALSE;
filename = entry->filename;

View File

@ -435,7 +435,7 @@ build_toc_list (lang_statement_union_type *statement)
{
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0
&& i->output_section == toc_section)
{
@ -453,7 +453,7 @@ build_section_lists (lang_statement_union_type *statement)
{
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0
&& i->output_section != NULL
&& i->output_section->owner == link_info.output_bfd)

View File

@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
# Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
# Copyright 2006, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
# Contributed by:
# Brain.lin (brain.lin@sunplusct.com)
# Mei Ligang (ligang@sunnorth.com.cn)
@ -36,7 +36,7 @@ gld${EMULATION_NAME}_before_parse ()
#ifndef TARGET_ /* I.e., if not generic. */
ldfile_set_output_arch ("`echo ${ARCH}`", bfd_arch_unknown);
#endif /* not TARGET_ */
config.dynamic_link = ${DYNAMIC_LINK-TRUE};
input_flags.dynamic = ${DYNAMIC_LINK-TRUE};
config.has_shared = `if test -n "$GENERATE_SHLIB_SCRIPT" ; then echo TRUE ; else echo FALSE ; fi`;
}

View File

@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
# Copyright 2006, 2007, 2008, 2009, 2010, 2011
# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
@ -579,7 +579,7 @@ embedded_spu_file (lang_input_statement_type *entry, const char *flags)
/* Ensure bfd sections are excluded from the output. */
bfd_section_list_clear (entry->the_bfd);
entry->loaded = TRUE;
entry->flags.loaded = TRUE;
return TRUE;
}

View File

@ -10,7 +10,8 @@ fragment <<EOF
/* SunOS emulation code for ${EMULATION_NAME}
Copyright 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
2002, 2003, 2004, 2005, 2006, 2007, 2008, 2012
Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
SunOS shared library support by Ian Lance Taylor <ian@cygnus.com>
@ -85,7 +86,7 @@ static void
gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${OUTPUT_ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = TRUE;
}
@ -156,9 +157,9 @@ gld${EMULATION_NAME}_find_so (lang_input_statement_type *inp)
char *alc;
struct stat st;
if (! inp->search_dirs_flag
|| ! inp->maybe_archive
|| ! inp->dynamic)
if (! inp->flags.search_dirs
|| ! inp->flags.maybe_archive
|| ! inp->flags.dynamic)
return;
ASSERT (CONST_STRNEQ (inp->local_sym_name, "-l"));
@ -188,7 +189,7 @@ gld${EMULATION_NAME}_find_so (lang_input_statement_type *inp)
/* Turn off the search_dirs_flag to prevent ldfile_open_file from
searching for this file again. */
inp->search_dirs_flag = FALSE;
inp->flags.search_dirs = FALSE;
free (found);
@ -891,7 +892,7 @@ gld${EMULATION_NAME}_count_need (lang_input_statement_type *inp)
{
++need_entries;
need_size += NEED_ENTRY_SIZE;
if (! inp->maybe_archive)
if (! inp->flags.maybe_archive)
need_size += strlen (inp->filename) + 1;
else
{
@ -919,7 +920,7 @@ gld${EMULATION_NAME}_set_need (lang_input_statement_type *inp)
referential locality. */
bfd_put_32 (link_info.output_bfd, need_pnames - need_contents,
need_pinfo);
if (! inp->maybe_archive)
if (! inp->flags.maybe_archive)
{
bfd_put_32 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 4);
bfd_put_16 (link_info.output_bfd, (bfd_vma) 0, need_pinfo + 8);

View File

@ -1,5 +1,5 @@
# This shell script emits a C file. -*- C -*-
# Copyright 2010
# Copyright 2010, 2012
# Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
@ -29,7 +29,7 @@ static void
gld${EMULATION_NAME}_before_parse (void)
{
ldfile_set_output_arch ("${ARCH}", bfd_arch_`echo ${ARCH} | sed -e 's/:.*//'`);
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
config.has_shared = FALSE; /* Not yet. */
}
@ -54,7 +54,7 @@ gld${EMULATION_NAME}_open_dynamic_archive (const char *arch ATTRIBUTE_UNUSED,
{
char *string;
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
return FALSE;
string = (char *) xmalloc (strlen (search->name)

View File

@ -250,9 +250,6 @@ typedef struct {
bfd_boolean magic_demand_paged;
bfd_boolean make_executable;
/* If TRUE, doing a dynamic link. */
bfd_boolean dynamic_link;
/* If TRUE, -shared is supported. */
/* ??? A better way to do this is perhaps to define this in the
ld_emulation_xfer_struct since this is really a target dependent

View File

@ -72,27 +72,29 @@ static search_arch_type **search_arch_tail_ptr = &search_arch_head;
static bfd_boolean
is_sysrooted_pathname (const char *name, bfd_boolean notsame)
{
char * realname = ld_canon_sysroot ? lrealpath (name) : NULL;
char *realname;
int len;
bfd_boolean result;
if (! realname)
if (ld_canon_sysroot == NULL)
return FALSE;
realname = lrealpath (name);
len = strlen (realname);
result = FALSE;
if (len == ld_canon_sysroot_len)
result = !notsame;
else if (len > ld_canon_sysroot_len
&& IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len]))
{
result = TRUE;
realname[ld_canon_sysroot_len] = '\0';
}
if (((! notsame && len == ld_canon_sysroot_len)
|| (len >= ld_canon_sysroot_len
&& IS_DIR_SEPARATOR (realname[ld_canon_sysroot_len])
&& (realname[ld_canon_sysroot_len] = '\0') == '\0'))
&& FILENAME_CMP (ld_canon_sysroot, realname) == 0)
result = TRUE;
else
result = FALSE;
if (realname)
free (realname);
if (result)
result = FILENAME_CMP (ld_canon_sysroot, realname) == 0;
free (realname);
return result;
}
@ -164,7 +166,7 @@ ldfile_try_open_bfd (const char *attempt,
checks out compatible, do not exit early returning TRUE, or
the plugins will not get a chance to claim the file. */
if (entry->search_dirs_flag || !entry->dynamic)
if (entry->flags.search_dirs || !entry->flags.dynamic)
{
bfd *check;
@ -178,7 +180,7 @@ ldfile_try_open_bfd (const char *attempt,
if (! bfd_check_format (check, bfd_object))
{
if (check == entry->the_bfd
&& entry->search_dirs_flag
&& entry->flags.search_dirs
&& bfd_get_error () == bfd_error_file_not_recognized
&& ! ldemul_unrecognized_file (entry))
{
@ -274,7 +276,7 @@ ldfile_try_open_bfd (const char *attempt,
goto success;
}
if (!entry->dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
if (!entry->flags.dynamic && (entry->the_bfd->flags & DYNAMIC) != 0)
{
einfo (_("%F%P: attempted static link of dynamic object `%s'\n"),
attempt);
@ -283,7 +285,7 @@ ldfile_try_open_bfd (const char *attempt,
return FALSE;
}
if (entry->search_dirs_flag
if (entry->flags.search_dirs
&& !bfd_arch_get_compatible (check, link_info.output_bfd,
command_line.accept_unknown_input_arch)
/* XCOFF archives can have 32 and 64 bit objects. */
@ -348,9 +350,9 @@ ldfile_open_file_search (const char *arch,
/* If this is not an archive, try to open it in the current
directory first. */
if (! entry->maybe_archive)
if (! entry->flags.maybe_archive)
{
if (entry->sysrooted && IS_ABSOLUTE_PATH (entry->filename))
if (entry->flags.sysrooted && IS_ABSOLUTE_PATH (entry->filename))
{
char *name = concat (ld_sysroot, entry->filename,
(const char *) NULL);
@ -363,8 +365,9 @@ ldfile_open_file_search (const char *arch,
}
else if (ldfile_try_open_bfd (entry->filename, entry))
{
entry->sysrooted = IS_ABSOLUTE_PATH (entry->filename)
&& is_sysrooted_pathname (entry->filename, TRUE);
entry->flags.sysrooted
= (IS_ABSOLUTE_PATH (entry->filename)
&& is_sysrooted_pathname (entry->filename, TRUE));
return TRUE;
}
@ -376,16 +379,16 @@ ldfile_open_file_search (const char *arch,
{
char *string;
if (entry->dynamic && ! link_info.relocatable)
if (entry->flags.dynamic && ! link_info.relocatable)
{
if (ldemul_open_dynamic_archive (arch, search, entry))
{
entry->sysrooted = search->sysrooted;
entry->flags.sysrooted = search->sysrooted;
return TRUE;
}
}
if (entry->maybe_archive)
if (entry->flags.maybe_archive)
string = concat (search->name, slash, lib, entry->filename,
arch, suffix, (const char *) NULL);
else
@ -395,7 +398,7 @@ ldfile_open_file_search (const char *arch,
if (ldfile_try_open_bfd (string, entry))
{
entry->filename = string;
entry->sysrooted = search->sysrooted;
entry->flags.sysrooted = search->sysrooted;
return TRUE;
}
@ -416,7 +419,7 @@ ldfile_open_file (lang_input_statement_type *entry)
if (entry->the_bfd != NULL)
return;
if (! entry->search_dirs_flag)
if (! entry->flags.search_dirs)
{
if (ldfile_try_open_bfd (entry->filename, entry))
return;
@ -427,8 +430,8 @@ ldfile_open_file (lang_input_statement_type *entry)
else
einfo (_("%P: cannot find %s: %E\n"), entry->local_sym_name);
entry->missing_file = TRUE;
missing_file = TRUE;
entry->flags.missing_file = TRUE;
input_flags.missing_file = TRUE;
}
else
{
@ -454,18 +457,18 @@ ldfile_open_file (lang_input_statement_type *entry)
/* If we have found the file, we don't need to search directories
again. */
if (found)
entry->search_dirs_flag = FALSE;
entry->flags.search_dirs = FALSE;
else
{
if (entry->sysrooted
if (entry->flags.sysrooted
&& ld_sysroot
&& IS_ABSOLUTE_PATH (entry->local_sym_name))
einfo (_("%P: cannot find %s inside %s\n"),
entry->local_sym_name, ld_sysroot);
else
einfo (_("%P: cannot find %s\n"), entry->local_sym_name);
entry->missing_file = TRUE;
missing_file = TRUE;
entry->flags.missing_file = TRUE;
input_flags.missing_file = TRUE;
}
}
}

View File

@ -386,17 +386,20 @@ input_list:
{ lang_add_input_file($2,lang_input_file_is_l_enum,
(char *)NULL); }
| AS_NEEDED '('
{ $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
input_list ')'
{ add_DT_NEEDED_for_regular = $<integer>3; }
{ input_flags.add_DT_NEEDED_for_regular = $<integer>3; }
| input_list ',' AS_NEEDED '('
{ $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
input_list ')'
{ add_DT_NEEDED_for_regular = $<integer>5; }
{ input_flags.add_DT_NEEDED_for_regular = $<integer>5; }
| input_list AS_NEEDED '('
{ $<integer>$ = add_DT_NEEDED_for_regular; add_DT_NEEDED_for_regular = TRUE; }
{ $<integer>$ = input_flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_regular = TRUE; }
input_list ')'
{ add_DT_NEEDED_for_regular = $<integer>4; }
{ input_flags.add_DT_NEEDED_for_regular = $<integer>4; }
;
sections:

View File

@ -69,7 +69,6 @@ static struct bfd_hash_table lang_definedness_table;
static lang_statement_list_type *stat_save[10];
static lang_statement_list_type **stat_save_ptr = &stat_save[0];
static struct unique_sections *unique_section_list;
static bfd_boolean ldlang_sysrooted_script = FALSE;
/* Forward declarations. */
static void exp_init_os (etree_type *);
@ -100,6 +99,7 @@ lang_statement_list_type file_chain = { NULL, NULL };
lang_statement_list_type input_file_chain;
struct bfd_sym_chain entry_symbol = { NULL, NULL };
const char *entry_section = ".text";
struct lang_input_statement_flags input_flags;
bfd_boolean entry_from_cmdline;
bfd_boolean undef_from_cmdline;
bfd_boolean lang_has_input_file = FALSE;
@ -108,7 +108,6 @@ bfd_boolean lang_float_flag = FALSE;
bfd_boolean delete_output_file_on_failure = FALSE;
struct lang_phdr *lang_phdr_list;
struct lang_nocrossrefs *nocrossref_list;
bfd_boolean missing_file = FALSE;
/* Functions that traverse the linker script and might evaluate
DEFINED() need to increment this. */
@ -731,7 +730,7 @@ walk_wild_section (lang_wild_statement_type *ptr,
callback_t callback,
void *data)
{
if (file->just_syms_flag)
if (file->flags.just_syms)
return;
(*ptr->walk_wild_section_handler) (ptr, file, callback, data);
@ -1046,6 +1045,8 @@ new_afile (const char *name,
{
lang_input_statement_type *p;
lang_has_input_file = TRUE;
if (add_to_list)
p = (lang_input_statement_type *) new_stat (lang_input_statement, stat_ptr);
else
@ -1056,9 +1057,13 @@ new_afile (const char *name,
p->header.next = NULL;
}
lang_has_input_file = TRUE;
memset (&p->the_bfd, 0,
sizeof (*p) - offsetof (lang_input_statement_type, the_bfd));
p->target = target;
p->sysrooted = FALSE;
p->flags.dynamic = input_flags.dynamic;
p->flags.add_DT_NEEDED_for_dynamic = input_flags.add_DT_NEEDED_for_dynamic;
p->flags.add_DT_NEEDED_for_regular = input_flags.add_DT_NEEDED_for_regular;
p->flags.whole_archive = input_flags.whole_archive;
if (file_type == lang_input_file_is_l_enum
&& name[0] == ':' && name[1] != '\0')
@ -1071,70 +1076,41 @@ new_afile (const char *name,
{
case lang_input_file_is_symbols_only_enum:
p->filename = name;
p->maybe_archive = FALSE;
p->real = TRUE;
p->local_sym_name = name;
p->just_syms_flag = TRUE;
p->search_dirs_flag = FALSE;
p->flags.real = TRUE;
p->flags.just_syms = TRUE;
break;
case lang_input_file_is_fake_enum:
p->filename = name;
p->maybe_archive = FALSE;
p->real = FALSE;
p->local_sym_name = name;
p->just_syms_flag = FALSE;
p->search_dirs_flag = FALSE;
break;
case lang_input_file_is_l_enum:
p->maybe_archive = TRUE;
p->filename = name;
p->real = TRUE;
p->local_sym_name = concat ("-l", name, (const char *) NULL);
p->just_syms_flag = FALSE;
p->search_dirs_flag = TRUE;
p->flags.maybe_archive = TRUE;
p->flags.real = TRUE;
p->flags.search_dirs = TRUE;
break;
case lang_input_file_is_marker_enum:
p->filename = name;
p->maybe_archive = FALSE;
p->real = FALSE;
p->local_sym_name = name;
p->just_syms_flag = FALSE;
p->search_dirs_flag = TRUE;
p->flags.search_dirs = TRUE;
break;
case lang_input_file_is_search_file_enum:
p->sysrooted = ldlang_sysrooted_script;
p->filename = name;
p->maybe_archive = FALSE;
p->real = TRUE;
p->local_sym_name = name;
p->just_syms_flag = FALSE;
p->search_dirs_flag = TRUE;
p->flags.real = TRUE;
p->flags.search_dirs = TRUE;
p->flags.sysrooted = input_flags.sysrooted;
break;
case lang_input_file_is_file_enum:
p->filename = name;
p->maybe_archive = FALSE;
p->real = TRUE;
p->local_sym_name = name;
p->just_syms_flag = FALSE;
p->search_dirs_flag = FALSE;
p->flags.real = TRUE;
break;
default:
FAIL ();
}
p->the_bfd = NULL;
p->next_real_file = NULL;
p->next = NULL;
p->dynamic = config.dynamic_link;
p->add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
p->add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
p->whole_archive = whole_archive;
p->loaded = FALSE;
p->missing_file = FALSE;
#ifdef ENABLE_PLUGINS
p->claimed = FALSE;
p->claim_archive = FALSE;
p->reload = FALSE;
#endif /* ENABLE_PLUGINS */
lang_statement_append (&input_file_chain,
(lang_statement_union_type *) p,
@ -2012,7 +1988,7 @@ lang_map (void)
asection *s;
if ((file->the_bfd->flags & (BFD_LINKER_CREATED | DYNAMIC)) != 0
|| file->just_syms_flag)
|| file->flags.just_syms)
continue;
for (s = file->the_bfd->sections; s != NULL; s = s->next)
@ -2234,7 +2210,7 @@ section_already_linked (bfd *abfd, asection *sec, void *data)
/* If we are only reading symbols from this object, then we want to
discard all sections. */
if (entry->just_syms_flag)
if (entry->flags.just_syms)
{
bfd_link_just_syms (abfd, sec, &link_info);
return;
@ -2619,7 +2595,7 @@ lookup_name (const char *name)
/* If we have already added this file, or this file is not real
don't add this file. */
if (search->loaded || !search->real)
if (search->flags.loaded || !search->flags.real)
return search;
if (! load_symbols (search, NULL))
@ -2697,23 +2673,20 @@ load_symbols (lang_input_statement_type *entry,
{
char **matching;
if (entry->loaded)
if (entry->flags.loaded)
return TRUE;
ldfile_open_file (entry);
/* Do not process further if the file was missing. */
if (entry->missing_file)
if (entry->flags.missing_file)
return TRUE;
if (! bfd_check_format (entry->the_bfd, bfd_archive)
&& ! bfd_check_format_matches (entry->the_bfd, bfd_object, &matching))
{
bfd_error_type err;
bfd_boolean save_ldlang_sysrooted_script;
bfd_boolean save_add_DT_NEEDED_for_regular;
bfd_boolean save_add_DT_NEEDED_for_dynamic;
bfd_boolean save_whole_archive;
struct lang_input_statement_flags save_flags;
err = bfd_get_error ();
@ -2739,30 +2712,26 @@ load_symbols (lang_input_statement_type *entry,
entry->the_bfd = NULL;
/* Try to interpret the file as a linker script. */
save_flags = input_flags;
ldfile_open_command_file (entry->filename);
push_stat_ptr (place);
save_ldlang_sysrooted_script = ldlang_sysrooted_script;
ldlang_sysrooted_script = entry->sysrooted;
save_add_DT_NEEDED_for_regular = add_DT_NEEDED_for_regular;
add_DT_NEEDED_for_regular = entry->add_DT_NEEDED_for_regular;
save_add_DT_NEEDED_for_dynamic = add_DT_NEEDED_for_dynamic;
add_DT_NEEDED_for_dynamic = entry->add_DT_NEEDED_for_dynamic;
save_whole_archive = whole_archive;
whole_archive = entry->whole_archive;
input_flags.sysrooted = entry->flags.sysrooted;
input_flags.add_DT_NEEDED_for_regular
= entry->flags.add_DT_NEEDED_for_regular;
input_flags.add_DT_NEEDED_for_dynamic
= entry->flags.add_DT_NEEDED_for_dynamic;
input_flags.whole_archive = entry->flags.whole_archive;
input_flags.dynamic = entry->flags.dynamic;
ldfile_assumed_script = TRUE;
parser_input = input_script;
/* We want to use the same -Bdynamic/-Bstatic as the one for
ENTRY. */
config.dynamic_link = entry->dynamic;
yyparse ();
ldfile_assumed_script = FALSE;
ldlang_sysrooted_script = save_ldlang_sysrooted_script;
add_DT_NEEDED_for_regular = save_add_DT_NEEDED_for_regular;
add_DT_NEEDED_for_dynamic = save_add_DT_NEEDED_for_dynamic;
whole_archive = save_whole_archive;
/* missing_file is sticky. */
save_flags.missing_file |= input_flags.missing_file;
input_flags = save_flags;
pop_stat_ptr ();
return TRUE;
@ -2782,7 +2751,7 @@ load_symbols (lang_input_statement_type *entry,
case bfd_object:
#ifdef ENABLE_PLUGINS
if (!entry->reload)
if (!entry->flags.reload)
#endif
ldlang_add_file (entry);
if (trace_files || trace_file_tries)
@ -2792,7 +2761,7 @@ load_symbols (lang_input_statement_type *entry,
case bfd_archive:
check_excluded_libs (entry->the_bfd);
if (entry->whole_archive)
if (entry->flags.whole_archive)
{
bfd *member = NULL;
bfd_boolean loaded = TRUE;
@ -2827,18 +2796,18 @@ load_symbols (lang_input_statement_type *entry,
}
}
entry->loaded = loaded;
entry->flags.loaded = loaded;
return loaded;
}
break;
}
if (bfd_link_add_symbols (entry->the_bfd, &link_info))
entry->loaded = TRUE;
entry->flags.loaded = TRUE;
else
einfo (_("%F%B: could not read symbols: %E\n"), entry->the_bfd);
return entry->loaded;
return entry->flags.loaded;
}
/* Handle a wild statement. S->FILENAME or S->SECTION_LIST or both
@ -3022,7 +2991,7 @@ get_first_input_target (void)
LANG_FOR_EACH_INPUT_STATEMENT (s)
{
if (s->header.type == lang_input_statement_enum
&& s->real)
&& s->flags.real)
{
ldfile_open_file (s);
@ -3255,7 +3224,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
current_target = s->target_statement.target;
break;
case lang_input_statement_enum:
if (s->input_statement.real)
if (s->input_statement.flags.real)
{
lang_statement_union_type **os_tail;
lang_statement_list_type add;
@ -3271,22 +3240,22 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
&& ((mode & OPEN_BFD_RESCAN) == 0
|| plugin_insert == NULL)
#endif
&& !s->input_statement.whole_archive
&& s->input_statement.loaded
&& !s->input_statement.flags.whole_archive
&& s->input_statement.flags.loaded
&& bfd_check_format (s->input_statement.the_bfd,
bfd_archive))
s->input_statement.loaded = FALSE;
s->input_statement.flags.loaded = FALSE;
#ifdef ENABLE_PLUGINS
/* When rescanning, reload --as-needed shared libs. */
else if ((mode & OPEN_BFD_RESCAN) != 0
&& plugin_insert == NULL
&& s->input_statement.loaded
&& s->input_statement.add_DT_NEEDED_for_regular
&& s->input_statement.flags.loaded
&& s->input_statement.flags.add_DT_NEEDED_for_regular
&& ((s->input_statement.the_bfd->flags) & DYNAMIC) != 0
&& plugin_should_reload (s->input_statement.the_bfd))
{
s->input_statement.loaded = FALSE;
s->input_statement.reload = TRUE;
s->input_statement.flags.loaded = FALSE;
s->input_statement.flags.reload = TRUE;
}
#endif
@ -3337,7 +3306,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
}
/* Exit if any of the files were missing. */
if (missing_file)
if (input_flags.missing_file)
einfo ("%F");
}
@ -4648,7 +4617,7 @@ size_input_section
lang_input_section_type *is = &((*this_ptr)->input_section);
asection *i = is->section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0)
{
bfd_size_type alignment_needed;
@ -5819,7 +5788,7 @@ lang_check (void)
{
#ifdef ENABLE_PLUGINS
/* Don't check format of files claimed by plugin. */
if (file->input_statement.claimed)
if (file->input_statement.flags.claimed)
continue;
#endif /* ENABLE_PLUGINS */
input_bfd = file->input_statement.the_bfd;
@ -6022,7 +5991,7 @@ lang_place_orphans (void)
/* This section of the file is not attached, root
around for a sensible place for it to go. */
if (file->just_syms_flag)
if (file->flags.just_syms)
bfd_link_just_syms (file->the_bfd, s, &link_info);
else if ((s->flags & SEC_EXCLUDE) != 0)
s->output_section = bfd_abs_section_ptr;
@ -6334,7 +6303,7 @@ lang_gc_sections (void)
{
asection *sec;
#ifdef ENABLE_PLUGINS
if (f->claimed)
if (f->flags.claimed)
continue;
#endif
for (sec = f->the_bfd->sections; sec != NULL; sec = sec->next)
@ -6499,8 +6468,8 @@ find_replacements_insert_point (void)
claim1 != NULL;
claim1 = &claim1->next->input_statement)
{
if (claim1->claimed)
return claim1->claim_archive ? lastobject : claim1;
if (claim1->flags.claimed)
return claim1->flags.claim_archive ? lastobject : claim1;
/* Update lastobject if this is a real object file. */
if (claim1->the_bfd && (claim1->the_bfd->my_archive == NULL))
lastobject = claim1;
@ -6911,7 +6880,7 @@ lang_startup (const char *name)
}
first_file->filename = name;
first_file->local_sym_name = name;
first_file->real = TRUE;
first_file->flags.real = TRUE;
}
void

View File

@ -1,6 +1,6 @@
/* ldlang.h - linker command language support
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This file is part of the GNU Binutils.
@ -228,36 +228,16 @@ typedef struct
bfd_vma output_offset;
} lang_reloc_statement_type;
typedef struct lang_input_statement_struct
struct lang_input_statement_flags
{
lang_statement_header_type header;
/* Name of this file. */
const char *filename;
/* Name to use for the symbol giving address of text start.
Usually the same as filename, but for a file spec'd with
-l this is the -l switch itself rather than the filename. */
const char *local_sym_name;
bfd *the_bfd;
struct flag_info *section_flag_list;
/* Point to the next file - whatever it is, wanders up and down
archives */
union lang_statement_union *next;
/* Point to the next file, but skips archive contents. */
union lang_statement_union *next_real_file;
const char *target;
/* 1 means this file was specified in a -l option. */
unsigned int maybe_archive : 1;
/* 1 means search a set of directories for this file. */
unsigned int search_dirs_flag : 1;
unsigned int search_dirs : 1;
/* 1 means this was found in a search directory marked as sysrooted,
if search_dirs_flag is false, otherwise, that it should be
if search_dirs is false, otherwise, that it should be
searched in ld_sysroot before any other location, as long as it
starts with a slash. */
unsigned int sysrooted : 1;
@ -265,7 +245,7 @@ typedef struct lang_input_statement_struct
/* 1 means this is base file of incremental load.
Do not load this file's text or data.
Also default text_start to after this file's bss. */
unsigned int just_syms_flag : 1;
unsigned int just_syms : 1;
/* Whether to search for this entry as a dynamic archive. */
unsigned int dynamic : 1;
@ -300,7 +280,32 @@ typedef struct lang_input_statement_struct
/* Set if reloading an --as-needed lib. */
unsigned int reload : 1;
#endif /* ENABLE_PLUGINS */
};
typedef struct lang_input_statement_struct
{
lang_statement_header_type header;
/* Name of this file. */
const char *filename;
/* Name to use for the symbol giving address of text start.
Usually the same as filename, but for a file spec'd with
-l this is the -l switch itself rather than the filename. */
const char *local_sym_name;
bfd *the_bfd;
struct flag_info *section_flag_list;
/* Point to the next file - whatever it is, wanders up and down
archives */
union lang_statement_union *next;
/* Point to the next file, but skips archive contents. */
union lang_statement_union *next_real_file;
const char *target;
struct lang_input_statement_flags flags;
} lang_input_statement_type;
typedef struct
@ -416,8 +421,6 @@ struct lang_phdr
etree_type *flags;
};
extern struct lang_phdr *lang_phdr_list;
/* This structure is used to hold a list of sections which may not
cross reference each other. */
@ -435,8 +438,6 @@ struct lang_nocrossrefs
lang_nocrossref_type *list;
};
extern struct lang_nocrossrefs *nocrossref_list;
/* This structure is used to hold a list of input section names which
will not match an output section in the linker script. */
@ -467,9 +468,12 @@ struct orphan_save
lang_output_section_statement_type **os_tail;
};
extern struct lang_phdr *lang_phdr_list;
extern struct lang_nocrossrefs *nocrossref_list;
extern const char *output_target;
extern lang_output_section_statement_type *abs_output_section;
extern lang_statement_list_type lang_output_section_statement;
extern struct lang_input_statement_flags input_flags;
extern bfd_boolean lang_has_input_file;
extern etree_type *base;
extern lang_statement_list_type *stat_ptr;
@ -482,7 +486,6 @@ extern lang_statement_list_type file_chain;
extern lang_statement_list_type input_file_chain;
extern int lang_statement_iteration;
extern bfd_boolean missing_file;
extern void lang_init
(void);

View File

@ -95,18 +95,6 @@ bfd_boolean trace_file_tries;
instead of complaining if no input files are given. */
bfd_boolean version_printed;
/* Nonzero means link in every member of an archive. */
bfd_boolean whole_archive;
/* True means only create DT_NEEDED entries for dynamic libraries
if they actually satisfy some reference in a regular object. */
bfd_boolean add_DT_NEEDED_for_regular;
/* True means create DT_NEEDED entries for dynamic libraries that
are DT_NEEDED by dynamic libraries specifically mentioned on
the command line. */
bfd_boolean add_DT_NEEDED_for_dynamic;
/* TRUE if we should demangle symbol names. */
bfd_boolean demangling;
@ -767,9 +755,9 @@ add_archive_element (struct bfd_link_info *info,
file.filesize = arelt_size (abfd);
file.fd = fd;
plugin_maybe_claim (&file, input);
if (input->claimed)
if (input->flags.claimed)
{
input->claim_archive = TRUE;
input->flags.claim_archive = TRUE;
*subsbfd = input->the_bfd;
}
}

View File

@ -1,6 +1,6 @@
/* ldmain.h -
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2002, 2003, 2004,
2005, 2007, 2008, 2009 Free Software Foundation, Inc.
2005, 2007, 2008, 2009, 2012 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
@ -33,9 +33,6 @@ extern char *default_target;
extern bfd_boolean trace_files;
extern bfd_boolean trace_file_tries;
extern bfd_boolean version_printed;
extern bfd_boolean whole_archive;
extern bfd_boolean add_DT_NEEDED_for_regular;
extern bfd_boolean add_DT_NEEDED_for_dynamic;
extern bfd_boolean demangling;
extern int g_switch_value;
extern const char *output_filename;

View File

@ -241,7 +241,7 @@ build_link_order (lang_statement_union_type *statement)
attached */
asection *i = statement->input_section.section;
if (!((lang_input_statement_type *) i->owner->usrdata)->just_syms_flag
if (!((lang_input_statement_type *) i->owner->usrdata)->flags.just_syms
&& (i->flags & SEC_EXCLUDE) == 0)
{
asection *output_section = i->output_section;

View File

@ -775,10 +775,10 @@ parse_args (unsigned argc, char **argv)
``use only shared libraries'' but, then, we don't
currently support shared libraries on HP/UX anyhow. */
if (strcmp (optarg, "archive") == 0)
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
else if (strcmp (optarg, "shared") == 0
|| strcmp (optarg, "default") == 0)
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
else
einfo (_("%P%F: unrecognized -a option `%s'\n"), optarg);
break;
@ -807,10 +807,10 @@ parse_args (unsigned argc, char **argv)
yyparse ();
break;
case OPTION_CALL_SHARED:
config.dynamic_link = TRUE;
input_flags.dynamic = TRUE;
break;
case OPTION_NON_SHARED:
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
break;
case OPTION_CREF:
command_line.cref = TRUE;
@ -934,17 +934,17 @@ parse_args (unsigned argc, char **argv)
case 'N':
config.text_read_only = FALSE;
config.magic_demand_paged = FALSE;
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
break;
case OPTION_NO_OMAGIC:
config.text_read_only = TRUE;
config.magic_demand_paged = TRUE;
/* NB/ Does not set dynamic_link to TRUE.
/* NB/ Does not set input_flags.dynamic to TRUE.
Use --call-shared or -Bdynamic for this. */
break;
case 'n':
config.magic_demand_paged = FALSE;
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
break;
case OPTION_NO_DEFINE_COMMON:
command_line.inhibit_common_definition = TRUE;
@ -1040,7 +1040,7 @@ parse_args (unsigned argc, char **argv)
config.only_cmd_line_lib_dirs = TRUE;
break;
case OPTION_NO_WHOLE_ARCHIVE:
whole_archive = FALSE;
input_flags.whole_archive = FALSE;
break;
case 'O':
/* FIXME "-O<non-digits> <value>" used to set the address of
@ -1092,7 +1092,7 @@ parse_args (unsigned argc, char **argv)
config.build_constructors = FALSE;
config.magic_demand_paged = FALSE;
config.text_read_only = FALSE;
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
break;
case 'R':
/* The GNU linker traditionally uses -R to mean to include
@ -1313,7 +1313,7 @@ parse_args (unsigned argc, char **argv)
config.build_constructors = TRUE;
config.magic_demand_paged = FALSE;
config.text_read_only = FALSE;
config.dynamic_link = FALSE;
input_flags.dynamic = FALSE;
break;
case 'u':
ldlang_add_undef (optarg, TRUE);
@ -1437,19 +1437,19 @@ parse_args (unsigned argc, char **argv)
link_info.warn_alternate_em = TRUE;
break;
case OPTION_WHOLE_ARCHIVE:
whole_archive = TRUE;
input_flags.whole_archive = TRUE;
break;
case OPTION_ADD_DT_NEEDED_FOR_DYNAMIC:
add_DT_NEEDED_for_dynamic = TRUE;
input_flags.add_DT_NEEDED_for_dynamic = TRUE;
break;
case OPTION_NO_ADD_DT_NEEDED_FOR_DYNAMIC:
add_DT_NEEDED_for_dynamic = FALSE;
input_flags.add_DT_NEEDED_for_dynamic = FALSE;
break;
case OPTION_ADD_DT_NEEDED_FOR_REGULAR:
add_DT_NEEDED_for_regular = TRUE;
input_flags.add_DT_NEEDED_for_regular = TRUE;
break;
case OPTION_NO_ADD_DT_NEEDED_FOR_REGULAR:
add_DT_NEEDED_for_regular = FALSE;
input_flags.add_DT_NEEDED_for_regular = FALSE;
break;
case OPTION_WRAP:
add_wrap (optarg);

View File

@ -1,5 +1,5 @@
/* Plugin control for the GNU linker.
Copyright 2010, 2011 Free Software Foundation, Inc.
Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
This file is part of the GNU Binutils.
@ -262,7 +262,7 @@ is_ir_dummy_bfd (const bfd *abfd)
when processing DT_NEEDED dependencies. */
return (abfd
&& abfd->usrdata
&& ((lang_input_statement_type *)(abfd->usrdata))->claimed);
&& ((lang_input_statement_type *)(abfd->usrdata))->flags.claimed);
}
/* Helpers to convert between BFD and GOLD symbol formats. */
@ -873,7 +873,7 @@ plugin_maybe_claim (struct ld_plugin_input_file *file,
if (entry->the_bfd->my_archive == NULL)
bfd_close (entry->the_bfd);
entry->the_bfd = file->handle;
entry->claimed = TRUE;
entry->flags.claimed = TRUE;
bfd_make_readable (entry->the_bfd);
}
else
@ -881,7 +881,7 @@ plugin_maybe_claim (struct ld_plugin_input_file *file,
/* If plugin didn't claim the file, we don't need the dummy bfd.
Can't avoid speculatively creating it, alas. */
bfd_close_all_done (file->handle);
entry->claimed = FALSE;
entry->flags.claimed = FALSE;
}
}