This is the mail archive of the mailing list for the GDB project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 4/6] 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:


  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

yyyy-mm-dd  Pedro Alves  <>

	* 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)
       int offset32 = offset64; /* we know we can't overflow here.  */
+      buf[i++] = 0xe8; /* call <reladdr> */
       memcpy (buf + i, &offset32, 4);
       i += 4;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]