From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by sourceware.org (Postfix) with ESMTPS id E0F733858D28 for ; Mon, 18 Jul 2022 09:47:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E0F733858D28 Received: by mail-lf1-x132.google.com with SMTP id z22so4726465lfu.7 for ; Mon, 18 Jul 2022 02:47:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=XPPzw7WCPW8ab2OtIIHXU28UuM6fCPjQ9eMwB8Avo9Q=; b=3TX6dlh3a4Mbl93BN8aUiP+C3SlbpZEg+rwGgPC1XU85R6zJ2RecdNx1TcqdgTp+W7 L+7xu/PpS58D4VPe4WAcDnu57P4GF6Dvs6K4O59JTgeSE/DGQ6bUISWoXLCPpQD6EKot nCDGDBW4UxcPrO0EzTL1cOxMKMPOTKDboS82IYQrLpgAkB8umFWAaxH/wFg2JxLVm7Sx MHI+nJTuC3DyVzcriEw/M9r48uTn0x0mK/kK08REGou/ZQI7q0BgJP3t8d1bm177D38M Lp0Qug5oyD6aprpooKpYA+UrY2FB8WiIT+UiawH+IeV5o3vVvNi70SdfC7fmHxHDPZIF Az/g== X-Gm-Message-State: AJIora8yJ4L7AFoQZSeBeDj8dHGTuz/4lMimDeBwVw2z1mpyy9Ljr01w K/jhB0GF3BdJDtdWPySjnbQJHvdhlNc= X-Google-Smtp-Source: AGRyM1uI7bDaOgHrJC8JOgLjqHC+W+mtyr4edQno1goA0l9lIQvKnbt0uAcd8EfZLo7lxhFQwV3lvg== X-Received: by 2002:a05:6512:3b0a:b0:489:da13:180a with SMTP id f10-20020a0565123b0a00b00489da13180amr14751029lfv.489.1658137653212; Mon, 18 Jul 2022 02:47:33 -0700 (PDT) Received: from localhost.localdomain (broadband-188-32-220-156.ip.moscow.rt.ru. [188.32.220.156]) by smtp.gmail.com with ESMTPSA id z6-20020a195046000000b0047f59336d6asm2506899lfj.179.2022.07.18.02.47.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Jul 2022 02:47:32 -0700 (PDT) Sender: Dmitry Selyutin From: Dmitry Selyutin To: binutils@sourceware.org Cc: Alan Modra , Luke Kenneth Casson Leighton , Dmitry Selyutin Subject: [PATCH] gas/symbols: introduce md_resolve_symbol Date: Mon, 18 Jul 2022 12:46:53 +0300 Message-Id: <20220718094652.21455-1-ghostmansd@gmail.com> X-Mailer: git-send-email 2.37.0 In-Reply-To: <20220714212651.297902-1-ghostmansd@gmail.com> References: <20220714212651.297902-1-ghostmansd@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.2 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.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2022 09:47:36 -0000 Assuming GMSD is a special operand, marked as O_md1, the code: .set VREG, GMSD .set REG, VREG extsw REG, 2 ...fails upon attempts to resolve the value of the symbol. This happens since machine-dependent values are not handled in the giant op switch. We introduce a custom md_resolve_symbol macro; the ports can use this macro to customize the behavior when resolve_symbol_value hits O_md operand. --- gas/doc/internals.texi | 6 ++++++ gas/symbols.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/gas/doc/internals.texi b/gas/doc/internals.texi index 9221801f63..59b2d3acee 100644 --- a/gas/doc/internals.texi +++ b/gas/doc/internals.texi @@ -1034,6 +1034,12 @@ Predefined symbols with fixed values, such as register names or condition codes, are typically entered directly into the symbol table when @code{md_begin} is called. One argument is passed, a @code{char *} for the symbol. +@item md_resolve_symbol +@cindex md_resolve_symbol +If this macro is defined, GAS will call it upon resolving machine-dependent +symbols (that is, for any symbol with operation O_md1..O_md32 inclusively). +If this functions returns zero, then the symbol could not be resolved. + @item md_operand @cindex md_operand GAS will call this function with one argument, an @code{expressionS} diff --git a/gas/symbols.c b/gas/symbols.c index 6904a3102c..637ecd7515 100644 --- a/gas/symbols.c +++ b/gas/symbols.c @@ -1408,6 +1408,44 @@ resolve_symbol_value (symbolS *symp) BAD_CASE (op); break; + case O_md1: + case O_md2: + case O_md3: + case O_md4: + case O_md5: + case O_md6: + case O_md7: + case O_md8: + case O_md9: + case O_md10: + case O_md11: + case O_md12: + case O_md13: + case O_md14: + case O_md15: + case O_md16: + case O_md17: + case O_md18: + case O_md19: + case O_md20: + case O_md21: + case O_md22: + case O_md23: + case O_md24: + case O_md25: + case O_md26: + case O_md27: + case O_md28: + case O_md29: + case O_md30: + case O_md31: + case O_md32: +#ifdef md_resolve_symbol + if (md_resolve_symbol (symp, &final_val)) + break; +#endif + goto exit_dont_set_value; + case O_absent: final_val = 0; /* Fall through. */ -- 2.37.0