* Kwok Cheung Yeung: > From 788687f87ad41e51258738ce068ee38d7b24defc Mon Sep 17 00:00:00 2001 > From: Kwok Cheung Yeung <k...@codesourcery.com> > Date: Fri, 15 Jan 2021 04:49:36 -0800 > Subject: [PATCH] openmp: Add support for the OpenMP 5.0 task detach clause
Sorry, this appears to cause OpenMP task state corruption in RPM. We have only seen this on s390x. The relevant code looks like this: 745 * (largest first) to help achieve an optimal load distribution. 746 */ 747 rpmRC packageBinaries(rpmSpec spec, const char *cookie, int cheating) 748 { 749 rpmRC rc = RPMRC_OK; 750 Package pkg; 751 Package *tasks; 752 int npkgs = 0; 753 754 for (pkg = spec->packages; pkg != NULL; pkg = pkg->next) 755 npkgs++; 756 tasks = xcalloc(npkgs, sizeof(Package)); 757 758 pkg = spec->packages; 759 for (int i = 0; i < npkgs; i++) { 760 tasks[i] = pkg; 761 pkg = pkg->next; 762 } 763 qsort(tasks, npkgs, sizeof(Package), compareBinaries); 764 765 #pragma omp parallel 766 #pragma omp single 767 for (int i = 0; i < npkgs; i++) { 768 Package pkg = tasks[i]; 769 #pragma omp task untied priority(i) 770 { 771 pkg->rc = packageBinary(spec, pkg, cookie, cheating, &pkg->filename); 772 rpmlog(RPMLOG_DEBUG, 773 _("Finished binary package job, result %d, filename %s\n"), 774 pkg->rc, pkg->filename); 775 if (pkg->rc) { 776 #pragma omp critical 777 rc = pkg->rc; 778 } 779 } /* omp task */ 780 if (rc) 781 break; 782 } 783 784 /* Now check the package set if enabled */ 785 if (rc == RPMRC_OK) 786 rc = checkPackageSet(spec->packages); 787 788 free(tasks); 789 790 return rc; 791 } Backtrace looks like this: Thread 1 "rpmbuild" received signal SIGSEGV, Segmentation fault. 0x000003fffde89e60 in packageBinaries._omp_fn.0 () at pack.c:780 780 if (rc) (gdb) bt #0 0x000003fffde89e60 in packageBinaries._omp_fn.0 () at pack.c:780 #1 0x000003fffca94806 in GOMP_parallel ( fn=0x3fffde89d80 <packageBinaries._omp_fn.0>, data=0x3fffffff478, num_threads=2, flags=<optimized out>) at ../../../libgomp/parallel.c:178 #2 0x000003fffde953fa in packageBinaries (cheating=0, cookie=0x0, spec=0x2aa00065570) at pack.c:765 #3 buildSpec (ts=<optimized out>, buildArgs=<optimized out>, spec=0x2aa00065570, what=<optimized out>) at build.c:411 #4 0x000003fffde98074 in rpmSpecBuild (ts=<optimized out>, spec=<optimized out>, buildArgs=<optimized out>) at build.c:452 #5 0x000002aa00003e74 in buildForTarget (ts=0x2aa00069a80, arg=<optimized out>, ba=0x2aa00007990 <rpmBTArgs>) at rpmbuild.c:500 #6 0x000002aa0000409a in build (ts=0x2aa00069a80, arg=0x3fffffffe3a "/builddir/build/SPECS/compsize.spec", rcfile=0x0, ba=0x2aa00007990 <rpmBTArgs>) at rpmbuild.c:552 #7 0x000002aa00002f84 in main (argc=<optimized out>, argv=<optimized out>) at rpmbuild.c:690 Debuginfo is a bit wonky, but the task pointer appears to be null. Disassembly of the function around the crash site: (gdb) disassemble Dump of assembler code for function packageBinaries._omp_fn.0: 0x000003fffde89d80 <+0>: stmg %r6,%r15,48(%r15) 0x000003fffde89d86 <+6>: ear %r1,%a0 0x000003fffde89d8a <+10>: lgr %r14,%r15 0x000003fffde89d8e <+14>: lay %r15,-280(%r15) 0x000003fffde89d94 <+20>: aghi %r14,-24 0x000003fffde89d98 <+24>: std %f8,0(%r14) 0x000003fffde89d9c <+28>: std %f10,8(%r14) 0x000003fffde89da0 <+32>: std %f14,16(%r14) 0x000003fffde89da4 <+36>: sllg %r1,%r1,32 0x000003fffde89daa <+42>: ear %r1,%a1 0x000003fffde89dae <+46>: l %r11,32(%r2) 0x000003fffde89db2 <+50>: stg %r1,200(%r15) 0x000003fffde89db8 <+56>: lg %r10,16(%r2) 0x000003fffde89dbe <+62>: l %r13,24(%r2) 0x000003fffde89dc2 <+66>: mvc 248(8,%r15),40(%r1) 0x000003fffde89dc8 <+72>: ld %f8,8(%r2) 0x000003fffde89dcc <+76>: ld %f10,0(%r2) 0x000003fffde89dd0 <+80>: lgr %r8,%r2 0x000003fffde89dd4 <+84>: brasl %r14,0x3fffde87530 <GOMP_single_start@plt> 0x000003fffde89dda <+90>: cije %r2,0,0x3fffde89e76 <packageBinaries._omp_fn.0+246> 0x000003fffde89de0 <+96>: cijnh %r11,0,0x3fffde89e76 <packageBinaries._omp_fn.0+246> 0x000003fffde89de6 <+102>: stg %r8,192(%r15) 0x000003fffde89dec <+108>: la %r7,208(%r15) 0x000003fffde89df0 <+112>: la %r1,28(%r8) 0x000003fffde89df4 <+116>: lgr %r8,%r7 0x000003fffde89df8 <+120>: lgdr %r7,%f8 0x000003fffde89dfc <+124>: ldgr %f14,%r1 0x000003fffde89e00 <+128>: lhi %r9,0 0x000003fffde89e04 <+132>: lg %r1,0(%r10) 0x000003fffde89e0a <+138>: std %f10,208(%r15) 0x000003fffde89e0e <+142>: std %f14,224(%r15) 0x000003fffde89e12 <+146>: stg %r1,232(%r15) 0x000003fffde89e18 <+152>: st %r13,240(%r15) 0x000003fffde89e1c <+156>: stg %r7,216(%r15) 0x000003fffde89e22 <+162>: lgfr %r1,%r9 0x000003fffde89e26 <+166>: stg %r1,184(%r15) 0x000003fffde89e2c <+172>: mvghi 176(%r15),0 0x000003fffde89e32 <+178>: mvghi 168(%r15),17 0x000003fffde89e38 <+184>: mvghi 160(%r15),1 0x000003fffde89e3e <+190>: lgr %r3,%r8 0x000003fffde89e42 <+194>: lghi %r6,8 0x000003fffde89e46 <+198>: lghi %r5,40 0x000003fffde89e4a <+202>: lghi %r4,0 0x000003fffde89e4e <+206>: larl %r2,0x3fffde910c0 <packageBinaries._omp_fn.1> 0x000003fffde89e54 <+212>: brasl %r14,0x3fffde87c70 <GOMP_task@plt> 0x000003fffde89e5a <+218>: lg %r1,192(%r15) => 0x000003fffde89e60 <+224>: lt %r1,28(%r1) 0x000003fffde89e66 <+230>: jne 0x3fffde89e76 <packageBinaries._omp_fn.0+246> 0x000003fffde89e6a <+234>: ahi %r9,1 0x000003fffde89e6e <+238>: aghi %r10,8 0x000003fffde89e72 <+242>: brct %r11,0x3fffde89e04 <packageBinaries._omp_fn.0+132> 0x000003fffde89e76 <+246>: lg %r1,200(%r15) 0x000003fffde89e7c <+252>: clc 248(8,%r15),40(%r1) 0x000003fffde89e82 <+258>: jne 0x3fffde89e9e <packageBinaries._omp_fn.0+286> 0x000003fffde89e86 <+262>: ld %f8,256(%r15) 0x000003fffde89e8a <+266>: ld %f10,264(%r15) 0x000003fffde89e8e <+270>: ld %f14,272(%r15) 0x000003fffde89e92 <+274>: lmg %r6,%r15,328(%r15) 0x000003fffde89e98 <+280>: jg 0x3fffde895f0 <GOMP_barrier@plt> 0x000003fffde89e9e <+286>: brasl %r14,0x3fffde88810 <__stack_chk_fail@plt> (gdb) print/x $r1 $1 = 0x0 Confirmed via bisection on libgomp.so.1. I did not rebuild rpmbuild. Thanks, Florian -- Red Hat GmbH, https://de.redhat.com/ , Registered seat: Grasbrunn, Commercial register: Amtsgericht Muenchen, HRB 153243, Managing Directors: Charles Cachera, Brian Klemm, Laurie Krebs, Michael O'Neill