* [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I
@ 2022-10-27 17:24 Jamie Iles
2022-10-27 17:24 ` [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount Jamie Iles
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Jamie Iles @ 2022-10-27 17:24 UTC (permalink / raw)
To: linux-riscv; +Cc: Jamie Iles
This series enables dynamic ftrace support for RV32I bringing it to
parity with RV64I. Most of the work is already there, this is largely
just assembly fixes to handle register sizes, correct handling of the
psABI calling convention and Kconfig change.
Validated with all ftrace boot time self test with qemu for RV32I and
RV64I in addition to real tracing on an RV32I FPGA design.
Jamie Iles (4):
RISC-V: use REG_S/REG_L for mcount
RISC-V: reduce mcount save space on RV32
RISC-V: preserve a1 in mcount
RISC-V: enable dynamic ftrace for RV32I
arch/riscv/Kconfig | 10 ++++-----
arch/riscv/kernel/mcount.S | 44 ++++++++++++++++++++------------------
2 files changed, 28 insertions(+), 26 deletions(-)
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount
2022-10-27 17:24 [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I Jamie Iles
@ 2022-10-27 17:24 ` Jamie Iles
2022-10-28 14:55 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 2/4] RISC-V: reduce mcount save space on RV32 Jamie Iles
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Jamie Iles @ 2022-10-27 17:24 UTC (permalink / raw)
To: linux-riscv; +Cc: Jamie Iles
In preparation for rv32i ftrace support, convert mcount routines to use
native sized loads/stores.
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
---
arch/riscv/kernel/mcount.S | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
index 6d462681c9c0..9cf0904afd6d 100644
--- a/arch/riscv/kernel/mcount.S
+++ b/arch/riscv/kernel/mcount.S
@@ -15,8 +15,8 @@
.macro SAVE_ABI_STATE
addi sp, sp, -16
- sd s0, 0(sp)
- sd ra, 8(sp)
+ REG_S s0, 0(sp)
+ REG_S ra, 8(sp)
addi s0, sp, 16
.endm
@@ -26,22 +26,22 @@
*/
.macro SAVE_RET_ABI_STATE
addi sp, sp, -32
- sd s0, 16(sp)
- sd ra, 24(sp)
- sd a0, 8(sp)
+ REG_S s0, 16(sp)
+ REG_S ra, 24(sp)
+ REG_S a0, 8(sp)
addi s0, sp, 32
.endm
.macro RESTORE_ABI_STATE
- ld ra, 8(sp)
- ld s0, 0(sp)
+ REG_L ra, 8(sp)
+ REG_L s0, 0(sp)
addi sp, sp, 16
.endm
.macro RESTORE_RET_ABI_STATE
- ld ra, 24(sp)
- ld s0, 16(sp)
- ld a0, 8(sp)
+ REG_L ra, 24(sp)
+ REG_L s0, 16(sp)
+ REG_L a0, 8(sp)
addi sp, sp, 32
.endm
@@ -82,16 +82,16 @@ ENTRY(MCOUNT_NAME)
la t4, ftrace_stub
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
la t0, ftrace_graph_return
- ld t1, 0(t0)
+ REG_L t1, 0(t0)
bne t1, t4, do_ftrace_graph_caller
la t3, ftrace_graph_entry
- ld t2, 0(t3)
+ REG_L t2, 0(t3)
la t6, ftrace_graph_entry_stub
bne t2, t6, do_ftrace_graph_caller
#endif
la t3, ftrace_trace_function
- ld t5, 0(t3)
+ REG_L t5, 0(t3)
bne t5, t4, do_trace
ret
@@ -104,7 +104,7 @@ do_ftrace_graph_caller:
addi a0, s0, -8
mv a1, ra
#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
- ld a2, -16(s0)
+ REG_L a2, -16(s0)
#endif
SAVE_ABI_STATE
call prepare_ftrace_return
@@ -117,7 +117,7 @@ do_ftrace_graph_caller:
* (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
*/
do_trace:
- ld a1, -8(s0)
+ REG_L a1, -8(s0)
mv a0, ra
SAVE_ABI_STATE
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/4] RISC-V: reduce mcount save space on RV32
2022-10-27 17:24 [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I Jamie Iles
2022-10-27 17:24 ` [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount Jamie Iles
@ 2022-10-27 17:24 ` Jamie Iles
2022-10-28 14:49 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 3/4] RISC-V: preserve a1 in mcount Jamie Iles
2022-10-27 17:24 ` [PATCH 4/4] RISC-V: enable dynamic ftrace for RV32I Jamie Iles
3 siblings, 1 reply; 9+ messages in thread
From: Jamie Iles @ 2022-10-27 17:24 UTC (permalink / raw)
To: linux-riscv; +Cc: Jamie Iles
For RV32 we can reduce the size of the ABI save+restore state by using
SZREG so that register stores are packed rather than on an 8 byte
boundary.
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
---
arch/riscv/kernel/mcount.S | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
index 9cf0904afd6d..4166909ce7b3 100644
--- a/arch/riscv/kernel/mcount.S
+++ b/arch/riscv/kernel/mcount.S
@@ -15,8 +15,8 @@
.macro SAVE_ABI_STATE
addi sp, sp, -16
- REG_S s0, 0(sp)
- REG_S ra, 8(sp)
+ REG_S s0, 0*SZREG(sp)
+ REG_S ra, 1*SZREG(sp)
addi s0, sp, 16
.endm
@@ -25,24 +25,24 @@
* register if a0 was not saved.
*/
.macro SAVE_RET_ABI_STATE
- addi sp, sp, -32
- REG_S s0, 16(sp)
- REG_S ra, 24(sp)
- REG_S a0, 8(sp)
+ addi sp, sp, -4*SZREG
+ REG_S s0, 2*SZREG(sp)
+ REG_S ra, 3*SZREG(sp)
+ REG_S a0, 1*SZREG(sp)
addi s0, sp, 32
.endm
.macro RESTORE_ABI_STATE
- REG_L ra, 8(sp)
- REG_L s0, 0(sp)
- addi sp, sp, 16
+ REG_L ra, 1*SZREG(sp)
+ REG_L s0, 0*SZREG(sp)
+ addi sp, sp, 2*SZREG
.endm
.macro RESTORE_RET_ABI_STATE
- REG_L ra, 24(sp)
- REG_L s0, 16(sp)
- REG_L a0, 8(sp)
- addi sp, sp, 32
+ REG_L ra, 3*SZREG(sp)
+ REG_L s0, 2*SZREG(sp)
+ REG_L a0, 1*SZREG(sp)
+ addi sp, sp, 4*SZREG
.endm
ENTRY(ftrace_stub)
@@ -101,10 +101,10 @@ ENTRY(MCOUNT_NAME)
* prepare_to_return(&ra_to_caller_of_caller, ra_to_caller)
*/
do_ftrace_graph_caller:
- addi a0, s0, -8
+ addi a0, s0, -SZREG
mv a1, ra
#ifdef HAVE_FUNCTION_GRAPH_FP_TEST
- REG_L a2, -16(s0)
+ REG_L a2, -2*SZREG(s0)
#endif
SAVE_ABI_STATE
call prepare_ftrace_return
@@ -117,7 +117,7 @@ do_ftrace_graph_caller:
* (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
*/
do_trace:
- REG_L a1, -8(s0)
+ REG_L a1, -SZREG(s0)
mv a0, ra
SAVE_ABI_STATE
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/4] RISC-V: preserve a1 in mcount
2022-10-27 17:24 [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I Jamie Iles
2022-10-27 17:24 ` [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount Jamie Iles
2022-10-27 17:24 ` [PATCH 2/4] RISC-V: reduce mcount save space on RV32 Jamie Iles
@ 2022-10-27 17:24 ` Jamie Iles
2022-10-28 14:55 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 4/4] RISC-V: enable dynamic ftrace for RV32I Jamie Iles
3 siblings, 1 reply; 9+ messages in thread
From: Jamie Iles @ 2022-10-27 17:24 UTC (permalink / raw)
To: linux-riscv; +Cc: Jamie Iles
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.
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
---
arch/riscv/kernel/mcount.S | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
index 4166909ce7b3..5aa29509f047 100644
--- a/arch/riscv/kernel/mcount.S
+++ b/arch/riscv/kernel/mcount.S
@@ -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, 32
.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
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/4] RISC-V: enable dynamic ftrace for RV32I
2022-10-27 17:24 [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I Jamie Iles
` (2 preceding siblings ...)
2022-10-27 17:24 ` [PATCH 3/4] RISC-V: preserve a1 in mcount Jamie Iles
@ 2022-10-27 17:24 ` Jamie Iles
3 siblings, 0 replies; 9+ messages in thread
From: Jamie Iles @ 2022-10-27 17:24 UTC (permalink / raw)
To: linux-riscv; +Cc: Jamie Iles
The RISC-V mcount function is now capable of supporting RV32I so make it
available in the kernel config.
Signed-off-by: Jamie Iles <jamie@jamieiles.com>
---
arch/riscv/Kconfig | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
index 6b48a3ae9843..5ae4f7ce2a05 100644
--- a/arch/riscv/Kconfig
+++ b/arch/riscv/Kconfig
@@ -129,6 +129,11 @@ config RISCV
select TRACE_IRQFLAGS_SUPPORT
select UACCESS_MEMCPY if !MMU
select ZONE_DMA32 if 64BIT
+ select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
+ select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
+ select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
+ select HAVE_FUNCTION_GRAPH_TRACER
+ select HAVE_FUNCTION_TRACER if !XIP_KERNEL
config ARCH_MMAP_RND_BITS_MIN
default 18 if 64BIT
@@ -274,11 +279,6 @@ config ARCH_RV64I
bool "RV64I"
select 64BIT
select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
- select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && $(cc-option,-fpatchable-function-entry=8)
- select HAVE_DYNAMIC_FTRACE_WITH_REGS if HAVE_DYNAMIC_FTRACE
- select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
- select HAVE_FUNCTION_GRAPH_TRACER
- select HAVE_FUNCTION_TRACER if !XIP_KERNEL
select SWIOTLB if MMU
endchoice
--
2.34.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] RISC-V: reduce mcount save space on RV32
2022-10-27 17:24 ` [PATCH 2/4] RISC-V: reduce mcount save space on RV32 Jamie Iles
@ 2022-10-28 14:49 ` Andrew Jones
2022-10-28 15:56 ` Andrew Jones
0 siblings, 1 reply; 9+ messages in thread
From: Andrew Jones @ 2022-10-28 14:49 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-riscv
On Thu, Oct 27, 2022 at 06:24:33PM +0100, Jamie Iles wrote:
> For RV32 we can reduce the size of the ABI save+restore state by using
> SZREG so that register stores are packed rather than on an 8 byte
> boundary.
>
> Signed-off-by: Jamie Iles <jamie@jamieiles.com>
> ---
> arch/riscv/kernel/mcount.S | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
> index 9cf0904afd6d..4166909ce7b3 100644
> --- a/arch/riscv/kernel/mcount.S
> +++ b/arch/riscv/kernel/mcount.S
> @@ -15,8 +15,8 @@
>
> .macro SAVE_ABI_STATE
> addi sp, sp, -16
> - REG_S s0, 0(sp)
> - REG_S ra, 8(sp)
> + REG_S s0, 0*SZREG(sp)
> + REG_S ra, 1*SZREG(sp)
> addi s0, sp, 16
> .endm
Shouldn't we only be adjusting sp by 2*SZREG?. Indeed RESTORE_ABI_STATE
below is getting modified that way.
>
> @@ -25,24 +25,24 @@
> * register if a0 was not saved.
> */
> .macro SAVE_RET_ABI_STATE
> - addi sp, sp, -32
> - REG_S s0, 16(sp)
> - REG_S ra, 24(sp)
> - REG_S a0, 8(sp)
> + addi sp, sp, -4*SZREG
> + REG_S s0, 2*SZREG(sp)
> + REG_S ra, 3*SZREG(sp)
> + REG_S a0, 1*SZREG(sp)
> addi s0, sp, 32
This should be 'addi s0, sp, -4*SZREG'
> .endm
>
> .macro RESTORE_ABI_STATE
> - REG_L ra, 8(sp)
> - REG_L s0, 0(sp)
> - addi sp, sp, 16
> + REG_L ra, 1*SZREG(sp)
> + REG_L s0, 0*SZREG(sp)
> + addi sp, sp, 2*SZREG
> .endm
>
> .macro RESTORE_RET_ABI_STATE
> - REG_L ra, 24(sp)
> - REG_L s0, 16(sp)
> - REG_L a0, 8(sp)
> - addi sp, sp, 32
> + REG_L ra, 3*SZREG(sp)
> + REG_L s0, 2*SZREG(sp)
> + REG_L a0, 1*SZREG(sp)
> + addi sp, sp, 4*SZREG
> .endm
>
> ENTRY(ftrace_stub)
> @@ -101,10 +101,10 @@ ENTRY(MCOUNT_NAME)
> * prepare_to_return(&ra_to_caller_of_caller, ra_to_caller)
> */
> do_ftrace_graph_caller:
> - addi a0, s0, -8
> + addi a0, s0, -SZREG
> mv a1, ra
> #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
> - REG_L a2, -16(s0)
> + REG_L a2, -2*SZREG(s0)
> #endif
> SAVE_ABI_STATE
> call prepare_ftrace_return
> @@ -117,7 +117,7 @@ do_ftrace_graph_caller:
> * (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
> */
> do_trace:
> - REG_L a1, -8(s0)
> + REG_L a1, -SZREG(s0)
> mv a0, ra
>
> SAVE_ABI_STATE
> --
> 2.34.1
>
Thanks,
drew
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount
2022-10-27 17:24 ` [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount Jamie Iles
@ 2022-10-28 14:55 ` Andrew Jones
0 siblings, 0 replies; 9+ messages in thread
From: Andrew Jones @ 2022-10-28 14:55 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-riscv
On Thu, Oct 27, 2022 at 06:24:32PM +0100, Jamie Iles wrote:
> In preparation for rv32i ftrace support, convert mcount routines to use
> native sized loads/stores.
>
> Signed-off-by: Jamie Iles <jamie@jamieiles.com>
> ---
> arch/riscv/kernel/mcount.S | 30 +++++++++++++++---------------
> 1 file changed, 15 insertions(+), 15 deletions(-)
>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] RISC-V: preserve a1 in mcount
2022-10-27 17:24 ` [PATCH 3/4] RISC-V: preserve a1 in mcount Jamie Iles
@ 2022-10-28 14:55 ` Andrew Jones
0 siblings, 0 replies; 9+ messages in thread
From: Andrew Jones @ 2022-10-28 14:55 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-riscv
On Thu, Oct 27, 2022 at 06:24:34PM +0100, Jamie Iles wrote:
> 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.
>
> Signed-off-by: Jamie Iles <jamie@jamieiles.com>
> ---
> arch/riscv/kernel/mcount.S | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
> index 4166909ce7b3..5aa29509f047 100644
> --- a/arch/riscv/kernel/mcount.S
> +++ b/arch/riscv/kernel/mcount.S
> @@ -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, 32
> .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
>
> --
> 2.34.1
>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/4] RISC-V: reduce mcount save space on RV32
2022-10-28 14:49 ` Andrew Jones
@ 2022-10-28 15:56 ` Andrew Jones
0 siblings, 0 replies; 9+ messages in thread
From: Andrew Jones @ 2022-10-28 15:56 UTC (permalink / raw)
To: Jamie Iles; +Cc: linux-riscv
On Fri, Oct 28, 2022 at 04:49:25PM +0200, Andrew Jones wrote:
> On Thu, Oct 27, 2022 at 06:24:33PM +0100, Jamie Iles wrote:
> > For RV32 we can reduce the size of the ABI save+restore state by using
> > SZREG so that register stores are packed rather than on an 8 byte
> > boundary.
> >
> > Signed-off-by: Jamie Iles <jamie@jamieiles.com>
> > ---
> > arch/riscv/kernel/mcount.S | 32 ++++++++++++++++----------------
> > 1 file changed, 16 insertions(+), 16 deletions(-)
> >
> > diff --git a/arch/riscv/kernel/mcount.S b/arch/riscv/kernel/mcount.S
> > index 9cf0904afd6d..4166909ce7b3 100644
> > --- a/arch/riscv/kernel/mcount.S
> > +++ b/arch/riscv/kernel/mcount.S
> > @@ -15,8 +15,8 @@
> >
> > .macro SAVE_ABI_STATE
> > addi sp, sp, -16
> > - REG_S s0, 0(sp)
> > - REG_S ra, 8(sp)
> > + REG_S s0, 0*SZREG(sp)
> > + REG_S ra, 1*SZREG(sp)
> > addi s0, sp, 16
> > .endm
>
> Shouldn't we only be adjusting sp by 2*SZREG?. Indeed RESTORE_ABI_STATE
> below is getting modified that way.
It just occurred to me that leaving this adjustment as 16 is correct,
since we need to maintain 16-byte alignment, so the issue is below
in RESTORE_ABI_STATE where it isn't adding back 16.
>
> >
> > @@ -25,24 +25,24 @@
> > * register if a0 was not saved.
> > */
> > .macro SAVE_RET_ABI_STATE
> > - addi sp, sp, -32
> > - REG_S s0, 16(sp)
> > - REG_S ra, 24(sp)
> > - REG_S a0, 8(sp)
> > + addi sp, sp, -4*SZREG
> > + REG_S s0, 2*SZREG(sp)
> > + REG_S ra, 3*SZREG(sp)
> > + REG_S a0, 1*SZREG(sp)
> > addi s0, sp, 32
>
> This should be 'addi s0, sp, -4*SZREG'
And here I made copy+paste mistake, it should of course be 4*SZREG.
Thanks,
drew
>
> > .endm
> >
> > .macro RESTORE_ABI_STATE
> > - REG_L ra, 8(sp)
> > - REG_L s0, 0(sp)
> > - addi sp, sp, 16
> > + REG_L ra, 1*SZREG(sp)
> > + REG_L s0, 0*SZREG(sp)
> > + addi sp, sp, 2*SZREG
> > .endm
> >
> > .macro RESTORE_RET_ABI_STATE
> > - REG_L ra, 24(sp)
> > - REG_L s0, 16(sp)
> > - REG_L a0, 8(sp)
> > - addi sp, sp, 32
> > + REG_L ra, 3*SZREG(sp)
> > + REG_L s0, 2*SZREG(sp)
> > + REG_L a0, 1*SZREG(sp)
> > + addi sp, sp, 4*SZREG
> > .endm
> >
> > ENTRY(ftrace_stub)
> > @@ -101,10 +101,10 @@ ENTRY(MCOUNT_NAME)
> > * prepare_to_return(&ra_to_caller_of_caller, ra_to_caller)
> > */
> > do_ftrace_graph_caller:
> > - addi a0, s0, -8
> > + addi a0, s0, -SZREG
> > mv a1, ra
> > #ifdef HAVE_FUNCTION_GRAPH_FP_TEST
> > - REG_L a2, -16(s0)
> > + REG_L a2, -2*SZREG(s0)
> > #endif
> > SAVE_ABI_STATE
> > call prepare_ftrace_return
> > @@ -117,7 +117,7 @@ do_ftrace_graph_caller:
> > * (*ftrace_trace_function)(ra_to_caller, ra_to_caller_of_caller)
> > */
> > do_trace:
> > - REG_L a1, -8(s0)
> > + REG_L a1, -SZREG(s0)
> > mv a0, ra
> >
> > SAVE_ABI_STATE
> > --
> > 2.34.1
> >
>
> Thanks,
> drew
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2022-10-28 15:59 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-27 17:24 [PATCH 0/4] RISC-V: Dynamic ftrace support for RV32I Jamie Iles
2022-10-27 17:24 ` [PATCH 1/4] RISC-V: use REG_S/REG_L for mcount Jamie Iles
2022-10-28 14:55 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 2/4] RISC-V: reduce mcount save space on RV32 Jamie Iles
2022-10-28 14:49 ` Andrew Jones
2022-10-28 15:56 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 3/4] RISC-V: preserve a1 in mcount Jamie Iles
2022-10-28 14:55 ` Andrew Jones
2022-10-27 17:24 ` [PATCH 4/4] RISC-V: enable dynamic ftrace for RV32I Jamie Iles
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 NNTP newsgroup(s).