On 07.07.2023 11:12, Oleksii wrote: > On Thu, 2023-07-06 at 13:18 +0200, Jan Beulich wrote: >> On 19.06.2023 15:34, Oleksii Kurochko wrote: >>> --- a/xen/arch/riscv/riscv64/head.S >>> +++ b/xen/arch/riscv/riscv64/head.S >>> @@ -29,6 +29,8 @@ ENTRY(start) >>> >>> jal reset_stack >>> >>> + jal calc_phys_offset >>> + >>> tail start_xen >>> >>> .section .text, "ax", %progbits >> >> Since you call a C function, the code to save/restore a0/a1 needs to >> move here (from patch 4). > Thanks. It makes sense. > It would be better to move save/restore a0/a1 ( from patch 4 )code > here. > > The only one reason I didn't do that before that calc_phys_offset > doesn't touch that and it is guaranteed that it will not ( as it > doesn't have arguments )
How does a function not having parameters guarantee that registers used for parameter passing aren't touched? Inside a function, the compiler is free to use argument-passing registers just like other temporary ones; their values don't need preserving, from all I know (otherwise the RISC-V ABI would be different to all other ABIs I know of). Jan