]> git.baikalelectronics.ru Git - uboot.git/commit
riscv: semihosting: replace inline assembly with assembly file
authorAndre Przywara <andre.przywara@arm.com>
Tue, 7 Feb 2023 15:21:05 +0000 (15:21 +0000)
committerTom Rini <trini@konsulko.com>
Tue, 7 Mar 2023 00:24:34 +0000 (19:24 -0500)
commitd5c41ac163f45759475c6ca14a5b97f6b79fe5c7
tree7160561793bbaf2b5a1a27a5fbed1c6f36eede87
parent4d83d5a0df36239366eeddeae67fed48dbb40ab8
riscv: semihosting: replace inline assembly with assembly file

So far we used inline assembly to inject the actual instruction that
triggers the semihosting service. While this sounds elegant, as it's
really only about a few instructions, it has some serious downsides:
- We need some barriers in place to force the compiler to issue writes
  to a data structure before issuing the trap instruction.
- We need to convince the compiler to actually fill the structures that
  we use pointers to.
- We need a memory clobber to avoid the compiler caching the data in
  those structures, when semihosting writes data back.
- We need register arguments to make sure the function ID and the
  pointer land in the right registers.

This is all doable, but fragile and somewhat cumbersome. Since we now
have a separate function in an extra file anyway, we can do away with
all the magic and just write that in an actual assembler.
This is much more readable and robust.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Sean Anderson <sean.anderson@seco.com>
arch/riscv/lib/semihosting.S [new file with mode: 0644]
arch/riscv/lib/semihosting.c [deleted file]