aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbserver/linux-x86-low.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-08-19 12:07:45 +0100
committerPedro Alves <palves@redhat.com>2016-08-19 12:12:18 +0100
commited036b4052193ba6790ba7ee94a33a364ace3b55 (patch)
treea8555c4f79efed4c46f0e7dde1564798a72cede9 /gdb/gdbserver/linux-x86-low.c
parentc8ef42eed100c2439e600e846caa7437da93ac17 (diff)
downloadgdb-ed036b4052193ba6790ba7ee94a33a364ace3b55.zip
gdb-ed036b4052193ba6790ba7ee94a33a364ace3b55.tar.gz
gdb-ed036b4052193ba6790ba7ee94a33a364ace3b55.tar.bz2
x32: gdbserver's agent bytecode JIT: fix "call" emission
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: 2016-08-19 Pedro Alves <palves@redhat.com> * linux-x86-low.c (amd64_emit_call): Emit missing call opcode.
Diffstat (limited to 'gdb/gdbserver/linux-x86-low.c')
-rw-r--r--gdb/gdbserver/linux-x86-low.c2
1 files changed, 2 insertions, 0 deletions
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;
}