public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/111973] New: [RISC-V] attribute interrupt yields unaligned stack access
@ 2023-10-25 8:24 jonathan.jonsson at gaisler dot com
0 siblings, 0 replies; only message in thread
From: jonathan.jonsson at gaisler dot com @ 2023-10-25 8:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111973
Bug ID: 111973
Summary: [RISC-V] attribute interrupt yields unaligned stack
access
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: jonathan.jonsson at gaisler dot com
Target Milestone: ---
Created attachment 56201
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56201&action=edit
cpp code to reproduce the issue
When adding the interrupt attribute to a function such as this:
void vstvec_ssi() __attribute__((interrupt("supervisor")));
The code generated for the interrupt attribute is corrupted by an unintended
unaligned access. I didn't have this issue in gcc-13. The generated assembly
first saves some of the float registers and then when the integer registers are
about to be saved the offset for the stack pointer gets unaligned. This does
not occur when I don't call external functions.
In relation to all of this, a question I have is if it is possible to tell GCC
to not generate code to save float and vector registers on an interrupt?
4c: 08f13027 fsd fa5,128(sp) //Aligned
50: 07013c27 fsd fa6,120(sp) //Aligned
54: 16512e23 sw t0,380(sp) //Aligned
58: 16613a23 sd t1,372(sp) //No longer aligned
5c: 16713623 sd t2,364(sp)
Command line:
riscv64-unknown-elf-g++ -mcmodel=medany -static -std=gnu++20 -fno-common
-fno-builtin march=rv64gvh_zba_zbb_zbc_zbs_zfh_zbkb_zicsr_zifencei_zicbom -O3
-ggdb -mabi=lp64 -Wcast-align -Wstack-usage=960KB -Wsign-compare
-Wmaybe-uninitialized -Wuninitialized -Wno-comment -save-temps -c -o
gcc_bug_reproduce.o gcc_bug_reproduce.cpp
GCC version:
Using built-in specs.
COLLECT_GCC=riscv64-unknown-elf-g++
COLLECT_LTO_WRAPPER=/gsl/tools/riscv-gnu-toolchain/bin/../lib/gcc/riscv64-unknown-elf/14.0.0/lto-wrapper
Target: riscv64-unknown-elf
Configured with:
/tmp/riscv-gnu-toolchain-temp/riscv-gnu-toolchain/gcc/configure
--target=riscv64-unknown-elf --prefix=/tmp/riscv-gnu-toolchain --disable-shared
--disable-threads --enable-languages=c,c++ --with-pkgversion=g0fc13e8c0e3
--with-system-zlib --enable-tls --with-newlib
--with-sysroot=/tmp/riscv-gnu-toolchain/riscv64-unknown-elf
--with-native-system-header-dir=/include --disable-libmudflap --disable-libssp
--disable-libquadmath --disable-libgomp --disable-nls
--disable-tm-clone-registry --src=.././gcc --enable-multilib --with-abi=lp64d
--with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=20191213
'CFLAGS_FOR_TARGET=-Os -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-Os
-mcmodel=medlow'
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 14.0.0 20231024 (experimental) (g0fc13e8c0e3)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-10-25 8:24 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-10-25 8:24 [Bug target/111973] New: [RISC-V] attribute interrupt yields unaligned stack access jonathan.jonsson at gaisler dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).