Introduce emit_frame_chain
authorWilco Dijkstra <wdijkstr@arm.com>
Thu, 26 Oct 2017 16:51:37 +0000 (16:51 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Thu, 26 Oct 2017 16:51:37 +0000 (16:51 +0000)
commit204d2c03acff4bf3b73cb5d2c9578b50c2aac703
tree1d3459af6eb9916a16799faec9f19d759da71e41
parent957f5feacf2f4c7916e0137ad95d2d9559e06fa4
Introduce emit_frame_chain

The current frame code combines the separate concepts of a frame chain
(saving old FP,LR in a record and pointing new FP to it) and a frame
pointer used to access locals.  Add emit_frame_chain to the aarch64_frame
descriptor and use it in the prolog and epilog code.  For now just
initialize it as before, so generated code is identical.

Also correctly set EXIT_IGNORE_STACK.  The current AArch64 epilog code
restores SP from FP if alloca is used.  If a frame pointer is used but
there is no alloca, SP must remain valid for the epilog to work correctly.

    gcc/
* config/aarch64/aarch64.h (EXIT_IGNORE_STACK): Set if alloca is used.
(aarch64_frame): Add emit_frame_chain boolean.
* config/aarch64/aarch64.c (aarch64_frame_pointer_required)
Move eh_return case to aarch64_layout_frame.
(aarch64_layout_frame): Initialize emit_frame_chain.
(aarch64_expand_prologue): Use emit_frame_chain.

From-SVN: r254114
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.h