This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 4/6] x32: gdbserver's agent bytecode JIT: fix "call" emission
- From: Pedro Alves <palves at redhat dot com>
- To: gdb-patches at sourceware dot org
- Date: Thu, 28 Jul 2016 02:01:23 +0100
- Subject: [PATCH 4/6] x32: gdbserver's agent bytecode JIT: fix "call" emission
- Authentication-results: sourceware.org; auth=none
- References: <1469667685-10848-1-git-send-email-palves@redhat.com>
Running fast tracepoint tests on x32 exposes a latent bug in the agent
bytecode jitting. There's a code path that forgets to emit the call
opcode... Whoops. Fixes a bunch of gdb.trace/trace-condition.exp
FAILs, like:
(gdb)
continue
Continuing.
Thread 1 "trace-condition" received signal SIGSEGV, Segmentation fault.
0x7ffec016 in ?? ()
(gdb) FAIL: gdb.trace/trace-condition.exp: ftrace: $rip == *set_point: advance through tracing
gdb/gdbserver/ChangeLog:
yyyy-mm-dd Pedro Alves <palves@redhat.com>
* linux-x86-low.c (amd64_emit_call): Emit missing call opcode.
---
gdb/gdbserver/linux-x86-low.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 1ba98ba..d847b93 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -1842,6 +1842,8 @@ amd64_emit_call (CORE_ADDR fn)
else
{
int offset32 = offset64; /* we know we can't overflow here. */
+
+ buf[i++] = 0xe8; /* call <reladdr> */
memcpy (buf + i, &offset32, 4);
i += 4;
}
--
2.5.5