From dcde37b854c358124a842b81babe9f7d2001df6a Mon Sep 17 00:00:00 2001 From: Pierre Wilke <pierre.wilke@centralesupelec.fr> Date: Tue, 24 Mar 2020 18:59:32 +0100 Subject: [PATCH] fix load_int_arg problem causing segfault in qemu --- src/riscv.ml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/riscv.ml b/src/riscv.ml index ca9dd36..185fd78 100644 --- a/src/riscv.ml +++ b/src/riscv.ml @@ -163,9 +163,11 @@ let riscv_load_args oc : unit res = List.map (fun i -> [LConst(reg_a0, i); LCall("load_int_arg"); + LBranch(Rceq, reg_a0, reg_zero, Printf.sprintf "riscv_load_arg_%d" i); LCall("atoi"); LStore(reg_fp, - !Archi.wordsize*i, - reg_a0, !Archi.wordsize) + reg_a0, !Archi.wordsize); + LLabel(Printf.sprintf "riscv_load_arg_%d" i); ]) in (* for each arg in [1..8] ld a{arg-1}, -8*arg(fp) @@ -181,6 +183,9 @@ let riscv_fun_load_arg oc () = ("load_int_arg",{ ltlfunargs = 0; (* + + *( fp + a0 * wordsize + 8) + t0 <- Archi.wordsize (in this example 8) mul a0, a0, t0 add t0, fp, a0 -- GitLab