From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by sourceware.org (Postfix) with ESMTPS id E6549384B82B for ; Wed, 18 May 2022 14:01:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E6549384B82B Received: by mail-lf1-x130.google.com with SMTP id p22so3782605lfo.10 for ; Wed, 18 May 2022 07:01:56 -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=YOKTQ4ttfq6YLZbUCjwlreNwCSj4uHPziV665DZna/4=; b=Yb2Ze0dI4Dzqty4CZ3LRSwignwck1Vf8FLI+iRzrW1h/29Ta4lX8a2gu2qwKN0fR5K WEr4ggCygJm14aN7lDswPjEm8CrT1+iVcbitNgfkdsfpxCseyBo/RxB2JwjYM7N5j4EJ 7KjU74QfMzMFtA4gS8crtoqOs/VhwVPSpnw73v5d40A07thmVXE0iG/w0ZEUeTM14MYE LgEEVla0op2Z00FWLC+LG3Q/8YB+SPl4whVWIYWhEhZNvZOoPBHDHABPqK8I/7UjLnTt Z9q1+QECVmiCzFxN0qthVZOruw9fh8Qhi5Ehaf/GSRruNi2VnwIMKNRhCjhJj3y31g2s W41Q== X-Gm-Message-State: AOAM5318zxxQAIuoHfobhCkWPvrxABJ9maKDRx+8xsjWbfFEx037O1PT bcPjQJ1ksNNUeUYKUdVXErqVQ8q8iOA1Jd4c8SOf1okD X-Google-Smtp-Source: ABdhPJy9cpzRQtwiZQf2ZhqCVl+7aVIkrmpChFvp6P3wcLcLBwSOnodocQ6KjGb0ZBpEwqLRnhSoFy3fmCeOht8mSqU= X-Received: by 2002:a19:7702:0:b0:477:c134:bdbd with SMTP id s2-20020a197702000000b00477c134bdbdmr208811lfc.317.1652882515257; Wed, 18 May 2022 07:01:55 -0700 (PDT) MIME-Version: 1.0 References: <20220517173650.844755-1-yyc1992@gmail.com> <8d311bd0-d814-934f-8639-8841a10c803d@arm.com> <999b0a41-8c30-3551-5c84-0d70e4ccf1b5@arm.com> In-Reply-To: <999b0a41-8c30-3551-5c84-0d70e4ccf1b5@arm.com> From: Yichao Yu Date: Wed, 18 May 2022 10:01:43 -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=-6.9 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 14:02:03 -0000 On Wed, May 18, 2022 at 9:36 AM Luis Machado wrote: > > On 5/18/22 14:01, Yichao Yu wrote: > > 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). > > > > Just to confirm, do you have a copyright assignment in place with the FSF? > > I see one of your previous patches has been pushed before by one of the maintainers. Yes I have that (*.BINUTILS.pdf{,.asc} and *.GDB.pdf{,.asc}). Assuming they don't expire. > > >> > >>> > >>> 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. >