aboutsummaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2024-04-10 13:34:21 +0200
committerBernd Edlinger <bernd.edlinger@hotmail.de>2024-04-15 10:22:56 +0200
commita73073dc7f23ab37ae33402fbb38c8314bcbea3e (patch)
tree408e9cb03a4fd3e106e149e4679bf87fc073189d /sim
parentae14cde6fd2c527c407a115fa1684c2002749552 (diff)
downloadbinutils-a73073dc7f23ab37ae33402fbb38c8314bcbea3e.zip
binutils-a73073dc7f23ab37ae33402fbb38c8314bcbea3e.tar.gz
binutils-a73073dc7f23ab37ae33402fbb38c8314bcbea3e.tar.bz2
sim: riscv: Make stack 16-byte aligned
Various gcc test cases fail due to the stack alignment of 16 bytes is expected by gcc, causing issues mostly with vararg functions, e.g. FAIL: gcc.c-torture/execute/nest-align-1.c -O0 execution test FAIL: gcc.c-torture/execute/nest-stdar-1.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-12.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-15.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-16.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-17.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-20.c -O0 execution test FAIL: gcc.c-torture/execute/va-arg-26.c -O0 execution test ... Approved-By: Andrew Burgess <aburgess@redhat.com>
Diffstat (limited to 'sim')
-rw-r--r--sim/riscv/sim-main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sim/riscv/sim-main.c b/sim/riscv/sim-main.c
index ddc7e1d..1ccae45 100644
--- a/sim/riscv/sim-main.c
+++ b/sim/riscv/sim-main.c
@@ -1575,6 +1575,8 @@ initialize_env (SIM_DESC sd, const char * const *argv, const char * const *env)
sp = sp_flat - ((argc + 1 + envc + 1) * sizeof (address_word));
/* Then the argc. */
sp -= sizeof (unsigned_word);
+ /* Align to 16 bytes. */
+ sp = align_down (sp, 16);
/* Set up the regs the libgloss crt0 expects. */
riscv_cpu->a0 = argc;