This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
How to debug when some rtx are wrongly reclaimed by garbage collector?
- From: "Bingfeng Mei" <bmei at broadcom dot com>
- To: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Fri, 12 Nov 2010 02:43:21 -0800
- Subject: 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