* Juan Orti Alcaine:
I can reproduce it locally. It's a crash in rpmbuild:
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
(gdb) print rc
No symbol "rc" in current context.
As you can see, something is broken with debugging information.
(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
So it's a null pointer dereference.
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 }
I don't know anything about OpenMP, so I can't tell if this is a source
code issue or a GCC bug.
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