This is the mail archive of the gcc-patches@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]

Re: [PATCH 3/4] split-stack for powerpc64


On Fri, May 29, 2015 at 10:47 AM, Alan Modra <amodra@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


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