From patchwork Tue Jan 14 21:53:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 104791 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0180B385C407 for ; Tue, 14 Jan 2025 21:54:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0180B385C407 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=djR8kFK+ X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-yb1-xb2b.google.com (mail-yb1-xb2b.google.com [IPv6:2607:f8b0:4864:20::b2b]) by sourceware.org (Postfix) with ESMTPS id 32AFE38560AB for ; Tue, 14 Jan 2025 21:53:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 32AFE38560AB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 32AFE38560AB Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b2b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736891631; cv=none; b=LIfi5SRh1b1CW64kVMw52t0BmjE86cgZHgtMOP/Bsiv9kRrumVWaAZv9hr48PST6CHCyfGCSPNpfyXsDd+sBduLMBKzxAXu58/D0ta6U9F7tk5vNcPSONoJNEuU4k8d0lkltbpOhD38ft1tX7SWU0DFKjv2HW35LLM4dYyO55O8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736891631; c=relaxed/simple; bh=qIF0qz4c53fCdEt8pO9iZ4KsJFLOeCJSvU3fiFjsNWc=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=G41en+GBPfZnu/S+kFjKCLp6F8gUB9o2/k4AfNMocJQ4BkTGo4oU6Djiwu2Gna2RNhtiJipMEdZ9lpTFYB3UhySo82vIKB1Kcm7x5hc384hribhn0NCYe26D26naJInHX2nEtldeVNXOEPlYuCSwM4znPus0EHloHUOMcKpffmE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 32AFE38560AB Received: by mail-yb1-xb2b.google.com with SMTP id 3f1490d57ef6-e3978c00a5aso9436051276.1 for ; Tue, 14 Jan 2025 13:53:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736891630; x=1737496430; darn=sourceware.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=3UW2ELliQFZx6nDDC4/omBj4//Lwhts7TmKyXtYB3hI=; b=djR8kFK+KJLKnzUBlj/lZGVRj+WdKVm1sDht4BdSrrZ2WaYX0pMy79qjcs2Uv3JTMQ yOonaglpCpHr7xt2EL4k/6I7XWSycqVpy8u7s+/AMFwsgJmfPoSa86oHmtOkNAJdlTuI 7Jkf4jiC6V44zgG6bPIx+vmT6441gz9CpxjOwgmBiBw4Apni9K4rk7E5NDGPUJTmO6Ic iBi77fMangxj1kzkIIRPbIz2+C1QQgpyzDwPWeetP0aGDOMqxo6YkDrohnF0WsJga3gl qSdPHt9RHiL/Pi6vBlt7eKWht89hq52QiZw9MqGWZSeQ5oVRJtd+oYvt1ooODUq8Hn4b lOQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736891630; x=1737496430; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=3UW2ELliQFZx6nDDC4/omBj4//Lwhts7TmKyXtYB3hI=; b=r/hfN9EqV0k9liKtRi/Uu/LG5plk3SG0M2hOvaWNdFi55HO2LzDhYgmgDq0+P2L7ED OH8ChqMczxbsi4wAOwMPBAhwKMSHD/lPv467l8uVyzv78LqoDkiFM56mR5gZnWaZnPj8 ic3JAuoo3aRmMAGb/92g1VqYD5NMkXfpSxa0gfdCA3PBhor26E9DSW96MRuSAde79K/Q mW/pyWDW7hj7qSkHLlaJiI6hUn70hyWuCTl2Ej1f7DCYg0LYPRdqa5E+MC0Jk1zZWv1E ZlglkWEyLA2s75yW2OdQEWmqHTllKSP418r0p0pDUxw8CWNSJssKwidnvt4Wv2MFsDQ6 druA== X-Forwarded-Encrypted: i=1; AJvYcCXYYQjRN4d5gvpinBfFmgbBHsIXcsZPFZCVDNpdf+fEikKObSF8Fs2XajPwaTC73ZGGGDQIzJpkrQ==@sourceware.org X-Gm-Message-State: AOJu0YyXZASgTKfaPEfi8waIEE4PsfgLYK6EhV1XX3hG69XWYOTaxCp2 P/tpgoKhvcQj9IL1K/bF8A44sJwh7iBgeH6cTdLM9CBuiJmdAUWWvOJ9qWhxfJ3D9Kvi5Hd+UYW lCHawYjog+s8Vfosycsmi3AP6O9E= X-Gm-Gg: ASbGncto46FrrlArQ4j/vrpdZxOspdF4Zze3xSmG1MWYm/aOFOS3ueMm96iE+MjS6NQ /A45MAq+XnrCCh6TgOlxPOusz+37W8+emBfi5 X-Google-Smtp-Source: AGHT+IHpioyzqK3JyZQxGbvQvEqsn6VllZ9/IbFGHByjEfOuesfnlaAGMjYsxh5bdzt1WWrifI19zqbzhBPmp4zcjI8= X-Received: by 2002:a05:6902:10c6:b0:e57:89cf:775 with SMTP id 3f1490d57ef6-e5789cf1db0mr690753276.30.1736891629122; Tue, 14 Jan 2025 13:53:49 -0800 (PST) MIME-Version: 1.0 From: "H.J. Lu" Date: Wed, 15 Jan 2025 05:53:12 +0800 X-Gm-Features: AbW1kvb1MvOm5FYadPH4nKpNq3QosyLtbnSylzFU1A2WGdaleyU7jgLm65a83T8 Message-ID: Subject: [PATCH] ld: Parse linker script only once To: Alan Modra , Nick Clifton , Binutils X-Spam-Status: No, score=-3015.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org 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 outsid e 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. From e76d66a53ee9ef0a70fdb44a3150518fcc8086ea Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 14 Jan 2025 21:21:02 +0800 Subject: [PATCH] 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 --- ld/ldlang.c | 2 -- ld/ldmain.c | 64 +++++++++++++++++++++++------------------------------ ld/ldmain.h | 2 -- 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/ld/ldlang.c b/ld/ldlang.c index e1e491732a9..634a6843416 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -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 (); diff --git a/ld/ldmain.c b/ld/ldmain.c index ffe1d70d15e..f1c5f7035c5 100644 --- a/ld/ldmain.c +++ b/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; - } -} diff --git a/ld/ldmain.h b/ld/ldmain.h index 34770762f1c..0baa3c305c3 100644 --- a/ld/ldmain.h +++ b/ld/ldmain.h @@ -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 -- 2.47.1