]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libgomp/nvptx: Prepare for reverse-offload callback handling, resolve spurious SIGSEGVs
authorThomas Schwinge <thomas@codesourcery.com>
Mon, 24 Oct 2022 19:59:37 +0000 (21:59 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Mon, 24 Oct 2022 19:59:55 +0000 (21:59 +0200)
Per commit r13-3460-g131d18e928a3ea1ab2d3bf61aa92d68a8a254609
"libgomp/nvptx: Prepare for reverse-offload callback handling",
I'm seeing a lot of libgomp execution test regressions.  Random
example, 'libgomp.c-c++-common/error-1.c':

    [...]
      GOMP_OFFLOAD_run: kernel main$_omp_fn$0: launch [(teams: 1), 1, 1] [(lanes: 32), (threads: 8), 1]

    Thread 1 "a.out" received signal SIGSEGV, Segmentation fault.
    0x00007ffff793b87d in GOMP_OFFLOAD_run (ord=<optimized out>, tgt_fn=<optimized out>, tgt_vars=<optimized out>, args=<optimized out>) at [...]/source-gcc/libgomp/plugin/plugin-nvptx.c:2127
    2127            if (__atomic_load_n (&ptx_dev->rev_data->fn, __ATOMIC_ACQUIRE) != 0)
    (gdb) print ptx_dev
    $1 = (struct ptx_device *) 0x6a55a0
    (gdb) print ptx_dev->rev_data
    $2 = (struct rev_offload *) 0xffffffff00000000
    (gdb) print ptx_dev->rev_data->fn
    Cannot access memory at address 0xffffffff00000000

libgomp/
* plugin/plugin-nvptx.c (nvptx_open_device): Initialize
'ptx_dev->rev_data'.

(cherry picked from commit 205538832b7033699047900cf25928f5920d8b93)

libgomp/ChangeLog.omp
libgomp/plugin/plugin-nvptx.c

index ab340385c83d2a7ef29f3e36bd39917e3ace14fe..ee0f09ead133cd843eda456e347e11c4d2130015 100644 (file)
@@ -1,3 +1,11 @@
+2022-10-24  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-10-24  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * plugin/plugin-nvptx.c (nvptx_open_device): Initialize
+       'ptx_dev->rev_data'.
+
 2022-10-24  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index 1bf22bc17a000be1aaf046dd20a4d72c31ab2b33..be3af6cea2a1ec246c3b23712bdd0817c6869ef8 100644 (file)
@@ -560,6 +560,8 @@ nvptx_open_device (int n)
   ptx_dev->omp_stacks.size = 0;
   pthread_mutex_init (&ptx_dev->omp_stacks.lock, NULL);
 
+  ptx_dev->rev_data = NULL;
+
   return ptx_dev;
 }