From patchwork Thu Jul 20 14:39:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexey Lapshin X-Patchwork-Id: 123319 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c923:0:b0:3e4:2afc:c1 with SMTP id j3csp3166208vqt; Thu, 20 Jul 2023 07:39:37 -0700 (PDT) X-Google-Smtp-Source: APBJJlF/on9paCtfYL2CWBqK/QQ9SpItOe1Q8pUZdsNMNGF0mknlpai8UlsL2GRLbZ2jhxCZm8Et X-Received: by 2002:a05:6402:614:b0:521:a9af:53f9 with SMTP id n20-20020a056402061400b00521a9af53f9mr6328760edv.11.1689863977696; Thu, 20 Jul 2023 07:39:37 -0700 (PDT) Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id c14-20020aa7c98e000000b00521830574c0si859934edt.204.2023.07.20.07.39.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jul 2023 07:39:37 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=J0r0wHcV; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 071BC385AFBF for ; Thu, 20 Jul 2023 14:39:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 071BC385AFBF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689863973; bh=L9ToShe2TL0fveri4VdGffaqUHL5gA5PdTE4MNTE6bc=; h=To:CC:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=J0r0wHcV4CcO3fkIXIu93IrU2iM3HmUJLK0W8As+frQOeomrRO4uNugOUvWXMZQNZ UXhm9igBmNCxQLvEFS44xGSgd9O2V13z6/A/eagx3hVGczYNL4skzggS7yu4j6wJMR nOSAfE3CG1XGvQMpWQPk5bOtyWgmkLJi9E79GC2A= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2116.outbound.protection.outlook.com [40.107.215.116]) by sourceware.org (Postfix) with ESMTPS id E7A8E385840F for ; Thu, 20 Jul 2023 14:39:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E7A8E385840F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LolSecB0kVkxhqAtG2oG/cVNvy6+bPOc7iqXTI6qeB0qNhjuhQOUAIQSx/fwnaZ6Hnqh9n8keu9oTB8y0ECBlrKG/gZCGIHEBG42KOhiUe3ziBaL1XOjNYmmmq7TjgjnNzM5w461QcbNz2Q/mcZkqY78y/4V4KFjeo5Z58tcBb3J1IAohxWM8jaHKMAYvm1U27S4NNanmyVabfLWm+KYcXtcAVDgPac0PjrftFA4Nvq7Rg+oKRm7ZNuwQKpnkp7Zdj45rz7sK4G7I1AbwNSlLoFcH2bjAL8YOAJAUu+tz+lysp9XsMDyvtVDQyiwXS8c75yRwHF66mvNg+Of3Mpbog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L9ToShe2TL0fveri4VdGffaqUHL5gA5PdTE4MNTE6bc=; b=Md0ONuELM18R8xBaPdbrN2T+rvYbfXzYUIneZvnIjr6F7Oz04LPr3UZBlZrUfHuk0QMp9VH0NOwvaUqSrr7DMHLtIr3OHG9kyswTpsYzTvrw4xTsYwTIC4xW1KM7wb9JJ2Uv7fvD+jyLfVHrsmOjsuSud1Aq01lc69Uu5VQ76EZAgwRCKf/aZNL1Vyp4HLVizMd4bXfsWn431VP8x6saWHqjpe46D9mMZtH9mU5lp+L1i9lRBJjtlGLbY4e9TMMYmJa82ViM6D8Dqc8wT77j4nq1DJGUFLDSrZ1adrh0KS8+stS8YzQtLNr1kV2mdD5ogqHVn3MiyGKnRoK2IeccuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=espressif.com; dmarc=pass action=none header.from=espressif.com; dkim=pass header.d=espressif.com; arc=none Received: from TYZPR04MB5736.apcprd04.prod.outlook.com (2603:1096:400:1fa::7) by SEZPR04MB5852.apcprd04.prod.outlook.com (2603:1096:101:7f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6588.33; Thu, 20 Jul 2023 14:39:14 +0000 Received: from TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::cb3d:7677:ae5b:c6a9]) by TYZPR04MB5736.apcprd04.prod.outlook.com ([fe80::cb3d:7677:ae5b:c6a9%5]) with mapi id 15.20.6588.031; Thu, 20 Jul 2023 14:39:14 +0000 To: "binutils@sourceware.org" CC: Alexey Gerenkov , Ivan Grokhotkov , "jcmvbkbc@gmail.com" Subject: [PATCH] xtensa: add dynconfig option for ld/gas Thread-Topic: [PATCH] xtensa: add dynconfig option for ld/gas Thread-Index: AQHZuxf0Tj5G/+lV4kOZc0TdVzTH8Q== Date: Thu, 20 Jul 2023 14:39:14 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR04MB5736:EE_|SEZPR04MB5852:EE_ x-ms-office365-filtering-correlation-id: c33b913e-a8d3-45b6-9f9e-08db892f16dc x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: cHwEy1zOsZBOZtdA/uM29ZpUfaUgtTTaRkfAIkUwkDd3m6Dm0p68HwQROdqIZqegxPkL3w6xb/FkPJi+su/oiEGcuTUSqxVfOC/AH3f/fh0K5AZUmOhe7NZjHUSSOHioKaarD0uJYWG91k3yCXv1ivDYTaLAKTTB5IXbyFeA5GLmlntQatu/6Fn64kJVhomfSqpf/P8FsrdHMnbSBooFraC6FqDzuuWUTOR4OXFkV9RDDBHtFRHRzwocns1Y/D4nyLY9TeyHxynU85olRALnbdd+bdiacyYuto3E1+9wGZIc03AfBUbiaM9UCEqxVdBAN7MOyavE8K5+VCA0F8ekUadmsKS4fxZylsLh5QMRRKJcY1owC6KHaZ+9pmRGM0nGZMf0bV5Je9k4I+2u+yWnFGrX/83Xuw/pagoi+FlkLjBJ2EY+mcyFOMoM3UhXV4DUB6IvhlgQK6krwq3xQBZWM2TDjm4Xx6g/wood7O+tBpU2f14i9HG9lT1CxISlPoGNQf8PhySiZFJ1xzkPMqKocVnzP399lDqLxcz55ZE4+CfOYAL/CPonAWBm4PXYFA2GtgTmqPf3s+Vx63rPC2AJBagB1d8mbQFs7xyj9fuaYXnk/hplJ+0Lk0rcLXyoU/Lw x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR04MB5736.apcprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(376002)(366004)(39850400004)(346002)(396003)(136003)(451199021)(38070700005)(26005)(186003)(6506007)(36756003)(83380400001)(86362001)(38100700002)(122000001)(2616005)(66946007)(66446008)(76116006)(4326008)(66476007)(91956017)(66556008)(6916009)(64756008)(316002)(5660300002)(41300700001)(8676002)(44832011)(8936002)(2906002)(6486002)(71200400001)(6512007)(54906003)(478600001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?dousqUkJZloLUkcpGpcu2kig4xFA?= =?utf-8?q?x6+GgSeFeY967Z+Wn+dMsyGV7Ben36KsdlxYRKZS0Yr/KlQCMB5mOJAIEXhisP1L2?= =?utf-8?q?2H0S31GKzcz2w/ftCN51KoNAY5FalayZmJX/VlZ5S7m3RTrGCgot155eLHaUzfjRF?= =?utf-8?q?hd+BcrirvuRQvxPC789Ctd3iCFpOMwDpLOZHJu3PLJciuzv+TBuCw39pJ9uretXiI?= =?utf-8?q?65fRh1j79M/2zy2/JvavVBHIqwReR+C1e1VM17LEltVc8uK99feXv93wcuGD/Q7HY?= =?utf-8?q?GxScfzQDvyGTZsx6G0+GRv3QIzloqQXfL3MEe2+pcNoa8k2LcPdEscjB52tGJgRfy?= =?utf-8?q?v3O0wAQVnzYTE9eJ5AMgTsCtm3CG4DHDh5ZX6Tnw9Xhpr94lfgS6tXjjuMGTjhLie?= =?utf-8?q?01vh7a0GrpRBNEnPr2Eh5gFuARnj5RXSI90fOuZN4xvTEu6DtPNAjOr6PmHcTFTP+?= =?utf-8?q?0P3bUEvFI9GObCOhcGCe1UtCrpJ8c6aue0ZmdbuPNzhsu8KIRfItuqzVlP1oR1myZ?= =?utf-8?q?PEUt0RHxZceMaWLLpZHREkZaa5D6Vva7hJSbJrwAe+e86T2Scr/c8ufRRmj+e/VpX?= =?utf-8?q?Ub6diHg9fiz75ET8CoywMZIjhi9pSSA7hXWibQxJHduNDVqVdqRD1uV8mRc8B63qL?= =?utf-8?q?yLCVxBTHy0lyZ7dvhXM8ZlgUfnwHBTAQ2Fw/+max0B7diy1oZ3xAenR0Hx1EOkxhN?= =?utf-8?q?kLr+FWyLQud7ETNz16fLHs1kYErKT6WhiG+yi4pvXyDvfOJZ+9OOBiI61E7QERNIK?= =?utf-8?q?YkXnOP8Kt7uITDTzq0+OQCrV70I+FLu3qrpA/Or+V2K5f+QkGoHr3bKrkZlTDzmHC?= =?utf-8?q?xMxtdcFPq3/BrvpkMoN+aRHPbIgHKesaaTj2S2Z+a61I7QFhlNzIxGiwY0LO6qh6s?= =?utf-8?q?QPc61gOLaQ5+OXUuWt3puH9gxr8azSKjIyySrwOj4+8UCLk9oMdg0H5FEEYqfKO7o?= =?utf-8?q?lgQb6Fogcn8URQkulY2MPxlvgF234v/T3ORuZClympwciRK6QYUr9Y8net7oCjVzF?= =?utf-8?q?UQcnPSHj7pKxAnVuA0C5ExwOz57q5UldmUNSCZZlUqyngb422Pa70duzgXTCZG4z2?= =?utf-8?q?Qff2K+VGP05x9GspyWI7at5scIGFrF/eP/UftOJphfk78OMayvpf7/8lRfoLO2sE7?= =?utf-8?q?bbvYAMw0Ne1V4xtC1cC/wU18tPtymlWSzrOEXvxKQurx3ZLdwAh2euBnuFAMEfRR3?= =?utf-8?q?MIM+g0695+fBP7hR/lW+5yaY56GJksxZw6PXqgQEaspGbik7KmQUQiww7jdzV3DKZ?= =?utf-8?q?WehQTP5s6G0+mDWvKx8wv2wYG3+46tOdvS91kT1Y0SzHRASWGtxRlO1n/LpbXmMhb?= =?utf-8?q?ir+Vj96OJfO7gPKfOexEPKC86SXY/zup+woyy13S/AqEUb0rQJtltUGUtdlk0D+Ai?= =?utf-8?q?Ep+1OBmfhhYfhWD39a/cvjSACUbMp5SV6SnhiA9S5rPvgKt3pCkmoqumNUsZB6kev?= =?utf-8?q?g92ch4qsu8W3in59MFvsK2ERhky4aqE5nKeJiBfKrcehPj3ZNDd1EsY2LC4g6qvMQ?= =?utf-8?q?fgykbT1CbhvukhMZ4aCHW9yVOfynnHkX9j69pbhd2lexNFuvETux+Zw=3D?= Content-ID: <5C11CA84DC33034BADB894BA9FB2A659@apcprd04.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: espressif.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR04MB5736.apcprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c33b913e-a8d3-45b6-9f9e-08db892f16dc X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Jul 2023 14:39:14.2688 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 5faf27fd-3557-4294-9545-8ea74a409f39 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: GlySe1Ahr2EntC1fWFuZDNY1k6nYAKxQd1B6AwaWYCVX/jRC/9fkrTD0+9vVn2tZd9+2MeGHcF/sOP6nl1/BNw4fGMxZfReUOfU+p9dZLCA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR04MB5852 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alexey Lapshin via Binutils From: Alexey Lapshin Reply-To: Alexey Lapshin Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771950810226017442 X-GMAIL-MSGID: 1771950810226017442 bfd/ * bfd/xtensa-dynconfig.c: Add xtensa_dynconfig_file variable. gas/ * gas/config/tc-xtensa.c: Add dynconfig option. ld/ * ld/emultempl/xtensaelf.em: Add dynconfig option. --- bfd/xtensa-dynconfig.c | 57 +++++++++++++++++++++++++++++++++++++-- gas/config/tc-xtensa.c | 29 ++++++++++++++++++-- ld/emultempl/xtensaelf.em | 10 +++++++ 3 files changed, 92 insertions(+), 4 deletions(-) -- 2.34.1 diff --git a/bfd/xtensa-dynconfig.c b/bfd/xtensa-dynconfig.c index ebf4098f59c..0140936e98e 100644 --- a/bfd/xtensa-dynconfig.c +++ b/bfd/xtensa-dynconfig.c @@ -20,6 +20,7 @@ #include "sysdep.h" #include "bfd.h" #include "libbfd.h" +#include "libiberty.h" #define XTENSA_CONFIG_DEFINITION #include "xtensa-config.h" @@ -64,6 +65,57 @@ dlerror (void) #define CONFIG_ENV_NAME "XTENSA_GNU_CONFIG" +/* this variable can be changed with input option for gas/ld */ +const char *xtensa_dynconfig_file = ""; + +#ifdef BFD_SUPPORTS_PLUGINS + +static char *get_xtensa_dynconfig_file (void) +{ + const char *xtensa_dynconfig_env = getenv (CONFIG_ENV_NAME); + if (!strlen (xtensa_dynconfig_file)) + { + if (xtensa_dynconfig_env && !strlen (lbasename (xtensa_dynconfig_env))) + { + /* XTENSA_GNU_CONFIG has directory path, but dynconfig file is not set */ + return NULL; + } + else if (xtensa_dynconfig_env) + { + /* XTENSA_GNU_CONFIG has filepath */ + return xstrdup (xtensa_dynconfig_env); + } + /* dynconfig is not set */ + return NULL; + } + if (!xtensa_dynconfig_env) + { + /* XTENSA_GNU_CONFIG has filepath */ + return xstrdup (xtensa_dynconfig_file); + } + if (!strlen (lbasename (xtensa_dynconfig_env))) + { + /* XTENSA_GNU_CONFIG has directory path and dynconfig file is set */ + const size_t len = strlen (xtensa_dynconfig_env) + + strlen (xtensa_dynconfig_file) + 1; + char *path = ( char *) xmalloc (len); + strcpy (path, xtensa_dynconfig_env); + strcat (path, xtensa_dynconfig_file); + return path; + } + if (strcmp (lbasename (xtensa_dynconfig_env), + lbasename (xtensa_dynconfig_file))) + { + _bfd_error_handler (_("Both %s and \"-dynconfig=\" specified but pointed different files: \"%s\" \"%s\""), + CONFIG_ENV_NAME, xtensa_dynconfig_env, xtensa_dynconfig_file); + abort (); + } + /* XTENSA_GNU_CONFIG and mdynconfig option point to the same file */ + return xstrdup (xtensa_dynconfig_env); +} + +#endif /* BFD_SUPPORTS_PLUGINS */ + const void *xtensa_load_config (const char *name ATTRIBUTE_UNUSED, const void *no_plugin_def, const void *no_name_def ATTRIBUTE_UNUSED) @@ -75,12 +127,13 @@ const void *xtensa_load_config (const char *name ATTRIBUTE_UNUSED, if (!init) { - const char *path = getenv (CONFIG_ENV_NAME); + char *path = get_xtensa_dynconfig_file(); init = 1; if (!path) return no_plugin_def; handle = dlopen (path, RTLD_LAZY); + free (path); if (!handle) { _bfd_error_handler (_("%s is defined but could not be loaded: %s"), @@ -107,7 +160,7 @@ const void *xtensa_load_config (const char *name ATTRIBUTE_UNUSED, #else if (!init) { - const char *path = getenv (CONFIG_ENV_NAME); + const char *path = strcmp(xtensa_dynconfig_file, "") ? xtensa_dynconfig_file : getenv (CONFIG_ENV_NAME); init = 1; if (path) diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c index 550c8256e3f..d9ba8bc8690 100644 --- a/gas/config/tc-xtensa.c +++ b/gas/config/tc-xtensa.c @@ -733,6 +733,8 @@ enum option_abi_windowed, option_abi_call0, + + option_dynconfig, }; const char *md_shortopts = ""; @@ -817,6 +819,7 @@ struct option md_longopts[] = { "abi-windowed", no_argument, NULL, option_abi_windowed }, { "abi-call0", no_argument, NULL, option_abi_call0 }, + { "dynconfig=", required_argument, NULL, option_dynconfig }, { NULL, no_argument, NULL, 0 } }; @@ -1053,6 +1056,12 @@ md_parse_option (int c, const char *arg) elf32xtensa_abi = XTHAL_ABI_CALL0; return 1; + case option_dynconfig: + { + /* Applied in xtensa_init() */ + return 1; + } + default: return 0; } @@ -1087,7 +1096,9 @@ Xtensa options:\n\ --[no-]separate-prop-tables\n\ [Do not] place Xtensa property records into\n\ individual property sections for each section.\n\ - Default is to generate single property section.\n", stream); + Default is to generate single property section.\n\ + --dynconfig=\n\ + Use xtensa dynconfig options\n", stream); } @@ -5268,8 +5279,22 @@ xg_init_global_config (void) } void -xtensa_init (int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) +xtensa_init (int argc, char **argv) { + /* This function is called before AS arguments parsed. + * So, dynconfig file must be set first. + */ + int i; + const char * const dynconfig_opt = "--dynconfig="; + for (i = 1; i < argc; i++) + { + if (!strncmp (dynconfig_opt, argv[i], strlen(dynconfig_opt))) + { + extern const char* xtensa_dynconfig_file; + xtensa_dynconfig_file = &argv[i][strlen(dynconfig_opt)]; + break; + } + } xg_init_global_config (); } diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em index 4cb9bda8f92..615bde5655b 100644 --- a/ld/emultempl/xtensaelf.em +++ b/ld/emultempl/xtensaelf.em @@ -1930,6 +1930,7 @@ PARSE_AND_LIST_PROLOGUE=' #define OPTION_NO_LITERAL_MOVEMENT (OPTION_LITERAL_MOVEMENT + 1) #define OPTION_ABI_WINDOWED (OPTION_NO_LITERAL_MOVEMENT + 1) #define OPTION_ABI_CALL0 (OPTION_ABI_WINDOWED + 1) +#define OPTION_DYNCONFIG (OPTION_ABI_CALL0 + 1) extern int elf32xtensa_size_opt; extern int elf32xtensa_no_literal_movement; extern int elf32xtensa_abi; @@ -1941,6 +1942,7 @@ PARSE_AND_LIST_LONGOPTS=' { "no-literal-movement", no_argument, NULL, OPTION_NO_LITERAL_MOVEMENT}, { "abi-windowed", no_argument, NULL, OPTION_ABI_WINDOWED}, { "abi-call0", no_argument, NULL, OPTION_ABI_CALL0}, + { "dynconfig=", required_argument, NULL, OPTION_DYNCONFIG}, ' PARSE_AND_LIST_OPTIONS=' @@ -1951,6 +1953,8 @@ PARSE_AND_LIST_OPTIONS=' --abi-windowed Choose windowed ABI for the output object\n")); fprintf (file, _("\ --abi-call0 Choose call0 ABI for the output object\n")); + fprintf (file, _("\ + --dynconfig=FILE Choose xtensa dynconfig file\n")); ' PARSE_AND_LIST_ARGS_CASES=' @@ -1969,6 +1973,12 @@ PARSE_AND_LIST_ARGS_CASES=' case OPTION_ABI_CALL0: elf32xtensa_abi = XTHAL_ABI_CALL0; break; + case OPTION_DYNCONFIG: + { + extern const char* xtensa_dynconfig_file; + xtensa_dynconfig_file = optarg; + break; + } ' # Replace some of the standard ELF functions with our own versions.