+2016-03-09  Wei-cheng Wang  <cole945@gmail.com>
+           Marcin Kościelnicki  <koriakin@0x04.net>
+
+       * gdb.trace/actions.c (gdb_recursion_test_fp): New typedef.
+       (gdb_recursion_test_ptr): New global variable.
+       (gdb_recursion_test): Call gdb_recursion_test_ptr instead of
+       gdb_recursion_test.
+       (gdb_c_test): Ditto.
+
 2016-03-09  Marcin Kościelnicki  <koriakin@0x04.net>
 
        * gdb.trace/change-loc.exp: Don't depend on tracepoint location
 
 } gdb_union1_test;
 
 void gdb_recursion_test (int, int, int, int,  int,  int,  int);
+/* This function pointer is used to force the function to be called via
+   the global entry instead of local entry on ppc64le; otherwise, breakpoints
+   set at the global entry (i.e., '*foo') will not be hit.  */
+typedef void (*gdb_recursion_test_fp) (int, int, int, int,  int,  int,  int);
+gdb_recursion_test_fp gdb_recursion_test_ptr = gdb_recursion_test;
 
 void gdb_recursion_test (int depth, 
                         int q1, 
   q5 = q6;                                             /* gdbtestline 6 */
   q6 = q;                                              /* gdbtestline 7 */
   if (depth--)                                         /* gdbtestline 8 */
-    gdb_recursion_test (depth, q1, q2, q3, q4, q5, q6);        /* gdbtestline 9 */
+    gdb_recursion_test_ptr (depth, q1, q2, q3, q4, q5, q6);    /* gdbtestline 9 */
 }
 
 
    gdb_structp_test      = &gdb_struct1_test;
    gdb_structpp_test     = &gdb_structp_test;
 
-   gdb_recursion_test (3, (long) parm[1], (long) parm[2], (long) parm[3],
+   gdb_recursion_test_ptr (3, (long) parm[1], (long) parm[2], (long) parm[3],
                       (long) parm[4], (long) parm[5], (long) parm[6]);
 
    gdb_char_test = gdb_short_test = gdb_long_test = 0;