On Tue, Oct 6, 2015 at 11:02 AM, Steve Ellcey <sell...@imgtec.com> wrote: > On Tue, 2015-10-06 at 17:39 +0200, Bernd Schmidt wrote: > >> >> Did your tag that copy as RTX_FRAME_RELATED? I'd expect dwarf2cfi would >> ignore instructions with that bit unset. There's even a comment >> indicating arm does something like this: > > Yes, I had marked it as RTX_FRAME_RELATED. When I took that out things > looked better (well, maybe just different). > > If I remove that and I change Rule #16 to handle an AND with a register > I get odd looking .cfi stuff. The AND instruction (which is marked with > RTX_FRAME_RELATED) seems to generate these cfi_escape macros: > > .cfi_escape 0x10,0x1f,0x2,0x8e,0x7c > .cfi_escape 0x10,0x1e,0x2,0x8e,0x78 > .cfi_escape 0x10,0xc,0x2,0x8e,0x74 > > which are meaningless to me. What I found works better is to skip the > dwarf2cfi.c changes and explicitly attach this note to the AND > instruction: > > cfi_note = alloc_reg_note (REG_CFA_DEF_CFA, stack_pointer_rtx, > NULL_RTX); > REG_NOTES (insn) = cfi_note; > > When I do this the only unexpected test suite execution failures I see > are ones that call the C++ set_unexpected function. > > FYI: The reason I was copying the stack pointer to another register was > to use that other register as my argument pointer (needed after the > stack pointer got aligned) and to use it to restore the stack pointer at > the end of the function for normal returns.
Does it pass all tests under g++.dg/torture/stackalign? You need to implement -mstackrealign and -mpreferred-stack-boundary= as well as update check_effective_target_automatic_stack_alignment to run all stack alignment tests. -- H.J.