This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

How to debug when some rtx are wrongly reclaimed by garbage collector?


Hello, 
In our port, I created a new NOTE to preserve pragma info. The
note is generated as follows in expanding builtins. 

   rtx note = emit_note(NOTE_INSN_LOOPCOUNT_PRAGMA_BEG);
   rtx vector = gen_rtx_PARALLEL (VOIDmode, 
                                  gen_rtvec(4, op0, op1, op2, op3));
   XCEXP(note, 4, NOTE) = vector;

After the creation:
(gdb) p vector->u.fld[0].rt_rtvec
$15 = (rtvec) 0x2a95905028 
(gdb) p *(vector->u.fld[0].rt_rtvec)
$13 = {num_elem = 4, elem = {0x2a955944a0}}

and I ran into an issue that GC sometimes reclaims the rtvec after
combine pass and causes segmentation fault.

(gdb) p vector->u.fld[0].rt_rtvec
$15 = (rtvec) 0x2a95905028 
(gdb) p *(vector->u.fld[0].rt_rtvec)
$16 = {num_elem = -1515870811, elem = {0xa5a5a5a5a5a5a5a5}}

I really have no clue on how to debug such issue. 
Any suggestion is greatly appreciated.

Thanks
Bingfeng Mei


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]