From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id 648A03858D20 for ; Thu, 3 Mar 2022 18:35:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 648A03858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embecosm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embecosm.com Received: by mail-wr1-x42f.google.com with SMTP id x15so9167898wru.13 for ; Thu, 03 Mar 2022 10:35:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=message-id:date:mime-version:user-agent:content-language:to:cc :references:from:subject:in-reply-to:content-transfer-encoding; bh=7l+G9ZaeHrm88TV88W1VWj7nQ0k/FB0t6DVKTc79NVQ=; b=cybLVF93Dud46uRcUjZ2HITfPSovzNrPbkEaCxQ5OIIxF/DVWXW37k7Y0GeK9jxP3Z AtL+/AC+UKBL+vT7cEWit/mSpnPFGIke6jOkX9w3eqc6auzK2ZTvLmLIPrU2FriaKxDx JPDbbnjv1ay4lrOSU56OuvqOMLkskl+/XvFehpFPwq4Hy3l6kQpTupRkKRXmHEVolBjK M7PzOIZFLdHagwbGVbmlwVFmW3JBVWzKeYF8OAVtKFyRHEOVHxOXSpmBIHVJK4oXI0we yLtC6mysXvsqKXusXeSYcNeRzFA5SCw0B3P7zk5IGCjB8N16mYt6GSSDcy+6W2ks/VQd 8rAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent :content-language:to:cc:references:from:subject:in-reply-to :content-transfer-encoding; bh=7l+G9ZaeHrm88TV88W1VWj7nQ0k/FB0t6DVKTc79NVQ=; b=SKDytl+es0yprayen9SfPaULxDp/e3Bgw5zHg9Upu/Y1SWBohfaOOYw+0ht4zHuSbu NhFzP3rcgk16/o7/B1NrQ+PQf2I6BBvlA6Fc5kmLS2FwYWcyvSLnVnM9FyQbViljp0Xb dVlaD+CP2WjMDWxnfYZ71J80ruQlhBO8Y3pH4HLsMQqBKe58kw06ST2qE6HteOV1ybJS jXPH/L/aDqPADd/yvMYcXmKToNtMVamotKrwhl38fD4ZbkmnyqxLoGRHBYIaqyyviqlu ZzHfM3mCb6LV1aq4K8kgL07bdCXdJ6YnASBh+bgfLWkwbTYVCHZ79IRDpG/VWqX+kEps IQmg== X-Gm-Message-State: AOAM533hUQALem1uhHMaCrWO3cOVXHAwFIXSU5xPDkjcawRHezbx8cst 8pyX1oEISYQmziIiFOsQ8m3Sb1B83aEejQ== X-Google-Smtp-Source: ABdhPJxE2q/8TSPl2IWtItOAMIZQuDAfSJ1RCiVR0QslweJI7UGgzwgNVAJdcNS4dVgoYLLd+W5QCQ== X-Received: by 2002:adf:dfc2:0:b0:1f0:262a:d831 with SMTP id q2-20020adfdfc2000000b001f0262ad831mr6780160wrn.589.1646332557373; Thu, 03 Mar 2022 10:35:57 -0800 (PST) Received: from [192.168.0.27] ([80.0.65.139]) by smtp.gmail.com with ESMTPSA id f22-20020a1cc916000000b00380d3e49e89sm2715471wmb.22.2022.03.03.10.35.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 03 Mar 2022 10:35:57 -0800 (PST) Message-ID: <3de8efa7-5563-4778-5925-81b9c0409720@embecosm.com> Date: Thu, 3 Mar 2022 18:35:56 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Content-Language: en-US To: Andrew Burgess Cc: gdb-patches@sourceware.org References: <20220211161721.3252422-1-aburgess@redhat.com> <83leyhs07f.fsf@gnu.org> <878ru4cepy.fsf@redhat.com> <837d9oumhd.fsf@gnu.org> <87sfsbattq.fsf@redhat.com> From: Craig Blackmore Subject: Re: [PATCH] gdb/python: add gdb.Architecture.format_address In-Reply-To: <87sfsbattq.fsf@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: Thu, 03 Mar 2022 18:36:00 -0000 Hi Andrew, On 22/02/2022 13:56, Andrew Burgess via Gdb-patches wrote: > Eli Zaretskii writes: > >>> From: Andrew Burgess >>> Cc: gdb-patches@sourceware.org >>> Date: Mon, 21 Feb 2022 17:27:21 +0000 >>> >>> I'm certainly not against renaming, if we can come up with a better >>> name... maybe 'format_address_info'? I don't know... I still kind of >>> like 'format_address'... >> I hope someone will come up with a better name. format_address seems ok to me and I couldn't come up with anything better. > diff --git a/gdb/python/py-arch.c b/gdb/python/py-arch.c > index 0f273b344e4..95ae931e73e 100644 > --- a/gdb/python/py-arch.c > +++ b/gdb/python/py-arch.c > @@ -348,6 +348,31 @@ gdbpy_all_architecture_names (PyObject *self, PyObject *args) > return list.release (); > } > > +/* Implement gdb.architecture.format_address(ADDR). Provide access to > + GDB's print_address function from Python. The returned address will > + have the format '0x..... '. */ > + > +static PyObject * > +archpy_format_address (PyObject *self, PyObject *args, PyObject *kw) > +{ > + static const char *keywords[] = { "address", nullptr }; > + PyObject *addr_obj; > + CORE_ADDR addr; > + struct gdbarch *gdbarch = nullptr; > + > + ARCHPY_REQUIRE_VALID (self, gdbarch); > + > + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "O", keywords, &addr_obj)) > + return nullptr; > + > + if (get_addr_from_python (addr_obj, &addr) < 0) > + return nullptr; > + > + string_file buf; > + print_address (gdbarch, addr, &buf); > + return PyString_FromString (buf.c_str ()); > +} > + > void _initialize_py_arch (); > void > _initialize_py_arch () > @@ -391,6 +416,12 @@ group GROUP-NAME." }, > METH_NOARGS, > "register_groups () -> Iterator.\n\ > Return an iterator over all of the register groups in this architecture." }, > + { "format_address", (PyCFunction) archpy_format_address, > + METH_VARARGS | METH_KEYWORDS, > + "format_address (ADDRESS) -> String.\n\ > +Format ADDRESS, an address within the currently selected inferior's\n\ > +address space, as a string. The format of the returned string is\n\ > +'ADDRESS ' without the quotes." }, > {NULL} /* Sentinel */ > }; > > diff --git a/gdb/testsuite/gdb.python/py-arch.exp b/gdb/testsuite/gdb.python/py-arch.exp > index b55778b0b72..c4854033d8c 100644 > --- a/gdb/testsuite/gdb.python/py-arch.exp > +++ b/gdb/testsuite/gdb.python/py-arch.exp > @@ -127,3 +127,18 @@ foreach a $arch_names b $py_arch_names { > } > } > gdb_assert { $lists_match } > + > +# Check the gdb.Architecture.format_address method. > +set main_addr [get_hexadecimal_valueof "&main" "UNKNOWN"] > +gdb_test "python print(\"Got: \" + gdb.selected_inferior().architecture().format_address($main_addr))" \ > + "Got: $main_addr
" \ > + "gdb.Architecture.format_address, result should have no offset" > +set next_addr [format 0x%x [expr $main_addr + 1]] > +gdb_test "python print(\"Got: \" + gdb.selected_inferior().architecture().format_address($next_addr))" \ > + "Got: $next_addr " \ > + "gdb.Architecture.format_address, result should have an offset" > +if {![is_address_zero_readable]} { > + gdb_test "python print(\"Got: \" + gdb.selected_inferior().architecture().format_address(0))" \ > + "Got: 0x0" \ > + "gdb.Architecture.format_address for address 0" > +} > The code LGTM. Just one query, is it necessary to add a test case for printing the filename and line number when we have `set print symbol-filename on`? Thanks, Craig