From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 35B4738555AB for ; Fri, 12 May 2023 17:43:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 35B4738555AB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1683913412; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=39VwoSlr0HAcNsr2qn+13P5wC725pngibBHtVozkiqA=; b=ZjjPWR52uqLLoXZTalgPWl9vfZ9vrFS2hh9R6VaL4g16cM0vZFLwsDX6Ko0E2MpMV7RHTC IE5o4oOph6+NZxIq/dOHEkT9/lwg9WYEJBjmwAZYuwiYrhYhouGbghPP50ywzjqcDxhs/q lP++OEl1vsWWPQgNDyPAvRaNMIgBqSU= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-658-DF2Gi2g_OCWYSKJ4AObAPw-1; Fri, 12 May 2023 13:43:31 -0400 X-MC-Unique: DF2Gi2g_OCWYSKJ4AObAPw-1 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-307cea53cf4so1319814f8f.3 for ; Fri, 12 May 2023 10:43:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683913410; x=1686505410; h=mime-version:message-id:date:references:in-reply-to:subject:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=39VwoSlr0HAcNsr2qn+13P5wC725pngibBHtVozkiqA=; b=hRw8z6iDxUtN99mIt6YxGT+VkFkUyyxSgVFDA+YQiJTaujVhHwoiXcyhNAUUUoGbUi uwe7EVX6p/a6BnZSpb5oYwGlR5CAPXCXaHTn7fSsG5trFfjFyjUeWnUQhnmgMO/qp46i 0cZe+fMlxXand3iBFgKmuv48oX3PW5L7rPjKZy3DmabFm634r8B5n8I2yrKZwpxw0oO2 lewrRY5pVSkD1lv4YvnGdmJIAL+01O2I3lMu7EDokmxXoguvtzubVfGsH5pbNcOLis0L BXwwZSHO3o8+U2R6ghHJxgYYiOkDbMI8Eeb48sqxrRDNS0t49gnYb9lnBY9ebMGEGsdX zwyA== X-Gm-Message-State: AC+VfDwcHnmK5AtlmqbSILR+vkLybyCIgzdwBe+n0CftWyNkL3HfHhOW Jjovxr4MKSIWN/q2Dd/PzBzB8SYH3viXsW6spagVBya1/I/lpDIUo5FAxvxTYshqKRJLKnFXtWq KvN6ww/akwwWTg29g24xFbLLTt0qkqh+/H0lAorMcqJxHlfWB7zJ8/H65U63NCj1jCqXehcpPec lwTGDXBw== X-Received: by 2002:adf:dec6:0:b0:2cf:f279:378f with SMTP id i6-20020adfdec6000000b002cff279378fmr16920032wrn.44.1683913410278; Fri, 12 May 2023 10:43:30 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ75ShZjLAaqZhRF2/HHiGT9o6hoskzNV8PRF7sldguOSwnVVswquate9x6fWnJf2S+qx91HAA== X-Received: by 2002:adf:dec6:0:b0:2cf:f279:378f with SMTP id i6-20020adfdec6000000b002cff279378fmr16920017wrn.44.1683913409977; Fri, 12 May 2023 10:43:29 -0700 (PDT) Received: from localhost (92.40.219.54.threembb.co.uk. [92.40.219.54]) by smtp.gmail.com with ESMTPSA id q23-20020a7bce97000000b003f42d2f4531sm10375864wmj.48.2023.05.12.10.43.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 12 May 2023 10:43:29 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Subject: Re: [PATCH 3/5] gdb/python: implement DisassemblerResult.__str__ method In-Reply-To: <2e5f2835f1a8ed0ae57255cb29e505261db74826.1680596378.git.aburgess@redhat.com> References: <2e5f2835f1a8ed0ae57255cb29e505261db74826.1680596378.git.aburgess@redhat.com> Date: Fri, 12 May 2023 18:43:28 +0100 Message-ID: <87fs815ttr.fsf@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,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 List-Id: Andrew Burgess writes: > Add the DisassemblerResult.__str__ method. This gives the same result > as the DisassemblerResult.string attribute, but can be useful sometime > where a user just wants to print the DisassemblerResult object and > have GDB do something sane. > > There's a test for the new functionality. I've gone ahead and pushed this patch. Thanks, Andrew > --- > gdb/python/py-disasm.c | 26 +++++++++++++++++--------- > gdb/testsuite/gdb.python/py-disasm.exp | 1 + > gdb/testsuite/gdb.python/py-disasm.py | 12 ++++++++++++ > 3 files changed, 30 insertions(+), 9 deletions(-) > > diff --git a/gdb/python/py-disasm.c b/gdb/python/py-disasm.c > index 999d0e0192c..c61fe70c26b 100644 > --- a/gdb/python/py-disasm.c > +++ b/gdb/python/py-disasm.c > @@ -605,6 +605,21 @@ gdbpy_disassembler::read_memory_func (bfd_vma memaddr, gdb_byte *buff, > return 0; > } > > +/* Implement __str__ for the DisassemblerResult type. */ > + > +static PyObject * > +disasmpy_result_str (PyObject *self) > +{ > + disasm_result_object *obj = (disasm_result_object *) self; > + > + gdb_assert (obj->content != nullptr); > + gdb_assert (obj->content->size () > 0); > + gdb_assert (obj->length > 0); > + return PyUnicode_Decode (obj->content->c_str (), > + obj->content->size (), > + host_charset (), nullptr); > +} > + > /* Implement DisassemblerResult.length attribute, return the length of the > disassembled instruction. */ > > @@ -621,14 +636,7 @@ disasmpy_result_length (PyObject *self, void *closure) > static PyObject * > disasmpy_result_string (PyObject *self, void *closure) > { > - disasm_result_object *obj = (disasm_result_object *) self; > - > - gdb_assert (obj->content != nullptr); > - gdb_assert (obj->content->size () > 0); > - gdb_assert (obj->length > 0); > - return PyUnicode_Decode (obj->content->c_str (), > - obj->content->size (), > - host_charset (), nullptr); > + return disasmpy_result_str (self); > } > > /* Implement DisassemblerResult.__init__. Takes two arguments, an > @@ -1140,7 +1148,7 @@ PyTypeObject disasm_result_object_type = { > 0, /*tp_as_mapping*/ > 0, /*tp_hash */ > 0, /*tp_call*/ > - 0, /*tp_str*/ > + disasmpy_result_str, /*tp_str*/ > 0, /*tp_getattro*/ > 0, /*tp_setattro*/ > 0, /*tp_as_buffer*/ > diff --git a/gdb/testsuite/gdb.python/py-disasm.exp b/gdb/testsuite/gdb.python/py-disasm.exp > index 44b8398bf21..66ed39f048b 100644 > --- a/gdb/testsuite/gdb.python/py-disasm.exp > +++ b/gdb/testsuite/gdb.python/py-disasm.exp > @@ -76,6 +76,7 @@ set test_plans \ > [list "ShowInfoRepr" "${base_pattern}\\s+## \r\n.*"] \ > [list "ShowInfoSubClassRepr" "${base_pattern}\\s+## \r\n.*"] \ > [list "ShowResultRepr" "${base_pattern}\\s+## \r\n.*"] \ > + [list "ShowResultStr" "${base_pattern}\\s+## ${nop}\r\n.*"] \ > [list "GlobalPreInfoDisassembler" "${base_pattern}\\s+## ad = $hex, ar = ${curr_arch}\r\n.*"] \ > [list "GlobalPostInfoDisassembler" "${base_pattern}\\s+## ad = $hex, ar = ${curr_arch}\r\n.*"] \ > [list "GlobalReadDisassembler" "${base_pattern}\\s+## bytes =( $hex)+\r\n.*"] \ > diff --git a/gdb/testsuite/gdb.python/py-disasm.py b/gdb/testsuite/gdb.python/py-disasm.py > index 977cdbf3c37..435a3bf5339 100644 > --- a/gdb/testsuite/gdb.python/py-disasm.py > +++ b/gdb/testsuite/gdb.python/py-disasm.py > @@ -113,6 +113,18 @@ class ShowResultRepr(TestDisassembler): > return DisassemblerResult(length=length, string=string) > > > +class ShowResultStr(TestDisassembler): > + """Call the __str__ method on a DisassemblerResult object, incude the > + resulting string in a comment within the disassembler output.""" > + > + def disassemble(self, info): > + result = gdb.disassembler.builtin_disassemble(info) > + comment = "\t## " + str(result) > + string = result.string + comment > + length = result.length > + return DisassemblerResult(length=length, string=string) > + > + > class GlobalPreInfoDisassembler(TestDisassembler): > """Check the attributes of DisassembleInfo before disassembly has occurred.""" > > -- > 2.25.4