PR ld/6766
* lexsup.c (parse_args <-e>): Revert 2009-03-18 change. * ldemul.c (after_parse_default): Add entry symbol as undef. * emultempl/alphaelf.em (alpha_after_parse): Call after_parse_default. * emultempl/cr16elf.em (cr16elf_after_parse): Likewise. * emultempl/crxelf.em (crxelf_after_parse): Likewise. * emultempl/hppaelf.em (hppaelf_after_parse): Likewise. * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Likewise. * emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Call after_parse_default and delete now duplicate code. * emultempl/pep.em (gld_${EMULATION_NAME}_after_parse): Likewise. * scripttempl/elf32cr16.sc: No need to make entry extern. * scripttempl/elf32cr16c.sc: Likewise. * scripttempl/elf32crx.sc: Likewise. * scripttempl/elf32xc16xs.sc: Only provide ENTRY on final link.
This commit is contained in:
parent
b43b923a25
commit
97b11f4094
18
ld/ChangeLog
18
ld/ChangeLog
|
@ -1,3 +1,21 @@
|
|||
2009-09-13 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
PR ld/6766
|
||||
* lexsup.c (parse_args <-e>): Revert 2009-03-18 change.
|
||||
* ldemul.c (after_parse_default): Add entry symbol as undef.
|
||||
* emultempl/alphaelf.em (alpha_after_parse): Call after_parse_default.
|
||||
* emultempl/cr16elf.em (cr16elf_after_parse): Likewise.
|
||||
* emultempl/crxelf.em (crxelf_after_parse): Likewise.
|
||||
* emultempl/hppaelf.em (hppaelf_after_parse): Likewise.
|
||||
* emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Likewise.
|
||||
* emultempl/pe.em (gld_${EMULATION_NAME}_after_parse): Call
|
||||
after_parse_default and delete now duplicate code.
|
||||
* emultempl/pep.em (gld_${EMULATION_NAME}_after_parse): Likewise.
|
||||
* scripttempl/elf32cr16.sc: No need to make entry extern.
|
||||
* scripttempl/elf32cr16c.sc: Likewise.
|
||||
* scripttempl/elf32crx.sc: Likewise.
|
||||
* scripttempl/elf32xc16xs.sc: Only provide ENTRY on final link.
|
||||
|
||||
2009-09-11 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/ld.pot: Updated by the Translation project.
|
||||
|
|
|
@ -80,6 +80,8 @@ alpha_after_parse (void)
|
|||
exp_intop (ALPHA_TEXT_START_32BIT),
|
||||
exp_nameop (SIZEOF_HEADERS, NULL)),
|
||||
NULL);
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# This shell script emits a C file. -*- C -*-
|
||||
# Copyright 2007, 2008 Free Software Foundation, Inc.
|
||||
# Copyright 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# Contributed by M R Swami Reddy <MR.Swami.Reddy@nsc.com>
|
||||
#
|
||||
# This file is part of the GNU Binutils.
|
||||
|
@ -121,6 +121,8 @@ cr16elf_after_parse (void)
|
|||
meaninful in CR16 embedded systems. Moreover, when magic_demand_paged
|
||||
is true the link sometimes fails. */
|
||||
config.magic_demand_paged = FALSE;
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
/* This is called after the sections have been attached to output
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# This shell script emits a C file. -*- C -*-
|
||||
# Copyright 2004, 2005, 2007
|
||||
# Copyright 2004, 2005, 2007, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of the GNU Binutils.
|
||||
|
@ -45,6 +45,8 @@ crxelf_after_parse (void)
|
|||
meaninful in CRX embedded systems. Moreover, when magic_demand_paged
|
||||
is true the link sometimes fails. */
|
||||
config.magic_demand_paged = FALSE;
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
/* This is called after the sections have been attached to output
|
||||
|
|
|
@ -59,6 +59,8 @@ hppaelf_after_parse (void)
|
|||
lang_input_file_is_l_enum,
|
||||
NULL);
|
||||
*/
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
/* This is called before the input files are opened. We create a new
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# This shell script emits a C file. -*- C -*-
|
||||
# Copyright 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
# Copyright 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of the GNU Binutils.
|
||||
#
|
||||
|
@ -35,6 +35,8 @@ gld${EMULATION_NAME}_after_parse (void)
|
|||
{
|
||||
link_info.relax_pass = 2;
|
||||
bfd_elf${ELFSIZE}_ia64_after_parse (itanium);
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
EOF
|
||||
|
|
|
@ -877,27 +877,13 @@ gld_${EMULATION_NAME}_set_symbols (void)
|
|||
static void
|
||||
gld_${EMULATION_NAME}_after_parse (void)
|
||||
{
|
||||
/* The Windows libraries are designed for the linker to treat the
|
||||
entry point as an undefined symbol. Otherwise, the .obj that
|
||||
defines mainCRTStartup is brought in because it is the first
|
||||
encountered in libc.lib and it has other symbols in it which will
|
||||
be pulled in by the link process. To avoid this, we act as
|
||||
though the user specified -u with the entry point symbol.
|
||||
|
||||
This function is called after the linker script and command line
|
||||
options have been read, so at this point we know the right entry
|
||||
point. This function is called before the input files are
|
||||
opened, so registering the symbol as undefined will make a
|
||||
difference. */
|
||||
|
||||
if (! link_info.relocatable && entry_symbol.name != NULL)
|
||||
ldlang_add_undef (entry_symbol.name);
|
||||
|
||||
/* PR ld/6744: Warn the user if they have used an ELF-only
|
||||
option hoping it will work on PE. */
|
||||
if (link_info.export_dynamic)
|
||||
einfo (_("%P: warning: --export-dynamic is not supported for PE "
|
||||
"targets, did you mean --export-all-symbols?\n"));
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
/* pe-dll.c directly accesses pe_data_import_dll,
|
||||
|
|
|
@ -814,27 +814,13 @@ gld_${EMULATION_NAME}_set_symbols (void)
|
|||
static void
|
||||
gld_${EMULATION_NAME}_after_parse (void)
|
||||
{
|
||||
/* The Windows libraries are designed for the linker to treat the
|
||||
entry point as an undefined symbol. Otherwise, the .obj that
|
||||
defines mainCRTStartup is brought in because it is the first
|
||||
encountered in libc.lib and it has other symbols in it which will
|
||||
be pulled in by the link process. To avoid this, we act as
|
||||
though the user specified -u with the entry point symbol.
|
||||
|
||||
This function is called after the linker script and command line
|
||||
options have been read, so at this point we know the right entry
|
||||
point. This function is called before the input files are
|
||||
opened, so registering the symbol as undefined will make a
|
||||
difference. */
|
||||
|
||||
if (! link_info.relocatable && entry_symbol.name != NULL)
|
||||
ldlang_add_undef (entry_symbol.name);
|
||||
|
||||
/* PR ld/6744: Warn the user if they have used an ELF-only
|
||||
option hoping it will work on PE+. */
|
||||
if (link_info.export_dynamic)
|
||||
einfo (_("%P: warning: --export-dynamic is not supported for PE+ "
|
||||
"targets, did you mean --export-all-symbols?\n"));
|
||||
|
||||
after_parse_default ();
|
||||
}
|
||||
|
||||
/* pep-dll.c directly accesses pep_data_import_dll,
|
||||
|
|
26
ld/ldemul.c
26
ld/ldemul.c
|
@ -192,9 +192,35 @@ ldemul_default_target (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
|
|||
return ld_emulation->target_name;
|
||||
}
|
||||
|
||||
/* If the entry point was not specified as an address, then add the
|
||||
symbol as undefined. This will cause ld to extract an archive
|
||||
element defining the entry if ld is linking against such an archive.
|
||||
|
||||
We don't do this when generating shared libraries unless given -e
|
||||
on the command line, because most shared libs are not designed to
|
||||
be run as an executable. However, some are, eg. glibc ld.so and
|
||||
may rely on the default linker script supplying ENTRY. So we can't
|
||||
remove the ENTRY from the script, but would rather not insert
|
||||
undefined _start syms. */
|
||||
|
||||
void
|
||||
after_parse_default (void)
|
||||
{
|
||||
if (entry_symbol.name != NULL
|
||||
&& (link_info.executable || entry_from_cmdline))
|
||||
{
|
||||
bfd_boolean is_vma = FALSE;
|
||||
|
||||
if (entry_from_cmdline)
|
||||
{
|
||||
const char *send;
|
||||
|
||||
bfd_scan_vma (entry_symbol.name, &send, 0);
|
||||
is_vma = *send == '\0';
|
||||
}
|
||||
if (!is_vma)
|
||||
ldlang_add_undef (entry_symbol.name);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -832,7 +832,6 @@ parse_args (unsigned argc, char **argv)
|
|||
break;
|
||||
case 'e':
|
||||
lang_add_entry (optarg, TRUE);
|
||||
ldlang_add_undef (optarg);
|
||||
break;
|
||||
case 'f':
|
||||
if (command_line.auxiliary_filters == NULL)
|
||||
|
|
|
@ -10,14 +10,8 @@ cat <<EOF
|
|||
|
||||
/* Example Linker Script for linking NS CR16 elf32 files. */
|
||||
|
||||
/* The next line forces the entry point (${ENTRY} in this script)
|
||||
to be entered in the output file as an undefined symbol.
|
||||
It is needed in case the entry point is not called explicitly
|
||||
(which is the usual case) AND is in an archive. */
|
||||
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
${RELOCATING+EXTERN(${ENTRY})}
|
||||
${RELOCATING+ENTRY(${ENTRY})}
|
||||
|
||||
/* Define memory regions. */
|
||||
|
|
|
@ -7,12 +7,6 @@ cat <<EOF
|
|||
elf32 files, which were compiled with either the near data
|
||||
model or the default data model. */
|
||||
|
||||
/* Force the entry point to be entered in the output file as
|
||||
an undefined symbol. This is needed in case the entry point
|
||||
(which is not called explicitly) is in an archive (which is
|
||||
the usual case). */
|
||||
|
||||
${RELOCATING+EXTERN(${ENTRY})}
|
||||
${RELOCATING+ENTRY(${ENTRY})}
|
||||
|
||||
MEMORY
|
||||
|
|
|
@ -10,14 +10,8 @@ cat <<EOF
|
|||
|
||||
/* Example Linker Script for linking NS CRX elf32 files. */
|
||||
|
||||
/* The next line forces the entry point (${ENTRY} in this script)
|
||||
to be entered in the output file as an undefined symbol.
|
||||
It is needed in case the entry point is not called explicitly
|
||||
(which is the usual case) AND is in an archive. */
|
||||
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
${RELOCATING+EXTERN(${ENTRY})}
|
||||
${RELOCATING+ENTRY(${ENTRY})}
|
||||
|
||||
/* Define memory regions. */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
cat <<EOF
|
||||
OUTPUT_FORMAT("${OUTPUT_FORMAT}")
|
||||
OUTPUT_ARCH(${ARCH})
|
||||
ENTRY("_start")
|
||||
${RELOCATING+ENTRY ("_start")}
|
||||
MEMORY
|
||||
{
|
||||
vectarea : o =0xc00000, l = 0x0300
|
||||
|
|
Loading…
Reference in New Issue