On Tue, 14 Jan 2020 at 06:29, Benjamin Herrenschmidt <b...@kernel.crashing.org> wrote: > > Hi Folks ! > > So I started "porting" over (read: copying) the arm semihosting code to > ppc to mimmic what Keith did for risv (mostly for picolibc support). > > I noticed that the bulk of arm-semi.c (or riscv-semi.c) is trivially > made completely generic by doing a couple of changes:
Note that semihosting is not a "here's a handy QEMU feature" thing. It's an architecture-specific API and ABI, which should be defined somewhere in a standard external to QEMU. You need to start by having a definition for PPC of what semihosting is. If you're starting from scratch there, there are some important things you should do differently to Arm -- there is no benefit to repeating the mistakes of API definition that we made! Most notably, you want to specify and require that any unrecognized semihosting call function fails in a clean and detectable way; you also should have a semihosting function for "ask for a feature bit mask" so you don't need the silly magic-filename approach Arm had to go for. You also want to standardize what the errno values are, which Arm forgot to do and which makes the errno handling in the spec pretty useless. TLDR: don't start by writing code, start by writing the *API/ABI spec*. I tried to push the RISCV folks in this direction as well. thanks -- PMM