[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v3 5/7] tests/guest-debug: don't use symbol resolution
From: |
Alex Bennée |
Subject: |
[Qemu-arm] [PATCH v3 5/7] tests/guest-debug: don't use symbol resolution for PC checks |
Date: |
Fri, 9 Nov 2018 15:21:17 +0000 |
It turns out symbol resolution isn't enough as modern kernels are
often padded with check code at the start of functions. GDB seems to
put the breakpoint at the first non-check instruction which causes
comparisons with the symbol resolution to fail.
For normal breakpoints we can detect the hit just by checking
hit_count instead. For hardware breakpoints we fish the breakpoint
address out of what gdb.execute() reported it was set at.
Signed-off-by: Alex Bennée <address@hidden>
---
tests/guest-debug/test-gdbstub.py | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/tests/guest-debug/test-gdbstub.py
b/tests/guest-debug/test-gdbstub.py
index c7e3986a24..3de174b74b 100644
--- a/tests/guest-debug/test-gdbstub.py
+++ b/tests/guest-debug/test-gdbstub.py
@@ -6,9 +6,10 @@ from __future__ import print_function
# gdb ${KERNEL}.vmlinux -x ${QEMU_SRC}/tests/guest-debug/test-gdbstub.py
import gdb
+import re
failcount = 0
-
+addr_match = re.compile("(0x[0-9a-f]{4,16})")
def report(cond, msg):
"Report success/fail of test"
@@ -37,26 +38,30 @@ def check_break(sym_name):
gdb.execute("c")
# hopefully we came back
- end_pc = gdb.parse_and_eval('$pc')
- print ("%s == %s %d" % (end_pc, sym.value(), bp.hit_count))
+ hit = bp.hit_count
bp.delete()
- # can we test we hit bp?
- return end_pc == sym.value()
+ # did we hit bp?
+ return hit > 0
# We need to do hbreak manually as the python interface doesn't export it
+# As the resolution of sym_name might not exactly match where the
+# breakpoint actually ends up we need to fish it out from result of
+# gdb.execute.
def check_hbreak(sym_name):
"Setup hardware breakpoint, continue and check we stopped."
- sym, ok = gdb.lookup_symbol(sym_name)
- gdb.execute("hbreak %s" % (sym_name))
+ result = gdb.execute("hbreak %s" % (sym_name), to_string=True)
+ addr_txt = addr_match.search(result).group()
+ addr = int(addr_txt, 16)
+
gdb.execute("c")
# hopefully we came back
end_pc = gdb.parse_and_eval('$pc')
- print ("%s == %s" % (end_pc, sym.value()))
+ print ("%s == %s" % (end_pc, addr))
- if end_pc == sym.value():
+ if end_pc == addr:
gdb.execute("d 1")
return True
else:
--
2.17.1
- [Qemu-arm] [PATCH v3 0/7] KVM Guest Debug fixes (plus TCG EL2 debug tweaks), Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 7/7] arm: fix aa64_generate_debug_exceptions to work with EL2, Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 2/7] target/arm64: hold BQL when calling do_interrupt(), Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 1/7] target/arm64: properly handle DBGVR RESS bits, Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 6/7] arm: use symbolic MDCR_TDE in arm_debug_target_el, Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 3/7] target/arm64: kvm debug set target_el when passing exception to guest, Alex Bennée, 2018/11/09
- [Qemu-arm] [PATCH v3 5/7] tests/guest-debug: don't use symbol resolution for PC checks,
Alex Bennée <=
- [Qemu-arm] [PATCH v3 4/7] tests/guest-debug: fix scoping of failcount, Alex Bennée, 2018/11/09
- Re: [Qemu-arm] [PATCH v3 0/7] KVM Guest Debug fixes (plus TCG EL2 debug tweaks), Alex Bennée, 2018/11/09
- Re: [Qemu-arm] [PATCH v3 0/7] KVM Guest Debug fixes (plus TCG EL2 debug tweaks), Peter Maydell, 2018/11/12