|
From: Josef W. <Jos...@gm...> - 2009-07-16 19:08:00
|
Hi Julian,
On Wednesday 01 July 2009, sv...@va... wrote:
> Author: sewardj
> Date: 2009-07-01 09:06:34 +0100 (Wed, 01 Jul 2009)
> New Revision: 1901
>
> Log:
> Merge in branches/DCAS:
I recently get VG internal segfaults with a lot of binaries on my Pentium-M
(mostly KDE/Qt code), and the debugger points to code added in this commit:
Program received signal SIGSEGV, Segmentation fault.
deepCopyIRExpr (e=0x0) at priv/ir_defs.c:1393
1393 switch (e->tag) {
(gdb) bt
#0 deepCopyIRExpr (e=0x0) at priv/ir_defs.c:1393
#1 0x3809d89b in deepCopyIRCAS (cas=0x38340b88) at priv/ir_defs.c:1461
#2 0x3809dbbb in deepCopyIRStmt (s=0x38340ba8) at priv/ir_defs.c:1497
#3 0x3809dc61 in deepCopyIRSB (bb=0x383409c4) at priv/ir_defs.c:1531
#4 0x380a4b77 in maybe_loop_unroll_BB (my_addr=<value optimized out>, bb0=<value optimized out>)
at priv/ir_opt.c:3440
#5 do_iropt_BB (my_addr=<value optimized out>, bb0=<value optimized out>) at priv/ir_opt.c:4492
#6 0x38095c34 in LibVEX_Translate (vta=0x62b81dd8) at priv/main_main.c:473
#7 0x38012505 in vgPlain_translate (tid=1, nraddr=134650248, debugging_translation=0 '\0',
debugging_verbosity=0, bbs_done=63823952, allow_redirection=1 '\1') at m_translate.c:1517
#8 0x3803767e in handle_tt_miss (tid=<value optimized out>) at m_scheduler/scheduler.c:844
#9 vgPlain_scheduler (tid=<value optimized out>) at m_scheduler/scheduler.c:1057
#10 0x38063cc9 in thread_wrapper (tidW=<value optimized out>) at m_syswrap/syswrap-linux.c:91
#11 run_a_thread_NORETURN (tidW=<value optimized out>) at m_syswrap/syswrap-linux.c:124
#12 0x00000000 in ?? ()
(gdb) up
#1 0x3809d89b in deepCopyIRCAS (cas=0x38340b88) at priv/ir_defs.c:1461
1461 return mkIRCAS( cas->oldHi, cas->oldLo, cas->end,
(gdb) l
1456 return d2;
1457 }
1458
1459 IRCAS* deepCopyIRCAS ( IRCAS* cas )
1460 {
1461 return mkIRCAS( cas->oldHi, cas->oldLo, cas->end,
1462 deepCopyIRExpr(cas->addr),
1463 deepCopyIRExpr(cas->expdHi),
1464 deepCopyIRExpr(cas->expdLo),
1465 deepCopyIRExpr(cas->dataHi),
(gdb) p *cas
$2 = {oldHi = 4294967295, oldLo = 4, end = Iend_LE, addr = 0x3833e5f8, expdHi = 0x0, expdLo = 0x3833e6e8,
dataHi = 0x0, dataLo = 0x3833e6d0}
Both cas->expdHi and cas->dataHi are 0, leading to the crash in deepCopyIRExpr.
Is it enough to change this to
1461 return mkIRCAS( cas->oldHi, cas->oldLo, cas->end,
1462 deepCopyIRExpr(cas->addr),
1463 cas->expdHi ? deepCopyIRExpr(cas->expdHi) : 0,
1464 deepCopyIRExpr(cas->expdLo),
1465 cas->dataHi ? deepCopyIRExpr(cas->dataHi) : 0,
??
Josef
|