From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by sourceware.org (Postfix) with ESMTPS id 3CB253858C51 for ; Wed, 18 May 2022 01:03:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3CB253858C51 Received: by mail-lj1-x233.google.com with SMTP id o22so754557ljp.8 for ; Tue, 17 May 2022 18:03:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=KasAUJ3I/mdRbVsqvzyxCNctD7M5wFRPPqGjLSALctQ=; b=dsZ//EFExZaaoJDxMJDnLmgPRz6jGmuF/Ak+GtQy+lFvBiip13psCv/BZPHTB3USHE EH47iWWfgiOVRAfXSyvgCleDfxoQ19ULUrOTbaxnuVwo9TNmUUIkbkrD0vfD4igjjtXw JjqUWCzARovVdXPbWkaKEDGrOWysHc7I73C2hQdlCNm1aBJVd+uw1lrgb0oG9Exsbh/m IBmRgHLhxWNSckbqwy3yLglP0ZimGQ2CubIyhL2CHqlTai8Smcpv70rh/aXRGPkU5GPK pWx/JcPJ715qncaHhHViTilF2t8I8a3zwy12aLr2o1e5LB2aL+tzqfev7taVmFqA6GvW qiiA== X-Gm-Message-State: AOAM532m5MAnnikl3uL/5Xb7mAXSvK901vIDq7VxJGDcFu7+zSrkiNwo Hx7tyeUKxLs8m46/J2S85KcBkszkhtTAboRMLnJ9ciUG X-Google-Smtp-Source: ABdhPJywNz7PK8EMDcjv9G3vKRwvJMe3nV2EVxvMXFg5K+Gvxc/pFjezBhCaJR/CMWX9S3WMZG0rtdoxA5szWCfhQJ4= X-Received: by 2002:a2e:bf1a:0:b0:249:3a3b:e90e with SMTP id c26-20020a2ebf1a000000b002493a3be90emr16099270ljr.317.1652835801914; Tue, 17 May 2022 18:03:21 -0700 (PDT) MIME-Version: 1.0 References: <20220517173650.844755-1-yyc1992@gmail.com> In-Reply-To: <20220517173650.844755-1-yyc1992@gmail.com> From: Yichao Yu Date: Tue, 17 May 2022 21:03:10 -0400 Message-ID: Subject: Re: [PATCH v3] Return the regnum for PC (32) on aarch64 To: gdb-patches@sourceware.org, Luis Machado Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.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, KAM_NUMSUBJECT, KAM_SHORT, RCVD_IN_DNSWL_NONE, 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: 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-List-Received-Date: Wed, 18 May 2022 01:03:27 -0000 Sorry for the duplicated post.... I think somehow the university network prevented the email from going out earlier today... On Tue, May 17, 2022 at 8:45 PM Yichao Yu wrote: > > This will allow the unwind info to explicitly specify a different value > for the return address from the link register. > Such usage, although uncommon, is valid and useful for signal frames. > It is also supported by aadwarf64 from ARM (Note 9 in [1]). > > Ref https://sourceware.org/pipermail/gdb/2022-May/050091.html > > [1] https://github.com/ARM-software/abi-aa/blob/2022Q1/aadwarf64/aadwarf64.rst#dwarf-register-names > --- > gdb/aarch64-tdep.c | 3 + > gdb/aarch64-tdep.h | 1 + > gdb/testsuite/gdb.arch/aarch64-unwind-pc.S | 48 ++++++++++++++ > gdb/testsuite/gdb.arch/aarch64-unwind-pc.exp | 70 ++++++++++++++++++++ > 4 files changed, 122 insertions(+) > create mode 100644 gdb/testsuite/gdb.arch/aarch64-unwind-pc.S > create mode 100644 gdb/testsuite/gdb.arch/aarch64-unwind-pc.exp > > diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c > index 9d06ebfe27c..f9eb455232f 100644 > --- a/gdb/aarch64-tdep.c > +++ b/gdb/aarch64-tdep.c > @@ -2219,6 +2219,9 @@ aarch64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg) > if (reg == AARCH64_DWARF_SP) > return AARCH64_SP_REGNUM; > > + if (reg == AARCH64_DWARF_PC) > + return AARCH64_PC_REGNUM; > + > if (reg >= AARCH64_DWARF_V0 && reg <= AARCH64_DWARF_V0 + 31) > return AARCH64_V0_REGNUM + reg - AARCH64_DWARF_V0; > > diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h > index e4cdebb6311..aa1bedbdac6 100644 > --- a/gdb/aarch64-tdep.h > +++ b/gdb/aarch64-tdep.h > @@ -34,6 +34,7 @@ struct regset; > /* AArch64 Dwarf register numbering. */ > #define AARCH64_DWARF_X0 0 > #define AARCH64_DWARF_SP 31 > +#define AARCH64_DWARF_PC 32 > #define AARCH64_DWARF_PAUTH_RA_STATE 34 > #define AARCH64_DWARF_PAUTH_DMASK 35 > #define AARCH64_DWARF_PAUTH_CMASK 36 > diff --git a/gdb/testsuite/gdb.arch/aarch64-unwind-pc.S b/gdb/testsuite/gdb.arch/aarch64-unwind-pc.S > new file mode 100644 > index 00000000000..6cc4f80e349 > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-unwind-pc.S > @@ -0,0 +1,48 @@ > +/* Copyright 2022 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > + .text > + .globl main > + .type main,#function > +main: > + .cfi_startproc > + stp x29, x30, [sp, -16]! > + .cfi_def_cfa sp, 16 > + .cfi_offset x29, 0 > + .cfi_offset x30, 8 > + bl test_func > + ldp x29, x30, [sp], 16 > + .cfi_restore x29 > + .cfi_restore x30 > + .cfi_def_cfa sp, 0 > + mov x0, 0 > + ret > + .cfi_endproc > + > + .globl test_func > +test_func: > + .cfi_startproc > + // Unwind x30 to a different value > + // CFA_val_expression x30 const2u 0x1234 > + .cfi_escape 0x16, 30, 0x03, 0x0a, 0x34, 0x12 > + // CFA_val_expression pc breg30 0 > + .cfi_escape 0x16, 32, 0x02, 0x8e, 0x00 > + mov x0, x30 > + .cfi_register 32, x0 > + mov x30, 0x1234 > + ret x0 > + .cfi_endproc > diff --git a/gdb/testsuite/gdb.arch/aarch64-unwind-pc.exp b/gdb/testsuite/gdb.arch/aarch64-unwind-pc.exp > new file mode 100644 > index 00000000000..105b9a9cc3a > --- /dev/null > +++ b/gdb/testsuite/gdb.arch/aarch64-unwind-pc.exp > @@ -0,0 +1,70 @@ > +# Copyright 2022 Free Software Foundation, Inc. > + > +# This program is free software; you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation; either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > +# This file is part of the gdb testsuite. > + > +# Test explicitly unwinding the PC DWARF register on aarch64 > + > +if {![is_aarch64_target]} then { > + verbose "Skipping ${gdb_test_file_name}." > + return > +} > + > +standard_testfile .S > + > +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { > + return -1 > +} > + > +if ![runto_main] { > + return -1 > +} > + > +proc test_reg_vals {} { > + gdb_test "p \$pc - &main" "= 8" "p \$pc" > + gdb_test "p/x \$x30" "= 0x1234" "p \$x30" > +} > + > +proc test_unwind_pc { inst } { > + gdb_test "si" "$inst" "single step" > + gdb_test "backtrace" \ > + ".*#1.*in main ().*" \ > + "backtrace" > + gdb_test "up" "in main ().*" "parent frame" > + test_reg_vals > +} > + > +# Ready to enter the function > +gdb_test "si" "bl test_func" "call site" > +# Step through the 3 instructions in the function to make sure that > +# we have the same unwind info throughout. > +with_test_prefix "1st stepi" { > + test_unwind_pc "mov x0, x30" > +} > +with_test_prefix "2nd stepi" { > + test_unwind_pc "mov x30, 0x1234" > +} > +with_test_prefix "3rd stepi" { > + test_unwind_pc "ret x0" > +} > +# Check again after we returned > +with_test_prefix "final" { > + # Check that we've stepped out (si prints out the new function name) > + gdb_test "si" ".*main *().*" "single step out" > + gdb_test "backtrace" \ > + "#0\[\t \]+main ().*" \ > + "backtrace" > + test_reg_vals > +} > -- > 2.36.1 >