On 09/01/2011 03:07 AM, Bernd Schmidt wrote: > On 08/31/11 20:43, Richard Sandiford wrote: >> Bernd Schmidt <ber...@codesourcery.com> writes: >>> This is necessary when adding shrink-wrapping; otherwise dwarf2cfi sees >>> inconsistent information and aborts. >>> >>> Tested on mips64-elf together with the rest of the shrink-wrapping >>> patches. Ok? >> >> It looks like the current code doesn't handle the RESTORE instruction. >> Could you also test that somehow? A mipsisa32-elf run with -mips16 >> ought to work, but some sort of spot-checking of shrink-wrapping + >> RESTORE would be fine if that's easier. > > Will look into that. You mean the mips16e_build_save_restore function? > >> Also, for the frame_pointer_required case, it looks like there's a >> window between the restoration of the frame pointer and the deallocation >> of the stack in which the CFA is still defined in terms of the frame >> pointer register. Is that significant? If not (e.g. because we >> should never need to unwind at that point) then why do we still >> update the CFA here: > > CC'ing rth, as I'm still not terribly familiar with these issues. I've > tried to follow alpha.c, which seems to ignore this issue.
Alpha isn't a great example here, because it hasn't been updated to generate unwind info for epilogues at all. At the point you restore the frame pointer, you should add a REG_{DEF,ADJUST}_CFA note. r~