From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from forward103o.mail.yandex.net (forward103o.mail.yandex.net [37.140.190.177]) by sourceware.org (Postfix) with ESMTPS id 64E3E3857836 for ; Sat, 25 Jun 2022 17:53:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 64E3E3857836 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 forward103q.mail.yandex.net (forward103q.mail.yandex.net [IPv6:2a02:6b8:c0e:50:0:640:b21c:d009]) by forward103o.mail.yandex.net (Yandex) with ESMTP id 5AA9A10A9C5C for ; Sat, 25 Jun 2022 20:53:20 +0300 (MSK) Received: from vla3-ea2761afed32.qloud-c.yandex.net (vla3-ea2761afed32.qloud-c.yandex.net [IPv6:2a02:6b8:c15:258b:0:640:ea27:61af]) by forward103q.mail.yandex.net (Yandex) with ESMTP id 56F8C56A0BAD for ; Sat, 25 Jun 2022 20:53:20 +0300 (MSK) Received: from vla3-aeadfdeff55e.qloud-c.yandex.net (vla3-aeadfdeff55e.qloud-c.yandex.net [2a02:6b8:c15:341d:0:640:aead:fdef]) by vla3-ea2761afed32.qloud-c.yandex.net (mxback/Yandex) with ESMTP id G8KotjSXIG-rKfGflOA; Sat, 25 Jun 2022 20:53:20 +0300 X-Yandex-Fwd: 2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1656179600; bh=PcWtbbPZUnuEtBuyPGXZQCC/xpCE467GCfqbfPqbd0o=; h=Date:Subject:Cc:To:From:Message-Id; b=eyPsDII8dZ2u+WY5uidh2O2BtrRFqOpoELiKTJb/01wcQDHUy4eKRlTBkAQWrvRLp jsWcHbF7DxZR0PnbICqqUcJvU/J6/JsE0SS6RZJ/cf+8lbQD9Hf+/8HResuJ3g83Gw E/HD/UUh4BSLa3M8bgRRTgfFeBn6tPV+vbHyuMJQ= Authentication-Results: vla3-ea2761afed32.qloud-c.yandex.net; dkim=pass header.i=@yandex.ru Received: by vla3-aeadfdeff55e.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id cFg3M67r5u-rJOmKFKS; Sat, 25 Jun 2022 20:53:19 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) From: Vladislav Khmelevsky To: binutils@sourceware.org Cc: Vladislav Khmelevsky Subject: [PATCH] gold/aarch64: Fix adrp distance check Date: Sat, 25 Jun 2022 20:52:59 +0300 Message-Id: <20220625175259.3171982-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=-13.7 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_LOW, SPF_HELO_NONE, 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-List-Received-Date: Sat, 25 Jun 2022 17:53:24 -0000 The offset between destination and location is a signed number, currently the offset is treated as unsigned number, thus mathematical shifting of negative value is performed incorrectly. --- gold/aarch64.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gold/aarch64.cc b/gold/aarch64.cc index d2b0747ffdc..e3ab5f10faa 100644 --- a/gold/aarch64.cc +++ b/gold/aarch64.cc @@ -1182,7 +1182,9 @@ 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 offset + = static_cast (Reloc::Page (dest) - Reloc::Page (location)); + int64_t adrp_imm = offset < 0 ? ~(~offset >> 12) : offset >> 12; return adrp_imm >= MIN_ADRP_IMM && adrp_imm <= MAX_ADRP_IMM; } -- 2.25.1