On 01/20/2016 12:18 PM, Paolo Bonzini wrote: > > > On 14/01/2016 09:48, Janosch Frank wrote: >> This commit does not make the script python 3 compatible, it is a >> preparation that fixes the easy and common incompatibilities. >> >> Print is a function in python 3 and therefore needs braces around its >> arguments. >> >> Range does not cast a gdb.Value object to int in python 3, we have to >> do it ourselves. > > Would it make sense to make kvm_stat Py3-compatible too?
Well, if you don't enforce it for any patches afterwards it might get broken and therefore unnecessary. But I do not expect a huge number of patches for those small scripts. For compatibility we need to (quick check and test): fix all prints exchange dict.iteritems() with dict.items(). decode the regex to utf-8 I'll add a patch for it into my next patch series for kvm_stat if you want. I still need to add functionality and documentation to it. Initially I did not chose to make dump guest memory compatible to both versions. As my gdb was compiled with py 3, I decided to fix it until it worked. Surprisingly it then was also py 2 compatible. > > Paolo > >> Signed-off-by: Janosch Frank <fran...@linux.vnet.ibm.com> >> --- >> scripts/dump-guest-memory.py | 22 +++++++++++----------- >> 1 file changed, 11 insertions(+), 11 deletions(-) >> >> diff --git a/scripts/dump-guest-memory.py b/scripts/dump-guest-memory.py >> index 76a6ecb..fe93135 100644 >> --- a/scripts/dump-guest-memory.py >> +++ b/scripts/dump-guest-memory.py >> @@ -98,15 +98,15 @@ def memory_region_get_ram_ptr(mr): >> >> def get_guest_phys_blocks(): >> guest_phys_blocks = [] >> - print "guest RAM blocks:" >> - print ("target_start target_end host_addr message " >> - "count") >> - print ("---------------- ---------------- ---------------- ------- " >> - "-----") >> + print("guest RAM blocks:") >> + print("target_start target_end host_addr message " >> + "count") >> + print("---------------- ---------------- ---------------- ------- " >> + "-----") >> >> current_map_p = gdb.parse_and_eval("address_space_memory.current_map") >> current_map = current_map_p.dereference() >> - for cur in range(current_map["nr"]): >> + for cur in range(int(current_map["nr"])): >> flat_range = (current_map["ranges"] + cur).dereference() >> mr = flat_range["mr"].dereference() >> >> @@ -149,9 +149,9 @@ def get_guest_phys_blocks(): >> predecessor["target_end"] = target_end >> message = "joined" >> >> - print ("%016x %016x %016x %-7s %5u" % >> - (target_start, target_end, host_addr.cast(UINTPTR_T), >> - message, len(guest_phys_blocks))) >> + print("%016x %016x %016x %-7s %5u" % >> + (target_start, target_end, host_addr.cast(UINTPTR_T), >> + message, len(guest_phys_blocks))) >> >> return guest_phys_blocks >> >> @@ -311,8 +311,8 @@ shape and this command should mostly work.""" >> for block in self.guest_phys_blocks: >> cur = block["host_addr"] >> left = block["target_end"] - block["target_start"] >> - print ("dumping range at %016x for length %016x" % >> - (cur.cast(UINTPTR_T), left)) >> + print("dumping range at %016x for length %016x" % >> + (cur.cast(UINTPTR_T), left)) >> while (left > 0): >> chunk_size = min(TARGET_PAGE_SIZE, left) >> chunk = qemu_core.read_memory(cur, chunk_size) >> >