From patchwork Tue May 2 17:19:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 1775980 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q9mzP1c8Jz1ydX for ; Wed, 3 May 2023 03:19:43 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6246E3856DD6 for ; Tue, 2 May 2023 17:19:41 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 2437F3858D1E for ; Tue, 2 May 2023 17:19:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2437F3858D1E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.99,244,1677571200"; d="scan'208,223";a="4626939" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 02 May 2023 09:19:21 -0800 IronPort-SDR: AKuYNFYAObwUusTdlrngUR45jB+mpKyCf9l8EwQwU4n3YVwk/PFOiYRttMKBtZEIDlGDtYATer XTxGoLTvaSYSRzhRl/mY6gU73tQKDzQXsXT5FwWM7temAUVTsTDds/PQsO6P/fbvsC17Q5NRvV xUc5+dxBXzQS22aGxk2Be1xrKREYF3TY+HrnJcxVkI7U1fO/3+20wtBo00Zu4P0sOqnUU8HhKA 4nh7ecX8wiicPWNspRxPh+DTQUqEGHysgpD9cA2u3HPuzfHl2xWFdbA5MuBCz+2TwNfRmD50GM PWw= Message-ID: <3cdc56a8-62eb-d33c-3038-0af00d8a52ba@codesourcery.com> Date: Tue, 2 May 2023 19:19:14 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Content-Language: en-US To: Binutils , gcc-patches From: Tobias Burnus Subject: [RFC,patch] Linker plugin - extend API for offloading corner case (aka: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 linker plugin hook [GCC PR109128]) CC: Joseph Myers X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" See also https://gcc.gnu.org/PR109128 (+ description in the patch log) The linker plugin API was designed to handle LTO - such that the compiler (i.e. GCC's lto-plugin) can claim an input file if it finds LTO code. In that case, the symbols inside that file are ignored by 'ld'. However, GCC also uses the LTO for offloading: code designated for running on a non-host device (GPUs) is saved in a special section in LTO format. This code then ends up being compiled for offloading but otherwise not the file is not claimed, keeping the symbols for 'ld' to process, unless that file is also uses real, host-side LTO. This mostly works okay, but a corner case exists (see PR for an example) where 'ld' calls the GCC's lto-plugin but does not actually use the symbols of that file. That's fine, in principle, but if that file contains offloading code, there is a problem: To match host and device functions, a table is created on both sides, but that table obviously must match. However, when lto-plugin's offload code processes those while ld does not link them, it fails. It turned out (kudos to Joseph for debugging + writing the patches) that in that case ld.bfd does not actually regards that file as being used but just offers it to llto-plugin in case it needs symbols from it. To get this working, the current API is insufficient. Possible solutions: * Tell lto-plugin whether 'ld' actually needs symbols from a file or it just offers the file in case that lto-plugin wants to claim that file => That's implemented in the attached patch. * Make it possible to "claim" a file without discarding the ld-visible symbols * Asking the linker later whether the file/some symbols are actually used. * something else ... What this patch does: * It adds a new API callback (LDPT_REGISTER_CLAIM_FILE_HOOK_V2) that takes an additional boolean argument which states whether ld.bdf intens to use that file/symbols from that file or whether it just asks the plugin in case it wants to claim it. * On the ld.bfd side, it wires this up. * On the GCC lto-plugin side, it uses that API is available, otherwise it uses the existing API. The way the linker plugin handling is written, it works fine at runtime if only one side supports the new hook. (Except, of course, that for fixing the issue both need to support it.) Regarding those patches: Are they ok for mainline? Any comment, better approach, suggestion? Tobias PS: Attached is the Binutils' ld side of the patch and the GCC lto-plugin side of the patch set. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 From 6c9c55a2f72d0a8bf4891560f79a2019ddca404d Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 2 May 2023 17:02:29 +0000 Subject: [PATCH] Add LDPT_REGISTER_CLAIM_FILE_HOOK_V2 linker plugin hook [GCC PR109128] This is one part of the fix for GCC PR109128, along with a corresponding GCC change. Without this patch, what happens in the linker, when an unused object in a .a file has offload data, is that elf_link_is_defined_archive_symbol calls bfd_link_plugin_object_p, which ends up calling the plugin's claim_file_handler, which then records the object as one with offload data. That is, the linker never decides to use the object in the first place, but use of this _p interface (called as part of trying to decide whether to use the object) results in the plugin deciding to use its offload data (and a consequent mismatch in the offload data present at runtime). The new hook allows the linker plugin to distinguish calls to claim_file_handler that know the object is being used by the linker (from ldmain.c:add_archive_element), from calls that don't know it's being used by the linker (from elf_link_is_defined_archive_symbol); in the latter case, the plugin should avoid recording the object as one with offload data. bfd/ * plugin.c (struct plugin_list_entry): Add claim_file_v2. (register_claim_file_v2): New. (try_load_plugin): Use LDPT_REGISTER_CLAIM_FILE_HOOK_V2. (ld_plugin_object_p): Take second argument. (bfd_link_plugin_object_p): Update call to ld_plugin_object_p. (register_ld_plugin_object_p): Update argument prototype. (bfd_plugin_object_p): Update call to ld_plugin_object_p. * plugin.h (register_ld_plugin_object_p): Update argument prototype. include/ * plugin.api;h (ld_plugin_claim_file_handler_v2) (ld_plugin_register_claim_file_v2) (LDPT_REGISTER_CLAIM_FILE_HOOK_V2): New. (struct ld_plugin_tv): Add tv_register_claim_file_v2. ld/ * plugin.c (struct plugin): Add claim_file_handler_v2. (LDPT_REGISTER_CLAIM_FILE_HOOK_V2): New. (plugin_object_p): Add second argument. Update call to plugin_call_claim_file. (register_claim_file_v2): New. (set_tv_header): Handle LDPT_REGISTER_CLAIM_FILE_HOOK_V2. (plugin_call_claim_file): Add argument known_used. (plugin_maybe_claim): Update call to plugin_object_p. * testplug.c, testplug2.c, testplug3.c, testplug4.c: Handle LDPT_REGISTER_CLAIM_FILE_HOOK_V2. * testsuite/ld-plugin/plugin-1.d, testsuite/ld-plugin/plugin-10.d, testsuite/ld-plugin/plugin-11.d, testsuite/ld-plugin/plugin-13.d, testsuite/ld-plugin/plugin-14.d, testsuite/ld-plugin/plugin-15.d, testsuite/ld-plugin/plugin-16.d, testsuite/ld-plugin/plugin-17.d, testsuite/ld-plugin/plugin-18.d, testsuite/ld-plugin/plugin-19.d, testsuite/ld-plugin/plugin-2.d, testsuite/ld-plugin/plugin-26.d, testsuite/ld-plugin/plugin-3.d, testsuite/ld-plugin/plugin-30.d, testsuite/ld-plugin/plugin-4.d, testsuite/ld-plugin/plugin-5.d, testsuite/ld-plugin/plugin-6.d, testsuite/ld-plugin/plugin-7.d, testsuite/ld-plugin/plugin-8.d, testsuite/ld-plugin/plugin-9.d: Update test expectations. --- bfd/plugin.c | 25 ++++++++++++++++++++----- bfd/plugin.h | 2 +- include/plugin-api.h | 16 ++++++++++++++++ ld/plugin.c | 30 ++++++++++++++++++++++++------ ld/testplug.c | 6 ++++++ ld/testplug2.c | 5 +++++ ld/testplug3.c | 5 +++++ ld/testplug4.c | 5 +++++ ld/testsuite/ld-plugin/plugin-1.d | 1 + ld/testsuite/ld-plugin/plugin-10.d | 1 + ld/testsuite/ld-plugin/plugin-11.d | 1 + ld/testsuite/ld-plugin/plugin-13.d | 1 + ld/testsuite/ld-plugin/plugin-14.d | 1 + ld/testsuite/ld-plugin/plugin-15.d | 1 + ld/testsuite/ld-plugin/plugin-16.d | 1 + ld/testsuite/ld-plugin/plugin-17.d | 1 + ld/testsuite/ld-plugin/plugin-18.d | 1 + ld/testsuite/ld-plugin/plugin-19.d | 1 + ld/testsuite/ld-plugin/plugin-2.d | 1 + ld/testsuite/ld-plugin/plugin-26.d | 1 + ld/testsuite/ld-plugin/plugin-3.d | 1 + ld/testsuite/ld-plugin/plugin-30.d | 1 + ld/testsuite/ld-plugin/plugin-4.d | 1 + ld/testsuite/ld-plugin/plugin-5.d | 1 + ld/testsuite/ld-plugin/plugin-6.d | 1 + ld/testsuite/ld-plugin/plugin-7.d | 1 + ld/testsuite/ld-plugin/plugin-8.d | 1 + ld/testsuite/ld-plugin/plugin-9.d | 1 + 28 files changed, 102 insertions(+), 12 deletions(-) diff --git a/bfd/plugin.c b/bfd/plugin.c index 66d286af6b6..b798d3477ae 100644 --- a/bfd/plugin.c +++ b/bfd/plugin.c @@ -129,6 +129,7 @@ struct plugin_list_entry { /* These must be initialized for each IR object with LTO wrapper. */ ld_plugin_claim_file_handler claim_file; + ld_plugin_claim_file_handler_v2 claim_file_v2; ld_plugin_all_symbols_read_handler all_symbols_read; ld_plugin_all_symbols_read_handler cleanup_handler; bool has_symbol_type; @@ -159,6 +160,16 @@ register_claim_file (ld_plugin_claim_file_handler handler) return LDPS_OK; } + +/* Register a claim-file handler, version 2. */ + +static enum ld_plugin_status +register_claim_file_v2 (ld_plugin_claim_file_handler_v2 handler) +{ + current_plugin->claim_file_v2 = handler; + return LDPS_OK; +} + static enum ld_plugin_status add_symbols (void * handle, int nsyms, @@ -337,7 +348,7 @@ try_load_plugin (const char *pname, bool build_list_p) { void *plugin_handle; - struct ld_plugin_tv tv[5]; + struct ld_plugin_tv tv[6]; int i; ld_plugin_onload onload; enum ld_plugin_status status; @@ -402,6 +413,10 @@ try_load_plugin (const char *pname, tv[i].tv_tag = LDPT_REGISTER_CLAIM_FILE_HOOK; tv[i].tv_u.tv_register_claim_file = register_claim_file; + ++i; + tv[i].tv_tag = LDPT_REGISTER_CLAIM_FILE_HOOK_V2; + tv[i].tv_u.tv_register_claim_file_v2 = register_claim_file_v2; + ++i; tv[i].tv_tag = LDPT_ADD_SYMBOLS; tv[i].tv_u.tv_add_symbols = add_symbols; @@ -439,7 +454,7 @@ try_load_plugin (const char *pname, /* There may be plugin libraries in lib/bfd-plugins. */ static int has_plugin_list = -1; -static bfd_cleanup (*ld_plugin_object_p) (bfd *); +static bfd_cleanup (*ld_plugin_object_p) (bfd *, bool); static const char *plugin_name; @@ -463,7 +478,7 @@ bool bfd_link_plugin_object_p (bfd *abfd) { if (ld_plugin_object_p) - return ld_plugin_object_p (abfd) != NULL; + return ld_plugin_object_p (abfd, false) != NULL; return false; } @@ -480,7 +495,7 @@ bfd_plugin_target_p (const bfd_target *target) /* Register OBJECT_P to be used by bfd_plugin_object_p. */ void -register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *)) +register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *, bool)) { ld_plugin_object_p = object_p; } @@ -572,7 +587,7 @@ static bfd_cleanup bfd_plugin_object_p (bfd *abfd) { if (ld_plugin_object_p) - return ld_plugin_object_p (abfd); + return ld_plugin_object_p (abfd, false); if (abfd->plugin_format == bfd_plugin_unknown && !load_plugin (abfd)) return NULL; diff --git a/bfd/plugin.h b/bfd/plugin.h index 8da436a86b9..6a6f0f19fc2 100644 --- a/bfd/plugin.h +++ b/bfd/plugin.h @@ -27,7 +27,7 @@ void bfd_plugin_set_plugin (const char *); bool bfd_plugin_target_p (const bfd_target *); bool bfd_plugin_specified_p (void); bool bfd_link_plugin_object_p (bfd *); -void register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *)); +void register_ld_plugin_object_p (bfd_cleanup (*object_p) (bfd *, bool)); void bfd_plugin_close_file_descriptor (bfd *, int); typedef struct plugin_data_struct diff --git a/include/plugin-api.h b/include/plugin-api.h index 379828ba854..395d5bcc598 100644 --- a/include/plugin-api.h +++ b/include/plugin-api.h @@ -260,6 +260,13 @@ enum ld_plugin_status (*ld_plugin_claim_file_handler) ( const struct ld_plugin_input_file *file, int *claimed); +/* The plugin library's "claim file" handler, version 2. */ + +typedef +enum ld_plugin_status +(*ld_plugin_claim_file_handler_v2) ( + const struct ld_plugin_input_file *file, int *claimed, int known_used); + /* The plugin library's "all symbols read" handler. */ typedef @@ -278,6 +285,13 @@ typedef enum ld_plugin_status (*ld_plugin_register_claim_file) (ld_plugin_claim_file_handler handler); +/* The linker's interface for registering the "claim file" handler, + version 2. */ + +typedef +enum ld_plugin_status +(*ld_plugin_register_claim_file_v2) (ld_plugin_claim_file_handler_v2 handler); + /* The linker's interface for registering the "all symbols read" handler. */ typedef @@ -553,6 +567,7 @@ enum ld_plugin_tag LDPT_GET_WRAP_SYMBOLS, LDPT_ADD_SYMBOLS_V2, LDPT_GET_API_VERSION, + LDPT_REGISTER_CLAIM_FILE_HOOK_V2 }; /* The plugin transfer vector. */ @@ -565,6 +580,7 @@ struct ld_plugin_tv int tv_val; const char *tv_string; ld_plugin_register_claim_file tv_register_claim_file; + ld_plugin_register_claim_file_v2 tv_register_claim_file_v2; ld_plugin_register_all_symbols_read tv_register_all_symbols_read; ld_plugin_register_cleanup tv_register_cleanup; ld_plugin_add_symbols tv_add_symbols; diff --git a/ld/plugin.c b/ld/plugin.c index 34aefc584cc..970cf566ffe 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -87,6 +87,7 @@ typedef struct plugin size_t n_args; /* The plugin's event handlers. */ ld_plugin_claim_file_handler claim_file_handler; + ld_plugin_claim_file_handler_v2 claim_file_handler_v2; ld_plugin_all_symbols_read_handler all_symbols_read_handler; ld_plugin_cleanup_handler cleanup_handler; /* TRUE if the cleanup handlers have been called. */ @@ -159,6 +160,7 @@ static const enum ld_plugin_tag tv_header_tags[] = LDPT_LINKER_OUTPUT, LDPT_OUTPUT_NAME, LDPT_REGISTER_CLAIM_FILE_HOOK, + LDPT_REGISTER_CLAIM_FILE_HOOK_V2, LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK, LDPT_REGISTER_CLEANUP_HOOK, LDPT_ADD_SYMBOLS, @@ -181,7 +183,7 @@ static bool plugin_notice (struct bfd_link_info *, struct bfd_link_hash_entry *, bfd *, asection *, bfd_vma, flagword); -static bfd_cleanup plugin_object_p (bfd *); +static bfd_cleanup plugin_object_p (bfd *, bool); #if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) @@ -467,6 +469,15 @@ register_claim_file (ld_plugin_claim_file_handler handler) return LDPS_OK; } +/* Register a claim-file version 2 handler. */ +static enum ld_plugin_status +register_claim_file_v2 (ld_plugin_claim_file_handler_v2 handler) +{ + ASSERT (called_plugin); + called_plugin->claim_file_handler_v2 = handler; + return LDPS_OK; +} + /* Register an all-symbols-read handler. */ static enum ld_plugin_status register_all_symbols_read (ld_plugin_all_symbols_read_handler handler) @@ -1019,6 +1030,9 @@ set_tv_header (struct ld_plugin_tv *tv) case LDPT_REGISTER_CLAIM_FILE_HOOK: TVU(register_claim_file) = register_claim_file; break; + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: + TVU(register_claim_file_v2) = register_claim_file_v2; + break; case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: TVU(register_all_symbols_read) = register_all_symbols_read; break; @@ -1144,7 +1158,8 @@ plugin_load_plugins (void) /* Call 'claim file' hook for all plugins. */ static int -plugin_call_claim_file (const struct ld_plugin_input_file *file, int *claimed) +plugin_call_claim_file (const struct ld_plugin_input_file *file, int *claimed, + bool known_used) { plugin_t *curplug = plugins_list; *claimed = false; @@ -1155,7 +1170,10 @@ plugin_call_claim_file (const struct ld_plugin_input_file *file, int *claimed) enum ld_plugin_status rv; called_plugin = curplug; - rv = (*curplug->claim_file_handler) (file, claimed); + if (curplug->claim_file_handler_v2) + rv = (*curplug->claim_file_handler_v2) (file, claimed, known_used); + else + rv = (*curplug->claim_file_handler) (file, claimed); called_plugin = NULL; if (rv != LDPS_OK) set_plugin_error (curplug->name); @@ -1187,7 +1205,7 @@ plugin_cleanup (bfd *abfd ATTRIBUTE_UNUSED) } static bfd_cleanup -plugin_object_p (bfd *ibfd) +plugin_object_p (bfd *ibfd, bool known_used) { int claimed; plugin_input_file_t *input; @@ -1239,7 +1257,7 @@ plugin_object_p (bfd *ibfd) claimed = 0; - if (plugin_call_claim_file (&file, &claimed)) + if (plugin_call_claim_file (&file, &claimed, known_used)) einfo (_("%F%P: %s: plugin reported error claiming file\n"), plugin_error_plugin ()); @@ -1294,7 +1312,7 @@ void plugin_maybe_claim (lang_input_statement_type *entry) { ASSERT (entry->header.type == lang_input_statement_enum); - if (plugin_object_p (entry->the_bfd)) + if (plugin_object_p (entry->the_bfd, true)) { bfd *abfd = entry->the_bfd->plugin_dummy_bfd; diff --git a/ld/testplug.c b/ld/testplug.c index 796d67fe056..4b1bb8ecdbe 100644 --- a/ld/testplug.c +++ b/ld/testplug.c @@ -82,6 +82,7 @@ static const tag_name_t tag_names[] = ADDENTRY(LDPT_LINKER_OUTPUT), ADDENTRY(LDPT_OPTION), ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK), + ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK_V2), ADDENTRY(LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK), ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK), ADDENTRY(LDPT_ADD_SYMBOLS), @@ -100,6 +101,7 @@ static const tag_name_t tag_names[] = /* Function pointers to cache hooks passed at onload time. */ static ld_plugin_register_claim_file tv_register_claim_file = 0; +static ld_plugin_register_claim_file_v2 tv_register_claim_file_v2 = 0; static ld_plugin_register_all_symbols_read tv_register_all_symbols_read = 0; static ld_plugin_register_cleanup tv_register_cleanup = 0; static ld_plugin_add_symbols tv_add_symbols = 0; @@ -389,6 +391,7 @@ dump_tv_tag (size_t n, struct ld_plugin_tv *tv) tv->tv_u.tv_string); break; case LDPT_REGISTER_CLAIM_FILE_HOOK: + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: case LDPT_REGISTER_CLEANUP_HOOK: case LDPT_ADD_SYMBOLS: @@ -440,6 +443,9 @@ parse_tv_tag (struct ld_plugin_tv *tv) case LDPT_REGISTER_CLAIM_FILE_HOOK: SETVAR(tv_register_claim_file); break; + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: + SETVAR(tv_register_claim_file_v2); + break; case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: SETVAR(tv_register_all_symbols_read); break; diff --git a/ld/testplug2.c b/ld/testplug2.c index 0a3339238f0..f1d6f5f9553 100644 --- a/ld/testplug2.c +++ b/ld/testplug2.c @@ -82,6 +82,7 @@ static const tag_name_t tag_names[] = ADDENTRY(LDPT_LINKER_OUTPUT), ADDENTRY(LDPT_OPTION), ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK), + ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK_V2), ADDENTRY(LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK), ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK), ADDENTRY(LDPT_ADD_SYMBOLS), @@ -100,6 +101,7 @@ static const tag_name_t tag_names[] = /* Function pointers to cache hooks passed at onload time. */ static ld_plugin_register_claim_file tv_register_claim_file = 0; +static ld_plugin_register_claim_file_v2 tv_register_claim_file_v2 = 0; static ld_plugin_register_all_symbols_read tv_register_all_symbols_read = 0; static ld_plugin_register_cleanup tv_register_cleanup = 0; static ld_plugin_add_symbols tv_add_symbols = 0; @@ -392,6 +394,9 @@ parse_tv_tag (struct ld_plugin_tv *tv) case LDPT_REGISTER_CLAIM_FILE_HOOK: SETVAR(tv_register_claim_file); break; + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: + SETVAR(tv_register_claim_file_v2); + break; case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: SETVAR(tv_register_all_symbols_read); break; diff --git a/ld/testplug3.c b/ld/testplug3.c index 7e009e1ee7a..652d11f4710 100644 --- a/ld/testplug3.c +++ b/ld/testplug3.c @@ -82,6 +82,7 @@ static const tag_name_t tag_names[] = ADDENTRY(LDPT_LINKER_OUTPUT), ADDENTRY(LDPT_OPTION), ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK), + ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK_V2), ADDENTRY(LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK), ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK), ADDENTRY(LDPT_ADD_SYMBOLS), @@ -100,6 +101,7 @@ static const tag_name_t tag_names[] = /* Function pointers to cache hooks passed at onload time. */ static ld_plugin_register_claim_file tv_register_claim_file = 0; +static ld_plugin_register_claim_file_v2 tv_register_claim_file_v2 = 0; static ld_plugin_register_all_symbols_read tv_register_all_symbols_read = 0; static ld_plugin_register_cleanup tv_register_cleanup = 0; static ld_plugin_add_symbols tv_add_symbols = 0; @@ -371,6 +373,9 @@ parse_tv_tag (struct ld_plugin_tv *tv) case LDPT_REGISTER_CLAIM_FILE_HOOK: SETVAR(tv_register_claim_file); break; + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: + SETVAR(tv_register_claim_file_v2); + break; case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: SETVAR(tv_register_all_symbols_read); break; diff --git a/ld/testplug4.c b/ld/testplug4.c index 109d500dc0a..9b63e8343c8 100644 --- a/ld/testplug4.c +++ b/ld/testplug4.c @@ -82,6 +82,7 @@ static const tag_name_t tag_names[] = ADDENTRY(LDPT_LINKER_OUTPUT), ADDENTRY(LDPT_OPTION), ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK), + ADDENTRY(LDPT_REGISTER_CLAIM_FILE_HOOK_V2), ADDENTRY(LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK), ADDENTRY(LDPT_REGISTER_CLEANUP_HOOK), ADDENTRY(LDPT_ADD_SYMBOLS), @@ -100,6 +101,7 @@ static const tag_name_t tag_names[] = /* Function pointers to cache hooks passed at onload time. */ static ld_plugin_register_claim_file tv_register_claim_file = 0; +static ld_plugin_register_claim_file_v2 tv_register_claim_file_v2 = 0; static ld_plugin_register_all_symbols_read tv_register_all_symbols_read = 0; static ld_plugin_register_cleanup tv_register_cleanup = 0; static ld_plugin_add_symbols tv_add_symbols = 0; @@ -392,6 +394,9 @@ parse_tv_tag (struct ld_plugin_tv *tv) case LDPT_REGISTER_CLAIM_FILE_HOOK: SETVAR(tv_register_claim_file); break; + case LDPT_REGISTER_CLAIM_FILE_HOOK_V2: + SETVAR(tv_register_claim_file_v2); + break; case LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK: SETVAR(tv_register_all_symbols_read); break; diff --git a/ld/testsuite/ld-plugin/plugin-1.d b/ld/testsuite/ld-plugin/plugin-1.d index 6aae4cdc383..381974fcb49 100644 --- a/ld/testsuite/ld-plugin/plugin-1.d +++ b/ld/testsuite/ld-plugin/plugin-1.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-10.d b/ld/testsuite/ld-plugin/plugin-10.d index f92ee650c13..f6bb0eb45c6 100644 --- a/ld/testsuite/ld-plugin/plugin-10.d +++ b/ld/testsuite/ld-plugin/plugin-10.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-11.d b/ld/testsuite/ld-plugin/plugin-11.d index 6a5abcfc060..63b81603684 100644 --- a/ld/testsuite/ld-plugin/plugin-11.d +++ b/ld/testsuite/ld-plugin/plugin-11.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-13.d b/ld/testsuite/ld-plugin/plugin-13.d index 55dea651ec5..4521b34459c 100644 --- a/ld/testsuite/ld-plugin/plugin-13.d +++ b/ld/testsuite/ld-plugin/plugin-13.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-14.d b/ld/testsuite/ld-plugin/plugin-14.d index 81365af7524..bd8ef65a204 100644 --- a/ld/testsuite/ld-plugin/plugin-14.d +++ b/ld/testsuite/ld-plugin/plugin-14.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-15.d b/ld/testsuite/ld-plugin/plugin-15.d index 02c5e60bf9b..1647500e98f 100644 --- a/ld/testsuite/ld-plugin/plugin-15.d +++ b/ld/testsuite/ld-plugin/plugin-15.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-16.d b/ld/testsuite/ld-plugin/plugin-16.d index 504fbdbc0e9..f1ee03a4768 100644 --- a/ld/testsuite/ld-plugin/plugin-16.d +++ b/ld/testsuite/ld-plugin/plugin-16.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-17.d b/ld/testsuite/ld-plugin/plugin-17.d index 159d4e47580..5a520b68466 100644 --- a/ld/testsuite/ld-plugin/plugin-17.d +++ b/ld/testsuite/ld-plugin/plugin-17.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-18.d b/ld/testsuite/ld-plugin/plugin-18.d index 284fd057686..63d8147ce8e 100644 --- a/ld/testsuite/ld-plugin/plugin-18.d +++ b/ld/testsuite/ld-plugin/plugin-18.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-19.d b/ld/testsuite/ld-plugin/plugin-19.d index 621ee7689f0..aa3076372b3 100644 --- a/ld/testsuite/ld-plugin/plugin-19.d +++ b/ld/testsuite/ld-plugin/plugin-19.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-2.d b/ld/testsuite/ld-plugin/plugin-2.d index 91822c1f867..f272f53b3c1 100644 --- a/ld/testsuite/ld-plugin/plugin-2.d +++ b/ld/testsuite/ld-plugin/plugin-2.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-26.d b/ld/testsuite/ld-plugin/plugin-26.d index c631e387a05..fef25d5c295 100644 --- a/ld/testsuite/ld-plugin/plugin-26.d +++ b/ld/testsuite/ld-plugin/plugin-26.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-3.d b/ld/testsuite/ld-plugin/plugin-3.d index f030da467b3..0c23218fef9 100644 --- a/ld/testsuite/ld-plugin/plugin-3.d +++ b/ld/testsuite/ld-plugin/plugin-3.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-30.d b/ld/testsuite/ld-plugin/plugin-30.d index eb9d4244786..690ae832990 100644 --- a/ld/testsuite/ld-plugin/plugin-30.d +++ b/ld/testsuite/ld-plugin/plugin-30.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-4.d b/ld/testsuite/ld-plugin/plugin-4.d index b240eb221e0..ac4769b99d2 100644 --- a/ld/testsuite/ld-plugin/plugin-4.d +++ b/ld/testsuite/ld-plugin/plugin-4.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-5.d b/ld/testsuite/ld-plugin/plugin-5.d index 52abaf2db9d..5c8e8b8393c 100644 --- a/ld/testsuite/ld-plugin/plugin-5.d +++ b/ld/testsuite/ld-plugin/plugin-5.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-6.d b/ld/testsuite/ld-plugin/plugin-6.d index b1854ac03f4..41f44fbc37e 100644 --- a/ld/testsuite/ld-plugin/plugin-6.d +++ b/ld/testsuite/ld-plugin/plugin-6.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-7.d b/ld/testsuite/ld-plugin/plugin-7.d index c77b66fa9bc..b202edc863e 100644 --- a/ld/testsuite/ld-plugin/plugin-7.d +++ b/ld/testsuite/ld-plugin/plugin-7.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-8.d b/ld/testsuite/ld-plugin/plugin-8.d index ca24227a02f..0a38ddb1e4e 100644 --- a/ld/testsuite/ld-plugin/plugin-8.d +++ b/ld/testsuite/ld-plugin/plugin-8.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* diff --git a/ld/testsuite/ld-plugin/plugin-9.d b/ld/testsuite/ld-plugin/plugin-9.d index 1155f4f2e33..35fde40c0b1 100644 --- a/ld/testsuite/ld-plugin/plugin-9.d +++ b/ld/testsuite/ld-plugin/plugin-9.d @@ -5,6 +5,7 @@ Hello from testplugin. .*: LDPT_LINKER_OUTPUT value 0x1 \(1\) .*: LDPT_OUTPUT_NAME 'tmpdir/main.x' .*: LDPT_REGISTER_CLAIM_FILE_HOOK func@0x.* +.*: LDPT_REGISTER_CLAIM_FILE_HOOK_V2 func@0x.* .*: LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK func@0x.* .*: LDPT_REGISTER_CLEANUP_HOOK func@0x.* .*: LDPT_ADD_SYMBOLS func@0x.* -- 2.25.1