From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by sourceware.org (Postfix) with ESMTPS id 87C563856267 for ; Wed, 18 May 2022 13:01:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 87C563856267 Received: by mail-lf1-x12b.google.com with SMTP id d15so3498711lfk.5 for ; Wed, 18 May 2022 06:01:32 -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:cc; bh=XIY6vgAG9gGYXVVdSf2ZTxMI15huG6rS/ds0ULksoKY=; b=TSgcFAWvlZkpvrt2yX4AN1zwdbdVLFwltFztK7KSylQsRlTpj9btZcPhw24WUrInJm sZsCsYun8X3smw4UpT367y21ba+G3mt0Js2rcWKH87TGdEWJzoxPw6kaR0+N5A47VEvr Rga4QjW5CPWV4PW+vBOt0HNycp2Ctx7SWqxT3RiXM3h/lbA4hFXz1qJFLAj+saF5TmWM 3kesYkFzbYrCIoQ6mBzXn3v3MXJhXkjnMUWtQ82z4bULvbF/LbYBgiXVvE5Nr1Ai/tdc bJUKdkiXipAahekVjdFOKIfzSvfAijPC+ijB+7SVu8IQ6leMqqhJRFmvE8mEiv1VUsJT 3niA== X-Gm-Message-State: AOAM532HJO9t/COiFAPRe1WYVpii6JqgORVmJUU4Vz6dsN2BCpit0Osm SnkGAA6iih5TYNfN+NCIcafLrfG1I20Jo6oyysU= X-Google-Smtp-Source: ABdhPJzuVKGpLmynmIlPPsQ7KS4lPJ0AkPE9BFZeHWDuyVCO5ZxiPN7CRzrEaDtUL/Ta8V0QMQJeOa8Fgqku0FpS0Ms= X-Received: by 2002:a19:7702:0:b0:477:c134:bdbd with SMTP id s2-20020a197702000000b00477c134bdbdmr30661lfc.317.1652878890813; Wed, 18 May 2022 06:01:30 -0700 (PDT) MIME-Version: 1.0 References: <20220517173650.844755-1-yyc1992@gmail.com> <8d311bd0-d814-934f-8639-8841a10c803d@arm.com> In-Reply-To: <8d311bd0-d814-934f-8639-8841a10c803d@arm.com> From: Yichao Yu Date: Wed, 18 May 2022 09:01:19 -0400 Message-ID: Subject: Re: [PATCH v3] Return the regnum for PC (32) on aarch64 To: Luis Machado Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.0 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 13:01:35 -0000 On Wed, May 18, 2022 at 5:54 AM Luis Machado wrote: > > On 5/18/22 02:03, Yichao Yu wrote: > > Sorry for the duplicated post.... I think somehow the university > > network prevented the email from going out earlier today... > > No problem. I've been having some inbound e-mail issues as well. I assume by this you mean that someone else will commit it. (cuz I believe I can't). > > > > > 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 > >> > > Thanks. This LGTM for aarch64. Please push it.