Fix trace file fails on powerpc64
authorYao Qi <yao@codesourcery.com>
Mon, 27 Oct 2014 08:37:38 +0000 (16:37 +0800)
committerYao Qi <yao@codesourcery.com>
Mon, 27 Oct 2014 12:09:19 +0000 (20:09 +0800)
I see the following fails on powerpc64-linux,

(gdb) target tfile tfile-basic.tf^M
warning: Uploaded tracepoint 1 has no source location, using raw address^M
Tracepoint 1 at 0x10012358^M
Created tracepoint 1 for target's tracepoint 1 at 0x10012358.^M
(gdb) PASS: gdb.trace/tfile.exp: target tfile tfile-basic.tf
info trace^M
Num     Type           Disp Enb Address            What^M
1       tracepoint     keep y   0x0000000010012358 <write_basic_trace_file>^M
        installed on target^M
(gdb) FAIL: gdb.trace/tfile.exp: info tracepoints on trace file

-target-select tfile tfile-basic.tf^M
=thread-group-started,id="i1",pid="1"^M
=thread-created,id="1",group-id="i1"^M
&"warning: Uploaded tracepoint 1 has no source location, using raw address\n"^M
=breakpoint-created,bkpt={number="1",type="tracepoint",disp="keep",enabled="y",
addr="0x0000000010012358",at="<write_basic_trace_file>",thread-groups=["i1"],
times="0",installed="y",original-location="*0x10012358"}^M
~"Created tracepoint 1 for target's tracepoint 1 at 0x10012358.\n"^M
^connected^M
(gdb) ^M
FAIL: gdb.trace/mi-traceframe-changed.exp: tfile: select trace file

These fails are caused by writing function descriptor address into trace
file instead of function address.  This patch is to teach tfile.c to
write function address on powerpc64 target.  With this patch applied,
fails in tfile.exp and mi-traceframe-changed.exp are fixed.  Is it
OK?

gdb/testsuite:

2014-10-27  Yao Qi  <yao@codesourcery.com>

* gdb.trace/tfile.c (adjust_function_address)
[__powerpc64__ && _CALL_ELF != 2]: Get function address from
function descriptor.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.trace/tfile.c

index 036da6d03684e5a0c8d210eda5b67d51895425f4..2eea79128c4a72a8a43e3567c0ba5d7968a63041 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-27  Yao Qi  <yao@codesourcery.com>
+
+       * gdb.trace/tfile.c (adjust_function_address)
+       [__powerpc64__ && _CALL_ELF != 2]: Get function address from
+       function descriptor.
+
 2014-10-24  Don Breazeal  <donb@codesourcery.com>
 
        * gdb.base/foll-fork.exp (test_follow_fork,
index e69240a9ea0cb89f2c5341faa87ab4d80b6e9fa9..b673211e74708cbff0eccec42e2a3b5a996d9e43 100644 (file)
@@ -130,6 +130,9 @@ adjust_function_address (uintptr_t func_addr)
   /* Although Thumb functions are two-byte aligned, function
      pointers have the Thumb bit set.  Clear it.  */
   return func_addr & ~1;
+#elif defined __powerpc64__ && _CALL_ELF != 2
+  /* Get function address from function descriptor.  */
+  return *(uintptr_t *) func_addr;
 #else
   return func_addr;
 #endif