From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00088.outbound.protection.outlook.com [40.107.0.88]) by sourceware.org (Postfix) with ESMTPS id 94C84385AE43 for ; Thu, 28 Jul 2022 11:37:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 94C84385AE43 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GODQgDEdmM9HLTIQoxt6LwcLYJzm81wnhmfoies7YQA9VG2ZML8TcrCAjk9iA2OPXM51POyKKP1cXB5dGgEUJvtmciD2bWIEgjeUYMeC6IOWuujvMNKFK+9W7KJJwZSlFUPTg+dCBG3bwXRj5Ggwyln/MVvkaVfEKE6CIAVrfEIbL/JZGna3YVofCQdQnWNDzJL1yqkjvCpg/fUWTJyHrfjRNMS9MycHCX3UqosDmPP20dxpEsWR6LA158kRRCzW0sBNGBr6nIKGM8304RgqHLG/1FkBKXXj/fmhVdyTlpRzvtpK0Fd0q4SJ/0CwdXupjEfnZrR6Cg7Wk6X7k/3Nww== 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=z8w/nKT1OX1BPP4CW84ttqjNHD9SpLghhHm6hWg7ZYE=; b=HDE4VvQvRuYllkuDBPcIL1VyUZmTsNOqwO/9uhFiX+CUcKfUsGmQe5IvjzXCrjfqi58Oc/f4YuQAyKF5hWA7gWOTh1MqYcp/0+Zq0dOpQ7FzaLjaqLPKG4TVh8qVbMg254fVLWLQkXlbiqZIYlo3n6z42BFfNqKPpOwmZ+HqqXY/zsqB91N5yDJg3WFurnuT0aSoabaoSILu1vSqcZFz2lfJTsz69vjtHJbEXa6yZW4V7S8l3dckpYcsXZEMc5uIP4ifR/LHZV5ykjh0ZEk7BQKN/nPmBvDMc9lu1II9gtPnkKEAXzD9hJENM9FZLZnvd3+9/Z27wyso6Yi9AnAoDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AM5PR04MB2945.eurprd04.prod.outlook.com (2603:10a6:206:a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5458.25; Thu, 28 Jul 2022 11:37:25 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::9da9:fa60:f04a:2a0e]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::9da9:fa60:f04a:2a0e%7]) with mapi id 15.20.5482.011; Thu, 28 Jul 2022 11:37:25 +0000 Message-ID: Date: Thu, 28 Jul 2022 13:37:24 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH] Arm64: re-work PR gas/27217 fix Content-Language: en-US From: Jan Beulich To: Nick Clifton , Marcus Shawcroft , Richard Earnshaw Cc: Binutils References: <0c74179c-6b0d-d4e0-40bc-bdc245aad57d@suse.com> In-Reply-To: <0c74179c-6b0d-d4e0-40bc-bdc245aad57d@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: FR0P281CA0125.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:97::20) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6ec2bf43-7f12-4144-7e82-08da708d8b4a X-MS-TrafficTypeDiagnostic: AM5PR04MB2945:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bLghQc6GnMQKZOzT4UOprkOxzATuxusm0UZxW5u0mblBojyOnZatbuuVl64Jobd3J0y+OOJqu0WcfgnlsDqvH2qx+JuNkxuQOTZYayfKjce9Kx8IiQlTLL4xMj/5qShtRL8aKsI7Z5geK+O/kVcNdMdYRLLSreyrRE+9LdGHqfftqADI04cCSeZjKEjIvGsa4NfqUmAZLv7YROxVFvSWeeu6dxmc1aMPa9n8WaQzqSudIeZau9ujswV6ihS2mNV2ksIVGlLJ16+q3npb55Wd27hyI4IWHscYQeVYQMA8W+DW3M+lbKE6FOpggjbcSSnw06DCat3y6v08c+HF5lW1StRZciYR2yEdwRMpO1evHOBeCFWgaGrHW8b8S74FxRfRQHjopeUa586xa0vyUFO24SAQggGaSBuRMXm8H00QiYXlnPKB6HjhZikWNzFeI/Ic/SndvECaQWwhXdUL3SQuKxhdNnij8zozlt/7F3wuGVmgjQQmGm6vpsmgb3yeSwMq+oMwbmlAXlO20ChA2fpMTsCZBh3Fe1dB8+925aX913l0s1VhsgW7QT/69jAFw3l3o7XpXrTdnwlQCXG5OG6Ew8yBh78qnEJ3IsREi3YzEpw7pcDyfYMYhd6MZnukFLMpYnM58GuGhTlhq5FMx6r6c7T5zJKwnYFWEHb2jK7lUmQjfeQMPfMIIZcDWTln9TCLzyiwwZppGAOSWCK9zZ15zM5qyc6ozznGRwMLlJW7YKExDGOMj9yDzqryPp7dKAXWUZIFH4SC+4bk2tQLHgedxPmwRUsmYOUjl/i90XRnhIk/scpoOhVqkbLm/KuCcunNQN/09ti2ZZaLPcsybSjpCQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR04MB6560.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230016)(396003)(366004)(346002)(376002)(39860400002)(136003)(6512007)(186003)(66476007)(66946007)(36756003)(8676002)(41300700001)(83380400001)(31696002)(66556008)(478600001)(110136005)(26005)(31686004)(6506007)(6486002)(2616005)(86362001)(38100700002)(8936002)(4326008)(5660300002)(316002)(53546011)(2906002)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UzZXcG1JWlg3bnh2RzZLd1ZyaG1GUzNadGRYcG81cG9IVmROaGNGazZ1ZG1k?= =?utf-8?B?eHAvUDBtcG9SQUV4V2Zuekp3NUpxTjN4SzZ2WTZJVXFTSnc1N2QyL2ZRTkdT?= =?utf-8?B?V2txVlFPRTdEZ3RXbUs5dVZJa2p4aWkyZ3B2aUplUGVCb3BGTUpubWJ0NTEv?= =?utf-8?B?YlFXMmNRVDNPdW9YYkhMNzhmejZSRU1DQklBN1F5Ni9OTHNob3dTelN4TDlM?= =?utf-8?B?cmpSSHVhS2h0TCtMMk5CYUZGOWl3dVNLNFB5b3ROa3N3VExaYVBZUFRHbEdw?= =?utf-8?B?S08vNnhxWkQyWEVoN1N0VXY0MTdLR2g5bEJ6NUp0TFNUaVEwZU13M1FqTlRU?= =?utf-8?B?c3R1QU84VFJEeExmRWxyUVBpaTRnSWhvQ3M4ZDFETnJySm5wWk1wc0dhejc1?= =?utf-8?B?cmlZNGNUZUkyR3lKRU5jNHNsOGp3aU4wRnJHUHZwVmV4ZDMwK2JscVd5RnhQ?= =?utf-8?B?b0hGWUtOcjdpMFB5SmlRSUVKUjN2aExzSG1wVE9SZ25xUXFPZGV0cUNCSlQz?= =?utf-8?B?UlJtYU4vcXJEY0c5c01XOHFhTy8wWjNZVFpsRHFqaE83eEt0dHZuVUlyTHBy?= =?utf-8?B?UEgxUjcvdit2WWtjQTFoVU5NWTE4OUpKQTRLNHkyWjd6R3o4Nkh3eW1RaFdO?= =?utf-8?B?aFBtZkdYcGpBdTNINE5NWlZEd0FUNTlnYVJ6eXhPaHg1OXRDcjdVMWRBbndC?= =?utf-8?B?NjNab3hwVnJGMEwzeXlvODRvazVlL3lycVFuMnlhQlU5Mm4vWHBWZENoQXJu?= =?utf-8?B?b0NOeGhMMmdBNkRnd3VWMEN3Vk1TTm0reVAxZ1p4RG1qNGVvWVRqeG1LeWZF?= =?utf-8?B?ZGVGMFF6Y0xOcEVnaGdFZmpnc0IxY2twOXlvV0ZxUDc3UnBKZTVqRll3S3NM?= =?utf-8?B?RFpwRTBjZ2J5eXkvUldjTHo2YWc1VEdFWjJJMlFqVldLam5CRUNieVgwbmN4?= =?utf-8?B?NHFGL0FlNDRETXIrQVNUdEdCeFp3MXpXWXF2bXRKV0FlNVlJQnRXelBaeTEv?= =?utf-8?B?SjQrMWxxaGIyT1V1YlRNVnlHQlMzbWdxM011bW5qd1M4NHNvdUIwZFBxaEJl?= =?utf-8?B?V2V3ZG9jdUFFZVJGY3Z5QlFNWnVVL2RtWUpyNFY0RmFmL01JWnBlZmdtY0hM?= =?utf-8?B?S0FHQzRaenBuN2RkcGwwYkVUNUV2YkVDWnNqTzRITkl1b1F5OWNqNHRLWk5n?= =?utf-8?B?SVBvSnc3WG4wZWFHQ1R5U05uenBkV0NqRUgyMkx0ZG5xMDZlTXM0QTZ6SDNn?= =?utf-8?B?Z0VKcnEwK3pSUkhIREt6TzJCR2VvQUNXamRpMWNCVmpJZmdQRVlvS0xMcHNi?= =?utf-8?B?ZFRnVjNkampuaGNmMVFwRE5oS1BLcmJ3SGEwQ2FOdTNCcU1aNjRjazVuNGRU?= =?utf-8?B?QXpUYlhJUVlod2tnNlZvMWtmUU42T3FiVnkwOTZZRzlDcnZWeVVTazU4czl3?= =?utf-8?B?ZUxNN2JYS3hDZzNySDRqc1RycnRFOVYxbnlOY0NKM2pvdTA3QWlIREtJbVMx?= =?utf-8?B?K0NHa0o4SlFYSXd0b3cwQXdZcW53dC9ZNkpvbGpOUHpwSlk4NlhNN2FsUHV5?= =?utf-8?B?MUVQazZ4TzhDZHhuS09jTTVXVm13ZmQwMGtBZ1hYTDNGYW9NZyttSzcvV2pC?= =?utf-8?B?b3p2ZCsvTXRyYkRIdXppRWlldlA4bkxIU0hHdXV1Rm1YZHJFVjhiOVJOVWtv?= =?utf-8?B?d3pML3JObU5IV1l6a0J1YlZhMnBzb0M5OE9nL0pKSlFvQld0UStldVIweTNi?= =?utf-8?B?d1RIQzJ5YWRpL2RDSzVBSVRMYVA2OFR2QUV6SEx1aU80YUxrbHZxN3lhN1Zy?= =?utf-8?B?RlRIVG9EYTc2dmhEdmh4Sm9xWlRaTCs0T3lRV1FucWI0S3ZLbmYwczFoL2ZR?= =?utf-8?B?UnJOdmI1MUpjb2pmYm5PQjFXbGcxSUZnZkVFRlBCZStDODc5QVpoQzdsTlha?= =?utf-8?B?TFpWQjVGT2h0YVAxZ1R2aDV0WjdIdExFbnFOQUZQV0QwR1NVT3FMOXlTYVpr?= =?utf-8?B?NWtnQXg1dHJRb3p6RnUrSUR1Z0pHcWpranZPWmN6MGdqYTFIY1c2SDJOSXFn?= =?utf-8?B?bXljbmxOWlFBc1RlalAwQmFxV05STEpLcklrQ2NTNmoyL1RGckZndzVCTGpO?= =?utf-8?Q?sD7OnUFr55D5YoIQPXzlj4TLz?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ec2bf43-7f12-4144-7e82-08da708d8b4a X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jul 2022 11:37:25.7370 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iGP1HMkIWpjzLIednztivEnvDmmtXiYyD7GQ6DBY6lmgwKgQHgeCVnLoteD90Zc4xWClsPlHUVsE2eDKkCltRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR04MB2945 X-Spam-Status: No, score=-3030.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, 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: Thu, 28 Jul 2022 11:37:30 -0000 On 29.06.2022 10:20, Jan Beulich wrote: > The original approach has resulted in anomalies when . is involved in an > operand of one of the affected insns. We cannot leave . unresolved, or > else it'll be resolved at the end of assembly, then pointing to the > address of a section rather than at the insn of interest. Undo part of > the original change and instead check whether a relocation cannot be > omitted in md_apply_fix(). > > By resolving the expressions again, equates (see the adjustment of the > respective testcase) will now be evaluated, and hence relocations > against absolute addresses be emitted. This ought to be okay as long as > the equates aren't global (and hence can't be overridden). If a need > for such arises, quite likely the only way to address this would be to > invent yet another expression evaluation mode, leaving everything > _except_ . un-evaluated. > > There's a further anomaly in how transitive equates are handled. In > > .set x, 0x12345678 > .eqv bar, x > foo: > adrp x0, x > add x0, x0, :lo12:x > > adrp x0, bar > add x0, x0, :lo12:bar > > the first two relocations are now against *ABS*:0x12345678 (as said > above), whereas the latter two relocations would be against x. (Before > the change here, the first two relocations are against x and the latter > two against bar.) But this is an issue seen elsewhere as well, and would > likely require adjustments in the target-independent parts of the > assembler instead of trying to hack around this for every target. Before the release is cut, may I ask what the plans here are? Should I commit this patch, are there alternative plans to address the regression, or is the regression intended to remain present in 2.39? Thanks, Jan > --- a/gas/config/tc-aarch64.c > +++ b/gas/config/tc-aarch64.c > @@ -565,25 +565,18 @@ static bool in_aarch64_get_expression = > #define ALLOW_ABSENT false > #define REJECT_ABSENT true > > -/* Fifth argument to aarch64_get_expression. */ > -#define NORMAL_RESOLUTION false > - > /* Return TRUE if the string pointed by *STR is successfully parsed > as an valid expression; *EP will be filled with the information of > such an expression. Otherwise return FALSE. > > If ALLOW_IMMEDIATE_PREFIX is true then skip a '#' at the start. > - If REJECT_ABSENT is true then trat missing expressions as an error. > - If DEFER_RESOLUTION is true, then do not resolve expressions against > - constant symbols. Necessary if the expression is part of a fixup > - that uses a reloc that must be emitted. */ > + If REJECT_ABSENT is true then trat missing expressions as an error. */ > > static bool > aarch64_get_expression (expressionS * ep, > char ** str, > bool allow_immediate_prefix, > - bool reject_absent, > - bool defer_resolution) > + bool reject_absent) > { > char *save_in; > segT seg; > @@ -603,10 +596,7 @@ aarch64_get_expression (expressionS * e > save_in = input_line_pointer; > input_line_pointer = *str; > in_aarch64_get_expression = true; > - if (defer_resolution) > - seg = deferred_expression (ep); > - else > - seg = expression (ep); > + seg = expression (ep); > in_aarch64_get_expression = false; > > if (ep->X_op == O_illegal || (reject_absent && ep->X_op == O_absent)) > @@ -1035,8 +1025,7 @@ parse_typed_reg (char **ccp, aarch64_reg > > atype.defined |= NTA_HASINDEX; > > - aarch64_get_expression (&exp, &str, GE_NO_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION); > + aarch64_get_expression (&exp, &str, GE_NO_PREFIX, REJECT_ABSENT); > > if (exp.X_op != O_constant) > { > @@ -1239,8 +1228,7 @@ parse_vector_reg_list (char **ccp, aarch > { > expressionS exp; > > - aarch64_get_expression (&exp, &str, GE_NO_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION); > + aarch64_get_expression (&exp, &str, GE_NO_PREFIX, REJECT_ABSENT); > if (exp.X_op != O_constant) > { > set_first_syntax_error (_("constant expression required.")); > @@ -2187,8 +2175,7 @@ parse_immediate_expression (char **str, > return false; > } > > - aarch64_get_expression (exp, str, GE_OPT_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION); > + aarch64_get_expression (exp, str, GE_OPT_PREFIX, REJECT_ABSENT); > > if (exp->X_op == O_absent) > { > @@ -2422,8 +2409,7 @@ parse_big_immediate (char **str, int64_t > return false; > } > > - aarch64_get_expression (&inst.reloc.exp, &ptr, GE_OPT_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION); > + aarch64_get_expression (&inst.reloc.exp, &ptr, GE_OPT_PREFIX, REJECT_ABSENT); > > if (inst.reloc.exp.X_op == O_constant) > *imm = inst.reloc.exp.X_add_number; > @@ -3320,8 +3306,7 @@ parse_shift (char **str, aarch64_opnd_in > p++; > exp_has_prefix = 1; > } > - (void) aarch64_get_expression (&exp, &p, GE_NO_PREFIX, ALLOW_ABSENT, > - NORMAL_RESOLUTION); > + aarch64_get_expression (&exp, &p, GE_NO_PREFIX, ALLOW_ABSENT); > } > if (kind == AARCH64_MOD_MUL_VL) > /* For consistency, give MUL VL the same shift amount as an implicit > @@ -3385,7 +3370,7 @@ parse_shifter_operand_imm (char **str, a > > /* Accept an immediate expression. */ > if (! aarch64_get_expression (&inst.reloc.exp, &p, GE_OPT_PREFIX, > - REJECT_ABSENT, NORMAL_RESOLUTION)) > + REJECT_ABSENT)) > return false; > > /* Accept optional LSL for arithmetic immediate values. */ > @@ -3509,8 +3494,7 @@ parse_shifter_operand_reloc (char **str, > > /* Next, we parse the expression. */ > if (! aarch64_get_expression (&inst.reloc.exp, str, GE_NO_PREFIX, > - REJECT_ABSENT, > - aarch64_force_reloc (entry->add_type) == 1)) > + REJECT_ABSENT)) > return false; > > /* Record the relocation type (use the ADD variant here). */ > @@ -3656,8 +3640,7 @@ parse_address_main (char **str, aarch64_ > } > > /* #:: */ > - if (! aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT, > - aarch64_force_reloc (ty) == 1)) > + if (! aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT)) > { > set_syntax_error (_("invalid relocation expression")); > return false; > @@ -3673,8 +3656,7 @@ parse_address_main (char **str, aarch64_ > /* =immediate; need to generate the literal in the literal pool. */ > inst.gen_lit_pool = 1; > > - if (!aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION)) > + if (!aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT)) > { > set_syntax_error (_("invalid address")); > return false; > @@ -3780,8 +3762,7 @@ parse_address_main (char **str, aarch64_ > /* We now have the group relocation table entry corresponding to > the name in the assembler source. Next, we parse the > expression. */ > - if (! aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT, > - aarch64_force_reloc (entry->ldst_type) == 1)) > + if (! aarch64_get_expression (exp, &p, GE_NO_PREFIX, REJECT_ABSENT)) > { > set_syntax_error (_("invalid relocation expression")); > return false; > @@ -3794,8 +3775,7 @@ parse_address_main (char **str, aarch64_ > } > else > { > - if (! aarch64_get_expression (exp, &p, GE_OPT_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION)) > + if (! aarch64_get_expression (exp, &p, GE_OPT_PREFIX, REJECT_ABSENT)) > { > set_syntax_error (_("invalid expression in the address")); > return false; > @@ -3851,8 +3831,7 @@ parse_address_main (char **str, aarch64_ > operand->addr.offset.regno = reg->number; > operand->addr.offset.is_reg = 1; > } > - else if (! aarch64_get_expression (exp, &p, GE_OPT_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION)) > + else if (! aarch64_get_expression (exp, &p, GE_OPT_PREFIX, REJECT_ABSENT)) > { > /* [Xn],#expr */ > set_syntax_error (_("invalid expression in the address")); > @@ -3980,8 +3959,7 @@ parse_half (char **str, int *internal_fi > else > *internal_fixup_p = 1; > > - if (! aarch64_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX, REJECT_ABSENT, > - aarch64_force_reloc (inst.reloc.type) == 1)) > + if (! aarch64_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX, REJECT_ABSENT)) > return false; > > *str = p; > @@ -4023,8 +4001,7 @@ parse_adrp (char **str) > inst.reloc.type = BFD_RELOC_AARCH64_ADR_HI21_PCREL; > > inst.reloc.pc_rel = 1; > - if (! aarch64_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX, REJECT_ABSENT, > - aarch64_force_reloc (inst.reloc.type) == 1)) > + if (! aarch64_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX, REJECT_ABSENT)) > return false; > *str = p; > return true; > @@ -6696,8 +6673,7 @@ parse_operands (char *str, const aarch64 > goto failure; > str = saved; > po_misc_or_fail (aarch64_get_expression (&inst.reloc.exp, &str, > - GE_OPT_PREFIX, REJECT_ABSENT, > - NORMAL_RESOLUTION)); > + GE_OPT_PREFIX, REJECT_ABSENT)); > /* The MOV immediate alias will be fixed up by fix_mov_imm_insn > later. fix_mov_imm_insn will try to determine a machine > instruction (MOVZ, MOVN or ORR) for it and will issue an error > @@ -8824,7 +8800,8 @@ md_apply_fix (fixS * fixP, valueT * valP > > /* Note whether this will delete the relocation. */ > > - if (fixP->fx_addsy == 0 && !fixP->fx_pcrel) > + if (fixP->fx_addsy == 0 && !fixP->fx_pcrel > + && aarch64_force_reloc (fixP->fx_r_type) <= 0) > fixP->fx_done = 1; > > /* Process the relocations. */ > --- a/gas/testsuite/gas/aarch64/pr27217.d > +++ b/gas/testsuite/gas/aarch64/pr27217.d > @@ -7,9 +7,9 @@ > Disassembly of section \.text: > > 0+000 <.*>: > -[ ]+0:[ ]+90000000[ ]+adrp[ ]+x0, 12345678[ ]+ > -[ ]+0:[ ]+R_AARCH64(|_P32)_ADR_PREL_PG_HI21[ ]+bar > +[ ]+0:[ ]+90000000[ ]+adrp[ ]+x0, [0-9]*[ ]+<.*> > +[ ]+0:[ ]+R_AARCH64(|_P32)_ADR_PREL_PG_HI21[ ]+\*ABS\*\+0x12345678 > [ ]+4:[ ]+91000000[ ]+add[ ]+x0, x0, #0x0 > -[ ]+4:[ ]+R_AARCH64(|_P32)_ADD_ABS_LO12_NC[ ]+bar > +[ ]+4:[ ]+R_AARCH64(|_P32)_ADD_ABS_LO12_NC[ ]+\*ABS\*\+0x12345678 > [ ]+8:[ ]+d65f03c0[ ]+ret > #pass