[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#804536: gcc-5: [mips,mipsel] regression in optimization causes FTBFS for gsoap



control: forwarded -1 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68273

On 2015-11-10 13:22, Aurelien Jarno wrote:
> On 2015-11-09 11:53, Mattias Ellert wrote:
> > Package: gcc-5
> > Version: 5.2.1-23
> > Severity: serious
> > Justification: causes gsoap to FTBFS
> > Control: affects -1 gsoap
> > Control: block 804455 by -1
> > X-Debbugs-Cc: debian-mips@lists.debian.org
> > 
> > Hi!
> > 
> > The binnmu of gsoap 2.8.22-1 due to the openssl transition failed on
> > mips and mipsel, but succeeded on the other architectures.
> > 
> > https://buildd.debian.org/status/package.php?p=gsoap
> > 
> > (It also succeeded on mip64le - but the mips64el build used gcc-5
> > 5.2.1-21 while mips and mipsel used 5.2.1-23. I am not sure if this is
> > relevant information.)
> > 
> > The failure is a segmentation fault when running the soapcpp2 binary
> > that has been compiled as part of the build. The soapcpp2 binary is not
> > linked to openssl, so the issue is not due to the new openssl library
> > that triggered the binnmu rebuild.
> > 
> > I can reproduce the failure on the eder.debian.org porterbox.
> > 
> > However, if I on the porterbox reduce the optimization from -O2 to -O1,
> > the build succeeds. This therefore looks like a regression in
> > mips/mipsel optimization.
> 
> The wrongly compiled code is in soapcpp2_yacc.y (generated from
> soapcpp2.y) on line 2272 and following:
> 
> |   case 34:
> | #line 436 "soapcpp2_yacc.y" /* yacc.c:1646  */
> |     { if ((yyvsp[-1].rec).sto & Stypedef)
> |                           {     sprintf(errbuf, "invalid typedef qualifier for '%s'", (yyvsp[0].sym)->name);
> |                                 semwarn(errbuf);
> |                           }
> |                           printf("%p\n", (yyvsp[0].sym));
> |                           p = enter(sp->table, (yyvsp[0].sym));
> |                           p->info.typ = (yyvsp[-1].rec).typ;
> |                           p->info.sto = (yyvsp[-1].rec).sto;
> |                           p->info.hasval = False;
> |                           p->info.offset = sp->offset;
> |                           if (sp->grow)
> |                                 sp->offset += p->info.typ->width;
> |                           else if (p->info.typ->width > sp->offset)
> |                                 sp->offset = p->info.typ->width;
> |                           sp->entry = p;
> |                         }
> | #line 2290 "soapcpp2_yacc.c" /* yacc.c:1646  */
> |     break;
> 
> The call to enter is translated into the following code:
> 
> | $L129:  
> |         .loc 1 436 0
> |         lw      $2,-60($20)
> |         sw      $2,188($sp)
> |         andi    $2,$2,0x10
> |         bne     $2,$0,$L384
> |         lui     $7,%hi($LC36)
> | 
> |         lw      $6,0($20)
> | $LVL335 = .
> | $L385:  
> |         .loc 1 440 0
> |         lw      $22,%got(sp)($28)
> |         lw      $25,%call16(enter)($28)
> |         lw      $2,0($22)
> |         .reloc  1f,R_MIPS_JALR,enter
> | 1:      jalr    $25
> |         lw      $4,0($2)
> 
> Register a2 ($6) is loaded with (yyvsp[0].sym) instead of a1 ($5).
> 
> I still have to check if it is reproducible with trunk and to find the
> optimization option causing the issue. Then we can report the bug
> upstream.

Bug submitted upstream as PR68273.

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net

Attachment: signature.asc
Description: Digital signature


Reply to: