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.
This commit is contained in:
parent
c8ef42eed1
commit
ed036b4052
|
@ -1,3 +1,7 @@
|
|||
2016-08-19 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-x86-low.c (amd64_emit_call): Emit missing call opcode.
|
||||
|
||||
2016-08-19 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* linux-x86-low.c (amd64_install_fast_tracepoint_jump_pad): Fix
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue