* [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support
@ 2018-01-19 16:25 Marc-André Lureau
2018-01-19 19:18 ` Laszlo Ersek
2018-01-19 20:31 ` Eric Blake
0 siblings, 2 replies; 5+ messages in thread
From: Marc-André Lureau @ 2018-01-19 16:25 UTC (permalink / raw)
To: qemu-devel
Cc: peter.maydell, lersek, eblake, Marc-André Lureau,
Eduardo Habkost, Cleber Rosa
Python GDB support may use Python 2 or 3.
Inferior.read_memory() may return a 'buffer' with Python 2 or a
'memoryview' with Python 3 (see also
https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html)
The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap
the returned memory with bytes(), which works with both 'memoryview'
and 'buffer'.
Fixes a regression introduced with commit
d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo").
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
scripts/dump-guest-memory.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py
index 09bec92b50..03fbf69f8a 100644
--- a/scripts/dump-guest-memory.py
+++ b/scripts/dump-guest-memory.py
@@ -564,7 +564,7 @@ shape and this command should mostly work."""
vmcoreinfo = self.phys_memory_read(addr, size)
if vmcoreinfo:
- self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
+ self.elf.add_vmcoreinfo_note(bytes(vmcoreinfo))
def invoke(self, args, from_tty):
"""Handles command invocation from gdb."""
--
2.16.0.rc1.1.gef27df75a1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support
2018-01-19 16:25 [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support Marc-André Lureau
@ 2018-01-19 19:18 ` Laszlo Ersek
2018-01-19 19:48 ` Eric Blake
2018-01-19 20:31 ` Eric Blake
1 sibling, 1 reply; 5+ messages in thread
From: Laszlo Ersek @ 2018-01-19 19:18 UTC (permalink / raw)
To: Marc-André Lureau, qemu-devel
Cc: peter.maydell, eblake, Eduardo Habkost, Cleber Rosa
On 01/19/18 17:25, Marc-André Lureau wrote:
> Python GDB support may use Python 2 or 3.
>
> Inferior.read_memory() may return a 'buffer' with Python 2 or a
> 'memoryview' with Python 3 (see also
> https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html)
>
> The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap
> the returned memory with bytes(), which works with both 'memoryview'
> and 'buffer'.
>
> Fixes a regression introduced with commit
> d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo").
>
> Suggested-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> scripts/dump-guest-memory.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py
> index 09bec92b50..03fbf69f8a 100644
> --- a/scripts/dump-guest-memory.py
> +++ b/scripts/dump-guest-memory.py
> @@ -564,7 +564,7 @@ shape and this command should mostly work."""
>
> vmcoreinfo = self.phys_memory_read(addr, size)
> if vmcoreinfo:
> - self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
> + self.elf.add_vmcoreinfo_note(bytes(vmcoreinfo))
>
> def invoke(self, args, from_tty):
> """Handles command invocation from gdb."""
>
Ugh, can you please point me to the v1->v2 difference?
Thanks
Laszlo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support
2018-01-19 19:18 ` Laszlo Ersek
@ 2018-01-19 19:48 ` Eric Blake
2018-01-19 20:29 ` Laszlo Ersek
0 siblings, 1 reply; 5+ messages in thread
From: Eric Blake @ 2018-01-19 19:48 UTC (permalink / raw)
To: Laszlo Ersek, Marc-André Lureau, qemu-devel
Cc: peter.maydell, Eduardo Habkost, Cleber Rosa
[-- Attachment #1: Type: text/plain, Size: 2341 bytes --]
On 01/19/2018 01:18 PM, Laszlo Ersek wrote:
> On 01/19/18 17:25, Marc-André Lureau wrote:
>> Python GDB support may use Python 2 or 3.
>>
>> Inferior.read_memory() may return a 'buffer' with Python 2 or a
>> 'memoryview' with Python 3 (see also
>> https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html)
>>
>> The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap
>> the returned memory with bytes(), which works with both 'memoryview'
>> and 'buffer'.
>>
If I understand it, the issue stems from the fact that vmcoreinfo is a
bytes buffer under python2, but a memoryview under python3. Let's
compare the patches:
The V1 patch:
https://lists.gnu.org/archive/html/qemu-devel/2018-01/msg04010.html
>
> if vmcoreinfo:
> - self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
> + # Python 2.7 returns a buffer
> + vmciview = memoryview(vmcoreinfo)
> + self.elf.add_vmcoreinfo_note(vmciview.tobytes())
did an unconditional memoryview(vmcoreinfo) followed by a .tobytes()
call. Under python 2.7, vmcoreinfo is converted from a buffer to a
memoryview, then back to bytes; under python 3, memoryview(vmcoreinfo)
is a no-op (since it is already a memory view), then that is converted
to bytes; the double conversion was necessary because bytes.tobytes()
doesn't exist. But python 2.6 doesn't have the memoryview conversion,
so we've excluded older python users.
Now looking at the V2 patch:
>> @@ -564,7 +564,7 @@ shape and this command should mostly work."""
>>
>> vmcoreinfo = self.phys_memory_read(addr, size)
>> if vmcoreinfo:
>> - self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
>> + self.elf.add_vmcoreinfo_note(bytes(vmcoreinfo))
Under python2, and bytes(buffer) is still bytes; under python3,
vmcoreinfo is a memoryview but bytes(buffer) is equivalent to
buffer.to_bytes(). We've avoided the intermediate conversion through
memoryview, and thus work regardless of python version.
> Ugh, can you please point me to the v1->v2 difference?
Hope that helped (and hope I got it right, I'm learning as well from
this thread).
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support
2018-01-19 19:48 ` Eric Blake
@ 2018-01-19 20:29 ` Laszlo Ersek
0 siblings, 0 replies; 5+ messages in thread
From: Laszlo Ersek @ 2018-01-19 20:29 UTC (permalink / raw)
To: Eric Blake
Cc: Marc-André Lureau, qemu-devel, peter.maydell,
Eduardo Habkost, Cleber Rosa
On 01/19/18 20:48, Eric Blake wrote:
> On 01/19/2018 01:18 PM, Laszlo Ersek wrote:
>> On 01/19/18 17:25, Marc-André Lureau wrote:
>>> Python GDB support may use Python 2 or 3.
>>>
>>> Inferior.read_memory() may return a 'buffer' with Python 2 or a
>>> 'memoryview' with Python 3 (see also
>>> https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html)
>>>
>>> The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap
>>> the returned memory with bytes(), which works with both 'memoryview'
>>> and 'buffer'.
>>>
>
> If I understand it, the issue stems from the fact that vmcoreinfo is a
> bytes buffer under python2, but a memoryview under python3. Let's
> compare the patches:
>
> The V1 patch:
> https://lists.gnu.org/archive/html/qemu-devel/2018-01/msg04010.html
>
>>
>> if vmcoreinfo:
>> - self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
>> + # Python 2.7 returns a buffer
>> + vmciview = memoryview(vmcoreinfo)
>> + self.elf.add_vmcoreinfo_note(vmciview.tobytes())
>
> did an unconditional memoryview(vmcoreinfo) followed by a .tobytes()
> call. Under python 2.7, vmcoreinfo is converted from a buffer to a
> memoryview, then back to bytes; under python 3, memoryview(vmcoreinfo)
> is a no-op (since it is already a memory view), then that is converted
> to bytes; the double conversion was necessary because bytes.tobytes()
> doesn't exist. But python 2.6 doesn't have the memoryview conversion,
> so we've excluded older python users.
>
> Now looking at the V2 patch:
>
>
>>> @@ -564,7 +564,7 @@ shape and this command should mostly work."""
>>>
>>> vmcoreinfo = self.phys_memory_read(addr, size)
>>> if vmcoreinfo:
>>> - self.elf.add_vmcoreinfo_note(vmcoreinfo.tobytes())
>>> + self.elf.add_vmcoreinfo_note(bytes(vmcoreinfo))
>
> Under python2, and bytes(buffer) is still bytes; under python3,
> vmcoreinfo is a memoryview but bytes(buffer) is equivalent to
> buffer.to_bytes(). We've avoided the intermediate conversion through
> memoryview, and thus work regardless of python version.
Heh, "semantics" :)
>
>> Ugh, can you please point me to the v1->v2 difference?
>
> Hope that helped (and hope I got it right, I'm learning as well from
> this thread).
>
It sure helped a lot, thank you very much! In fact, you've done all the
review work, so technically, "R-b: Laszlo" would be misappropriation.
Can you give your R-b?
I'll manage an "I agree" statement:
Acked-by: Laszlo Ersek <lersek@redhat.com>
Thanks!
Laszlo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support
2018-01-19 16:25 [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support Marc-André Lureau
2018-01-19 19:18 ` Laszlo Ersek
@ 2018-01-19 20:31 ` Eric Blake
1 sibling, 0 replies; 5+ messages in thread
From: Eric Blake @ 2018-01-19 20:31 UTC (permalink / raw)
To: Marc-André Lureau, qemu-devel
Cc: peter.maydell, lersek, Eduardo Habkost, Cleber Rosa
[-- Attachment #1: Type: text/plain, Size: 960 bytes --]
On 01/19/2018 10:25 AM, Marc-André Lureau wrote:
> Python GDB support may use Python 2 or 3.
>
> Inferior.read_memory() may return a 'buffer' with Python 2 or a
> 'memoryview' with Python 3 (see also
> https://sourceware.org/gdb/onlinedocs/gdb/Inferiors-In-Python.html)
>
> The elf.add_vmcoreinfo_note() method expects a "bytes" object. Wrap
> the returned memory with bytes(), which works with both 'memoryview'
> and 'buffer'.
>
> Fixes a regression introduced with commit
> d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo").
>
> Suggested-by: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> scripts/dump-guest-memory.py | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 619 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-01-19 20:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-19 16:25 [Qemu-devel] [PATCH v2] dump-guest-memory.py: fix python 2 support Marc-André Lureau
2018-01-19 19:18 ` Laszlo Ersek
2018-01-19 19:48 ` Eric Blake
2018-01-19 20:29 ` Laszlo Ersek
2018-01-19 20:31 ` Eric Blake
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.