mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-05 15:15:42 +00:00
ld: Parse linker script only once
Parsing linker script twice caused
FAIL: ld-plugin/lto-3r
FAIL: ld-plugin/lto-5r
FAIL: PR ld/19317 (2)
for x86_64-w64-mingw32 with the linker error:
./ld-new:built in linker script:27 assignment to location counter invalid outside of SECTIONS
ldscripts/i386pep.xr has
24 .rdata :
25 {
26 *(.rdata)
27 . = ALIGN(4);
28 /* .ctors & .dtors */
29 /* .CRT */
30 /* ___crt_xl_end__ is defined in the TLS Directory support code */
31 }
Remove ld_parse_linker_script to parse linker script only once.
* ldlang.c (cmdline_emit_object_only_section): Don't call
ld_parse_linker_script.
* ldmain.c (main): Fold ld_parse_linker_script.
(ld_parse_linker_script): Removed.
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
This commit is contained in:
@@ -10823,8 +10823,6 @@ cmdline_emit_object_only_section (void)
|
||||
lang_init (true);
|
||||
ldexp_init (true);
|
||||
|
||||
ld_parse_linker_script ();
|
||||
|
||||
/* Set up the object-only output. */
|
||||
lang_final ();
|
||||
|
||||
|
||||
64
ld/ldmain.c
64
ld/ldmain.c
@@ -410,7 +410,34 @@ main (int argc, char **argv)
|
||||
|
||||
ldemul_set_symbols ();
|
||||
|
||||
ld_parse_linker_script ();
|
||||
/* If we have not already opened and parsed a linker script,
|
||||
try the default script from command line first. */
|
||||
if (saved_script_handle == NULL
|
||||
&& command_line.default_script != NULL)
|
||||
{
|
||||
ldfile_open_script_file (command_line.default_script);
|
||||
parser_input = input_script;
|
||||
yyparse ();
|
||||
}
|
||||
|
||||
/* If we have not already opened and parsed a linker script
|
||||
read the emulation's appropriate default script. */
|
||||
if (saved_script_handle == NULL)
|
||||
{
|
||||
int isfile;
|
||||
char *s = ldemul_get_script (&isfile);
|
||||
|
||||
if (isfile)
|
||||
ldfile_open_default_command_file (s);
|
||||
else
|
||||
{
|
||||
lex_string = s;
|
||||
lex_redirect (s, _("built in linker script"), 1);
|
||||
}
|
||||
parser_input = input_script;
|
||||
yyparse ();
|
||||
lex_string = NULL;
|
||||
}
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
@@ -1677,38 +1704,3 @@ notice (struct bfd_link_info *info,
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Parse the linker script. */
|
||||
|
||||
void
|
||||
ld_parse_linker_script (void)
|
||||
{
|
||||
/* If we have not already opened and parsed a linker script,
|
||||
try the default script from command line first. */
|
||||
if (saved_script_handle == NULL
|
||||
&& command_line.default_script != NULL)
|
||||
{
|
||||
ldfile_open_script_file (command_line.default_script);
|
||||
parser_input = input_script;
|
||||
yyparse ();
|
||||
}
|
||||
|
||||
/* If we have not already opened and parsed a linker script
|
||||
read the emulation's appropriate default script. */
|
||||
if (saved_script_handle == NULL)
|
||||
{
|
||||
int isfile;
|
||||
char *s = ldemul_get_script (&isfile);
|
||||
|
||||
if (isfile)
|
||||
ldfile_open_default_command_file (s);
|
||||
else
|
||||
{
|
||||
lex_string = s;
|
||||
lex_redirect (s, _("built in linker script"), 1);
|
||||
}
|
||||
parser_input = input_script;
|
||||
yyparse ();
|
||||
lex_string = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,6 +63,4 @@ extern void add_ignoresym (struct bfd_link_info *, const char *);
|
||||
extern void add_keepsyms_file (const char *);
|
||||
extern void track_dependency_files (const char *);
|
||||
|
||||
extern void ld_parse_linker_script (void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user