GDB's OpenCL Tests

Andrew Burgess
Tue Jun 2 11:06:15 GMT 2020

I wonder if anyone is regularly running the OpenCL tests for GDB?

I'm running Fedora 31.  Initially None of the OpenCL tests would run
due to the libOpenCL library being missing, so I installed the
packages `ocl-icd', `ocl-icd-devel', and `opencl-headers'.  After this
I did have, but things were still not working.

I was mostly looking at the gdb.opencl/callfuncs.exp test, just
because it was the first test file, but I don't believe it is anything
special, in fact, the failures I was seeing came from the file
gdb/testsuite/lib/opencl.exp function skip_opencl_tests, when we're
just checking if opencl is supported or not.

The compile was failing with this message:

  /usr/include/CL/cl_version.h:34:9: note: #pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)
   34 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 220 (OpenCL 2.2)")
      |         ^~~~~~~

This is actually just a warning, but this is still enough to cause
GDB's testsuite to abandon the build.

A quick google, and "random internet stranger" recommended adding
something like:


to the offending source files, so I added this to:


I'm aware that at this point I'm just making random changes, so it's
not really surprising that nothing after this works, but lets push

.... success, things now compile, but, almost all the tests are still

What I see is this pattern in basically every test:

  (gdb) tbreak testkernel
  Function "testkernel" not defined.
  Make breakpoint pending on future shared library load? (y or [n]) y
  Temporary breakpoint 1 (testkernel) pending.
  (gdb) PASS: gdb.opencl/datatypes.exp: Set pending breakpoint
  [Inferior 1 (process 2840279) exited normally]
  (gdb) FAIL: gdb.opencl/datatypes.exp: run (the program exited)

The 'testkernel' seems to be the core entry point function within the
actual opencl program, so we never hit that symbol.

It was at this point that I started to grow suspicious that nobody is
running these tests much (or at all?), the gdb.opencl/callfuncs.exp
test contains this gem:

  gdb_load ${objdir}/${subdir}/${testfile}

Which doesn't take account of the /output/ directory that was added
into the directory structure ages ago.  I applied patch #1 (below) to
fix this.

Still not hitting the testkernel symbol...

So now I ran the test manually under GDB, break at 'exit' and then
'rbreak testkernel', this sets 3 breakpoints for me.  Start the test
up again with 'run', and I hit one of the breakpoints, here's what I

  Thread 25 "callfuncs" hit Breakpoint 3, 0x00007ffff7fc9354 in _pocl_kernel_testkernel_workgroup ()
     from /home/andrew/.cache/pocl/kcache/BA/OLMGEJJKCCPFCOMNNHDOJKFDNOKMKEPPCEIPJ/testkernel/16-1-1-goffs0-smallgrid/
  (gdb) bt
  #0  0x00007ffff7fc9354 in _pocl_kernel_testkernel_workgroup ()
     from /home/andrew/.cache/pocl/kcache/BA/OLMGEJJKCCPFCOMNNHDOJKFDNOKMKEPPCEIPJ/testkernel/16-1-1-goffs0-smallgrid/
  #1  0x00007ffff070fe6d in pocl_pthread_driver_thread () from /lib64/
  #2  0x00007ffff1d324e2 in start_thread () from /lib64/
  #3  0x00007ffff7d7a6a3 in clone () from /lib64/

I then use 'objdump -W' to look at the debug information in, and it has no extra debug at all.

So, my questions:

 - Can anyone successfully run some or all of the OpenCL tests?

 - And can anyone give me any hints on what I might need to do to get
   the tests running?



## START - Patch 1 ##

diff --git a/gdb/testsuite/gdb.opencl/callfuncs.exp b/gdb/testsuite/gdb.opencl/callfuncs.exp
index cf418d16582..1452c403c90 100644
--- a/gdb/testsuite/gdb.opencl/callfuncs.exp
+++ b/gdb/testsuite/gdb.opencl/callfuncs.exp
@@ -33,12 +33,7 @@ if { [gdb_compile_opencl_hostapp "${clprogram}" "${testfile}" "" ] != "" } {
     return -1
-# Load the OpenCL app
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${objdir}/${subdir}/${testfile}
+clean_restart ${testfile}
 # Set breakpoint at the OpenCL kernel
 gdb_test "tbreak testkernel" \

## END - Patch 1 ##

More information about the Gdb mailing list