Unverified Commit dc58a24d authored by Jamie Iles's avatar Jamie Iles Committed by Palmer Dabbelt
Browse files

RISC-V: preserve a1 in mcount



The RISC-V ELF psABI states that both a0 and a1 are used for return
values so we should preserve them both in return_to_handler.  This is
especially important for RV32 for functions returning a 64-bit quantity
otherwise the return value can be corrupted and undefined behaviour
results.

Reviewed-by: default avatarAndrew Jones <ajones@ventanamicro.com>
Signed-off-by: default avatarJamie Iles <jamie@jamieiles.com>
Link: https://lore.kernel.org/r/20221115200832.706370-4-jamie@jamieiles.com


Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 3bd7743f
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
	REG_S	s0, 2*SZREG(sp)
	REG_S	ra, 3*SZREG(sp)
	REG_S	a0, 1*SZREG(sp)
	REG_S	a1, 0*SZREG(sp)
	addi	s0, sp, 4*SZREG
	.endm

@@ -42,6 +43,7 @@
	REG_L	ra, 3*SZREG(sp)
	REG_L	s0, 2*SZREG(sp)
	REG_L	a0, 1*SZREG(sp)
	REG_L	a1, 0*SZREG(sp)
	addi	sp, sp, 4*SZREG
	.endm

@@ -71,9 +73,9 @@ ENTRY(return_to_handler)
	mv	a0, t6
#endif
	call	ftrace_return_to_handler
	mv	a1, a0
	mv	a2, a0
	RESTORE_RET_ABI_STATE
	jalr	a1
	jalr	a2
ENDPROC(return_to_handler)
#endif