From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from forward107j.mail.yandex.net (forward107j.mail.yandex.net [5.45.198.252]) by sourceware.org (Postfix) with ESMTPS id DC4603858C1F for ; Mon, 7 Nov 2022 11:28:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DC4603858C1F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=yandex.ru Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yandex.ru Received: from sas2-e7f6fb703652.qloud-c.yandex.net (sas2-e7f6fb703652.qloud-c.yandex.net [IPv6:2a02:6b8:c14:4fa6:0:640:e7f6:fb70]) by forward107j.mail.yandex.net (Yandex) with ESMTP id 1BC0A889077 for ; Mon, 7 Nov 2022 14:28:30 +0300 (MSK) Received: by sas2-e7f6fb703652.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id aRm5EiQlFK-SSgaZ9mg; Mon, 07 Nov 2022 14:28:29 +0300 X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1667820509; bh=GPZtpUNpYPY5ic59E/cs959Cav3dH6nk87NLa0dOKIc=; h=Message-Id:Date:Cc:Subject:To:From; b=fahpfnA5p1WA2/y6dPH23vr/ATCLJgvpKJrOnoZS/nCzt2sY1rW1F02ddSKjTu49F 905wgIgSLLyTMA+7DFmoqBcHf+eEINUZUCQZBn4jmJEmChSsA66NMo7RpfP0i6UeeS cWvn+pOfLuI2KNI2DvlwlJyFYQiNHwpaBloFGZLc= Authentication-Results: sas2-e7f6fb703652.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru From: Vladislav Khmelevsky To: binutils@sourceware.org Cc: Vladislav Khmelevsky Subject: [PATCH] gold/aarch64: Fix adrp distance check Date: Mon, 7 Nov 2022 15:28:05 +0400 Message-Id: <20221107112805.3332619-1-och95@yandex.ru> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.1 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: The offset between destination and location is a signed number, currently the offset is treated as unsigned number, thus mathematical shift of a negative value is performed incorrectly. --- gold/aarch64.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gold/aarch64.cc b/gold/aarch64.cc index d2b0747ffdc..514fad96789 100644 --- a/gold/aarch64.cc +++ b/gold/aarch64.cc @@ -1182,7 +1182,8 @@ class Reloc_stub : public Stub_base aarch64_valid_for_adrp_p(AArch64_address location, AArch64_address dest) { typedef AArch64_relocate_functions Reloc; - int64_t adrp_imm = (Reloc::Page(dest) - Reloc::Page(location)) >> 12; + int64_t adrp_imm = Reloc::Page (dest) - Reloc::Page (location); + adrp_imm = adrp_imm < 0 ? ~(~adrp_imm >> 12) : adrp_imm >> 12; return adrp_imm >= MIN_ADRP_IMM && adrp_imm <= MAX_ADRP_IMM; } -- 2.25.1