From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by sourceware.org (Postfix) with ESMTPS id B9E213858D39 for ; Wed, 20 Sep 2023 08:34:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B9E213858D39 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-1c4194f7635so4793115ad.0 for ; Wed, 20 Sep 2023 01:34:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695198840; x=1695803640; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=aFvZRF6qBGlV+u2y9TV/y2vyJmd9qPT9jMYNLxApxV4=; b=IngygdiITwQuLKZAMy4L1Ietaxo/BKbWu7QO5jHZ5paFM79i5ajXDWv0EQqUb2g1oL j6sYIMuaBIJY8gZc5ImZd9c7z4fgAFR75KXifBIeqqmjHEUfxmLlCGW9uQ103fYtlZwn afxRHiUTu35m74/bJ5xlVdUp07kmAHZsi6064Ljb3G3D4sPf5QYPFW52KAud2y50oGab goMu43wXyMqBMmgCCPeTYLK4H3vEZzn3hBroF47QOjzI0KBvuujgu1U/2Y+E+GGIUdgX Dr2qPa3YkfJyeBFZ/0YbrfoNV/KvVSO8QCsqQI3aB+sMC1LVZOLHvnP3d7/5RCT1os1Z ASHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695198840; x=1695803640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aFvZRF6qBGlV+u2y9TV/y2vyJmd9qPT9jMYNLxApxV4=; b=Y+pR0Sci7BBJB4YD13F2wH+CSZ/QsvjuAX77tBSjqcLGoU1wCqnavweAisw/wUgyaR cgmIcK+DrN8y0MohEc4QMadsGxthEA8xlJApxpJpsvn19imlzbG+czT0pTE5nRJzrriQ bpGkPgJUnHofc9iK4mWGYqglveT3/TOYwvvdIQgbEYi+ZnZv0X1HeuPRP+E4S9i6kvGR 3MHEKLBLpPnQhwA/WJPdubrovxBFCuCMVa/UmdubGy8xSs55AnhlOAzOtESNEYivqgxK PlabfUvGw6Fx81HfvyQ+L0JiAY2/3vzaz2iQ7uy9bTbcSltawPIzFyycozHwB9ng+EJM nSEQ== X-Gm-Message-State: AOJu0Yyv5rXKomF4VA04++smHAPC83ZewMDr/5CCZRqKO6sgKinEnDcL KO9RFf5W4odQkERn4Vpz16/G/JaxuFM= X-Google-Smtp-Source: AGHT+IGcjVJ/M2IAGhx2clcmPQDwRersPiWvoYWonC1MD+ZSTNIiW98im2OwcOxVCNHN52O5wo9U4g== X-Received: by 2002:a17:903:1c1:b0:1c3:e2eb:f79d with SMTP id e1-20020a17090301c100b001c3e2ebf79dmr6813429plh.8.1695198840051; Wed, 20 Sep 2023 01:34:00 -0700 (PDT) Received: from blue.flets-east.jp ([2405:6580:8dc0:3c00:bf3f:9318:f978:c133]) by smtp.gmail.com with ESMTPSA id n6-20020a170902e54600b001b694140d96sm11312573plf.170.2023.09.20.01.33.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 01:33:59 -0700 (PDT) From: Rui Ueyama X-Google-Original-From: Rui Ueyama To: Nelson Chu Cc: binutils@sourceware.org, Rui Ueyama Subject: [PATCH v2] RISC-V: emit R_RISCV_RELAX for the la pseudo instruction Date: Wed, 20 Sep 2023 17:31:26 +0900 Message-Id: <20230920083124.2072273-1-ruiu@bluewhale.systems> X-Mailer: git-send-email 2.34.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,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 List-Id: Now the macro identifier is stored to tc_fix_data if a relocation is created as a result of assembler macro expansion. --- gas/config/tc-riscv.c | 15 +++++++++++++++ gas/config/tc-riscv.h | 8 ++++++++ gas/testsuite/gas/riscv/la-variants.d | 3 +++ 3 files changed, 26 insertions(+) diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 3b520ad208b..c761b793afc 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -59,6 +59,9 @@ struct riscv_cl_insn fixS *fixp; }; +/* The identifier of the assembler macro we are expanding, if any. */ +static int source_macro = -1; + /* All RISC-V CSR belong to one of these classes. */ enum riscv_csr_class { @@ -1659,6 +1662,7 @@ append_insn (struct riscv_cl_insn *ip, expressionS *address_expr, address_expr, false, reloc_type); ip->fixp->fx_tcbit = riscv_opts.relax; + ip->fixp->tc_fix_data.source_macro = source_macro; } } @@ -2020,6 +2024,8 @@ macro (struct riscv_cl_insn *ip, expressionS *imm_expr, int rs2 = (ip->insn_opcode >> OP_SH_RS2) & OP_MASK_RS2; int mask = ip->insn_mo->mask; + source_macro = mask; + switch (mask) { case M_LI: @@ -2168,6 +2174,8 @@ macro (struct riscv_cl_insn *ip, expressionS *imm_expr, as_bad (_("internal: macro %s not implemented"), ip->insn_mo->name); break; } + + source_macro = -1; } static const struct percent_op_match percent_op_utype[] = @@ -4049,6 +4057,13 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) break; case BFD_RELOC_RISCV_GOT_HI20: + /* R_RISCV_GOT_HI20 and the following R_RISCV_LO12_I are relaxable + only if it is created as a result of la or lga assembler macros. */ + if (fixP->tc_fix_data.source_macro == M_LA || + fixP->tc_fix_data.source_macro == M_LGA) + relaxable = true; + break; + case BFD_RELOC_RISCV_ADD8: case BFD_RELOC_RISCV_ADD16: case BFD_RELOC_RISCV_ADD32: diff --git a/gas/config/tc-riscv.h b/gas/config/tc-riscv.h index 0c70c7d4739..4fba3a07829 100644 --- a/gas/config/tc-riscv.h +++ b/gas/config/tc-riscv.h @@ -101,6 +101,14 @@ extern void riscv_pre_output_hook (void); #define TC_FORCE_RELOCATION_LOCAL(FIX) 1 #define DIFF_EXPR_OK 1 +struct riscv_fix +{ + int source_macro; +}; + +#define TC_FIX_TYPE struct riscv_fix +#define TC_INIT_FIX_DATA(FIX) (FIX)->tc_fix_data.source_macro = -1 + extern void riscv_pop_insert (void); #define md_pop_insert() riscv_pop_insert () diff --git a/gas/testsuite/gas/riscv/la-variants.d b/gas/testsuite/gas/riscv/la-variants.d index b1d316983b7..e8ac09c2af2 100644 --- a/gas/testsuite/gas/riscv/la-variants.d +++ b/gas/testsuite/gas/riscv/la-variants.d @@ -21,11 +21,13 @@ Disassembly of section .text: [ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+00000617[ ]+auipc[ ]+a2,0x0 [ ]+[0-9a-f]+:[ ]+R_RISCV_GOT_HI20[ ]+a +[ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+(00062603|00063603)[ ]+(lw|ld)[ ]+a2,0\(a2\).* [ ]+[0-9a-f]+:[ ]+R_RISCV_PCREL_LO12_I[ ]+\.L0[ ]+ [ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+00000697[ ]+auipc[ ]+a3,0x0 [ ]+[0-9a-f]+:[ ]+R_RISCV_GOT_HI20[ ]+a +[ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+(0006a683|0006b683)[ ]+(lw|ld)[ ]+a3,0\(a3\).* [ ]+[0-9a-f]+:[ ]+R_RISCV_PCREL_LO12_I[ ]+\.L0[ ]+ [ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* @@ -37,6 +39,7 @@ Disassembly of section .text: [ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+00000797[ ]+auipc[ ]+a5,0x0 [ ]+[0-9a-f]+:[ ]+R_RISCV_GOT_HI20[ ]+a +[ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* [ ]+[0-9a-f]+:[ ]+(0007a783|0007b783)[ ]+(lw|ld)[ ]+a5,0\(a5\).* [ ]+[0-9a-f]+:[ ]+R_RISCV_PCREL_LO12_I[ ]+\.L0[ ]+ [ ]+[0-9a-f]+:[ ]+R_RISCV_RELAX[ ]+\*ABS\* -- 2.34.1