From patchwork Wed Sep 28 02:59:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Koudai Iwahori X-Patchwork-Id: 58100 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 00D353857B85 for ; Wed, 28 Sep 2022 02:59:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 00D353857B85 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1664333984; bh=qTdHxm/Bx7VRhRMP4zXfPmmW1C9bx77RMLS980yFq14=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=YqOwOZRPcgPF1cSj27nYNCY8Wm8PQSzfe2OQyluGUNmSTjMAP0naDzXWqEYDJ5+LM 0wZPUx2RdoZPXI3Rq0IdaZvyk3DzTwm2AJqe/prUXo/FXGQkzUCEGnuzBAjkaONDom gaYMw0LSb84M5Y7c6WoDgae5qhZayFIsPgGYpIGg= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by sourceware.org (Postfix) with ESMTPS id 124283858D28 for ; Wed, 28 Sep 2022 02:59:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 124283858D28 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-34d3fbc7cfcso108890127b3.7 for ; Tue, 27 Sep 2022 19:59:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date; bh=qTdHxm/Bx7VRhRMP4zXfPmmW1C9bx77RMLS980yFq14=; b=0T2i4iXtOokmaLcWWDp4SEo+sBn8Y5QMmGmQMA1iow5otAsT1t2qcYaZwysbzaNXKU FbBnBKjmHJ5JT19EKW+y/5+5+pzp2UlwKYpe+9RAdU0U/rcBMPqkp7pdzfYgv0ypeIRs z/d2ZPH8y3J85Zyl+zIQv9+1w1UPbMpRESSgo5xjiNGiwNX4QZs8h1+P+zp3CgN9NWDd sCo3t5XHDFOFiYOYZi6tCqFTekXBTkIKRFIFiqDPyFvzmh+BBZfT7B3as/f5c39wIPhx qvs3WDT8BBQrCoSk3gvDzNfDBHMRDPV+TBgtXNUaN3q42+ZYjPV1c8PAQGlTmdDITn10 HhEw== X-Gm-Message-State: ACrzQf0sYfYeviDe+iV2dWjivPfuTbxbSfMgFmr8vuYTIldvKw1ETqKz kHix8IcLckdCyd9pMtqmeCxE9YtOJYQUdPKKhAIBDQYHa5tsMoBj72vGeOYUOmvlUPcGSISMtBF 05qRVn9uxvi/3/6enT4bqtEODSMuWLf0DNyrqjYxc+TJYNqLDH8ibOG5XnHNIDhrHMsg= X-Google-Smtp-Source: AMsMyM5VF8T+I6BXXETmrIeLpHJDWmjv2+ZrtyWbo+vBI+4+tXqLprxuiokA7hyhGVXah/6PcHwMzqIW8fI= X-Received: from koudai.c.googlers.com ([fda3:e722:ac3:cc00:3:22c1:c0a8:1150]) (user=koudai job=sendgmr) by 2002:a81:a001:0:b0:353:8add:8a52 with SMTP id x1-20020a81a001000000b003538add8a52mr263920ywg.416.1664333955379; Tue, 27 Sep 2022 19:59:15 -0700 (PDT) Date: Wed, 28 Sep 2022 02:59:09 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.37.3.998.g577e59143f-goog Message-ID: <20220928025909.190260-1-koudai@google.com> Subject: [PATCH] AArch64 pauth: Support backtrace in EL1 (kernel space) To: gdb-patches@sourceware.org X-Spam-Status: No, score=-21.4 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, USER_IN_DEF_DKIM_WL 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: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Koudai Iwahori via Gdb-patches From: Koudai Iwahori Reply-To: Koudai Iwahori Cc: Koudai Iwahori Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" The way to remove the signature bits from the address depends on the 55th bit of the address. If 55th bit is zero, the signature bits should be all cleared. If the 55th bit is one, the signature bits should be all set. --- I found very similar patches after fixing this issue: https://sourceware.org/pipermail/gdb-patches/2022-July/190507.html https://sourceware.org/pipermail/gdb-patches/2021-October/182859.html If this issue will be fixed in the near future, I can wait for it gdb/aarch64-tdep.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index d0387044934..16d1e44e903 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -244,6 +244,20 @@ class instruction_reader : public abstract_instruction_reader } // namespace +/* removes the pauth signature bits from the address. */ + +static CORE_ADDR +aarch64_remove_pauth_signature (CORE_ADDR addr, CORE_ADDR mask) +{ + /* 55th bit in address determines whether the address comes from the top + address range or the bottom address range. */ + constexpr CORE_ADDR pauth_va_range_select_mask = CORE_ADDR(1) << 55; + if (addr & pauth_va_range_select_mask) + return addr | mask; + else + return addr & ~mask; +} + /* If address signing is enabled, mask off the signature bits from the link register, which is passed by value in ADDR, using the register values in THIS_FRAME. */ @@ -258,7 +272,7 @@ aarch64_frame_unmask_lr (aarch64_gdbarch_tdep *tdep, { int cmask_num = AARCH64_PAUTH_CMASK_REGNUM (tdep->pauth_reg_base); CORE_ADDR cmask = frame_unwind_register_unsigned (this_frame, cmask_num); - addr = addr & ~cmask; + addr = aarch64_remove_pauth_signature(addr, cmask); /* Record in the frame that the link register required unmasking. */ set_frame_previous_pc_masked (this_frame);