On Fri, May 29, 2015 at 10:47 AM, Alan Modra <amo...@gmail.com> wrote: > Two fixes for -fsplit-stack on powerpc64. I goofed on the block > scanned for uses of r12. ENTRY_BLOCK_PTR_FOR_FN is the fake one. The > next block is the first one having insns. > > The second change emits an error if people use a global register > variable r29 with -fsplit-stack. For example: > register struct important_stuff *quick_access __asm__ ("r29"); > > Such code does exist in the wild, but probably doesn't currently use > -fsplit-stack. > > The problem is that r29 is saved by morestack then used to pass the > old stack pointer to the normal function prologue. So on entry to a > function, r29 will be modified. It would be possible to restore r29 > from the morestack frame in order to let the function body see the > original r29, I wrote such a patch, but that trick isn't safe if > someone is using r29 in a signal handler. > > I suppose we could restore r29 and downgrade the error to a warning > that using a global register asm r29 isn't safe in signal handlers > with -fsplit-stack. What do you think, David? > > * config/rs6000/rs6000.c (split_stack_arg_pointer_used_p): Scan > correct block for use of r12. > (rs6000_expand_split_stack_prologue): Error on r29 asm global reg.
Okay. I doubt that many developers explicitly use r29 as a global register. I agree with you that it probably is better to error out completely instead of likely generating buggy code for this particular combination of r29 asm and split stack. Thanks, David