diff options
author | Alexandre Oliva <oliva@adacore.com> | 2023-12-14 04:50:45 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2023-12-20 05:18:21 -0300 |
commit | 4e0a467302fea56d63b7a6d17f99c0f388960dc7 (patch) | |
tree | 0cdaf393c2c5e6b0b69f02d5ce48e8675155c8b9 /gcc/fortran/options.cc | |
parent | 9fa35dbb901b11d31a897cc88c9258e7cd35b899 (diff) | |
download | gcc-4e0a467302fea56d63b7a6d17f99c0f388960dc7.zip gcc-4e0a467302fea56d63b7a6d17f99c0f388960dc7.tar.gz gcc-4e0a467302fea56d63b7a6d17f99c0f388960dc7.tar.bz2 |
strub: sparc64: unbias the stack address [PR112917]
The stack pointer is biased by 2047 bytes on sparc64, so the range it
delimits is way off. Unbias the addresses returned by
__builtin_stack_address (), so that the strub builtins, inlined or
not, can function correctly. I've considered introducing a new target
macro, but using STACK_POINTER_OFFSET seems safe, and it enables the
register save areas to be scrubbed as well.
Because of the large fixed-size outgoing args area next to the
register save area on sparc, we still need __strub_leave to not
allocate its own frame, otherwise it won't be able to clear part of
the frame it should.
for gcc/ChangeLog
PR middle-end/112917
* builtins.cc (expand_bultin_stack_address): Add
STACK_POINTER_OFFSET.
* doc/extend.texi (__builtin_stack_address): Adjust.
Diffstat (limited to 'gcc/fortran/options.cc')
0 files changed, 0 insertions, 0 deletions