[POWER10] __morestack calls from pcrel code
commitcd6ca96f5d530e4ee07b65ac8b075119ba5bb035
authorAlan Modra <amodra@gmail.com>
Tue, 29 Jun 2021 04:01:45 +0000 (29 13:31 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 15 Jul 2021 05:57:09 +0000 (15 15:27 +0930)
tree5656cb884387d4b3aae4d1aec237dbceaa1bfaa3
parent4f3b383cf8825197e714a4a21852eca071f8e67e
[POWER10] __morestack calls from pcrel code

Compiling gcc/testsuite/gcc.dg/split-*.c and others with -mcpu=power10
and linking with a non-pcrel libgcc results in crashes due to the
power10 pcrel code not having r2 set for the generic-morestack.c
functions called from __morestack.  There is also a problem when
non-pcrel code calls a pcrel libgcc.  See the patch comments.

A similar situation theoretically occurs with ELFv1 multi-toc
executables, when __morestack might be located in a different toc
group to its caller.  This patch makes no attempt to fix that, since
the gold linker does not support multi-toc (gold is needed for proper
support of -fsplit-stack code) nor does gcc emit __morestack calls
that support multi-toc.

* config/rs6000/morestack.S (R2_SAVE): Define.
(__morestack): Save and restore r2.  Set up r2 for called
functions.
libgcc/config/rs6000/morestack.S