Message ID | 20180117114430.19110-1-marcandre.lureau@redhat.com |
---|---|
State | New |
Headers | show |
Series | dump-guest-memory.py: fix python 2 support | expand |
On 01/17/18 12:44, 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 expect a byte string, but Python 2 > buffer doesn't provide the tobyes() method. Wrap the read_memory() > result to a memoryview, available in Python 2.7. (if the return object > is already a memoryview, this adds a useless identity view on top) OOP is awesome. > > Fixes a regression introduced with commit > d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). Do you want to CC stable? Commit d23bfa91b778 is part of v2.11.0. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > scripts/dump-guest-memory.py | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py > index 09bec92b50..6f7e1a83b3 100644 > --- a/scripts/dump-guest-memory.py > +++ b/scripts/dump-guest-memory.py > @@ -564,7 +564,9 @@ shape and this command should mostly work.""" > > vmcoreinfo = self.phys_memory_read(addr, size) > 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()) > > def invoke(self, args, from_tty): > """Handles command invocation from gdb.""" > Reviewed-by: Laszlo Ersek <lersek@redhat.com> Laszlo
On Wed, Jan 17, 2018 at 12:44 PM, Marc-André Lureau <marcandre.lureau@redhat.com> 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 expect a byte string, but Python 2 > buffer doesn't provide the tobyes() method. Wrap the read_memory() > result to a memoryview, available in Python 2.7. (if the return object > is already a memoryview, this adds a useless identity view on top) > > Fixes a regression introduced with commit > d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). CC stable (commit d23bfa91b778 is part of v2.11.0., suggested by Laszlo) > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > --- > scripts/dump-guest-memory.py | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py > index 09bec92b50..6f7e1a83b3 100644 > --- a/scripts/dump-guest-memory.py > +++ b/scripts/dump-guest-memory.py > @@ -564,7 +564,9 @@ shape and this command should mostly work.""" > > vmcoreinfo = self.phys_memory_read(addr, size) > 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()) > > def invoke(self, args, from_tty): > """Handles command invocation from gdb.""" > -- > 2.16.0.rc1.1.gef27df75a1 > >
On 01/17/2018 08:18 AM, Laszlo Ersek wrote: > On 01/17/18 12:44, 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 expect a byte string, but Python 2 >> buffer doesn't provide the tobyes() method. Wrap the read_memory() >> result to a memoryview, available in Python 2.7. (if the return object >> is already a memoryview, this adds a useless identity view on top) > > OOP is awesome. > >> >> Fixes a regression introduced with commit >> d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). > > Do you want to CC stable? Commit d23bfa91b778 is part of v2.11.0. Configure says we still support python 2.6; does this still work there?
Hi On Wed, Jan 17, 2018 at 3:59 PM, Eric Blake <eblake@redhat.com> wrote: > On 01/17/2018 08:18 AM, Laszlo Ersek wrote: >> On 01/17/18 12:44, 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 expect a byte string, but Python 2 >>> buffer doesn't provide the tobyes() method. Wrap the read_memory() >>> result to a memoryview, available in Python 2.7. (if the return object >>> is already a memoryview, this adds a useless identity view on top) >> >> OOP is awesome. >> >>> >>> Fixes a regression introduced with commit >>> d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). >> >> Do you want to CC stable? Commit d23bfa91b778 is part of v2.11.0. > > Configure says we still support python 2.6; does this still work there? memoryview is not available with python 2.6. Is the configure version check a configure-time check, or are we suppose to support that version for gdb scripts as well? > > -- > Eric Blake, Principal Software Engineer > Red Hat, Inc. +1-919-301-3266 > Virtualization: qemu.org | libvirt.org >
diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py index 09bec92b50..6f7e1a83b3 100644 --- a/scripts/dump-guest-memory.py +++ b/scripts/dump-guest-memory.py @@ -564,7 +564,9 @@ shape and this command should mostly work.""" vmcoreinfo = self.phys_memory_read(addr, size) 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()) def invoke(self, args, from_tty): """Handles command invocation from gdb."""
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 expect a byte string, but Python 2 buffer doesn't provide the tobyes() method. Wrap the read_memory() result to a memoryview, available in Python 2.7. (if the return object is already a memoryview, this adds a useless identity view on top) Fixes a regression introduced with commit d23bfa91b7789534d16ede6cb7d925bfac3f3c4c ("add vmcoreinfo"). Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> --- scripts/dump-guest-memory.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)