[OpenBIOS] [PATCH 00/24] Implement load/init-program as per IEEE-1275 specification
Mark Cave-Ayland
mark.cave-ayland at ilande.co.uk
Thu Sep 8 08:54:23 CEST 2016
On 05/09/16 23:01, Mark Cave-Ayland wrote:
> The current implementation of load/init-program has some fairly big hacks in order
> to work around the fact that we don't have per-architecture CPU contexts. An
> example of this is chained bootloaders used for SPARC64 which use Forth to alter
> the saved CPU context so that control is returned to a different address by
> directly executing init-program before return.
>
> With all architectures now able to save/restore CPU contexts, these hacks can now
> be removed and init-program changed to be a single per-architecture implementation
> along with some associated tidy-ups.
>
> I've given this a fairly thorough testing across all my OpenBIOS test images and
> as far as I can tell doesn't cause any regressions.
>
> Requires the previously posted SPARC32 and SPARC64 context patches to be applied
> first.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland at ilande.co.uk>
>
> Mark Cave-Ayland (24):
> libopenbios: rename saved-program-state to load-state
> libopenbios: introduce arch_init_program() in preparation for
> per-arch implementations
> all: create client program context once at startup
> client.fs: add load-state param variable
> amd64: introduce arch_init_program() implementation
> ppc: introduce arch_init_program() implementation
> SPARC32: introduce arch_init_program() implementation
> SPARC64: introduce arch_init_program() implementation
> x86: introduce arch_init_program() implementation
> libopenbios: add context wrappers for Fcode/Forth payloads
> SPARC32: move Forth/FCode over to use new context wrappers
> SPARC64: move Forth/FCode over to use new context wrappers
> x86: move Forth/FCode over to use new context wrappers
> elf: set boot notes in elf_load() if supplied
> SPARC64: remove start_client_image()
> libopenbios: move prototypes for start_elf() and __context into
> libopenbios
> libopenbios: move go() function into libopenbios
> aout: implement load/init-program as per IEEE-1275 specification
> bootcode: implement load/init-program as per IEEE-1275 specification
> elf: implement load/init-program as per IEEE-1275 specification
> fcode: implement load/init-program as per IEEE-1275 specification
> forth: implement load/init-program as per IEEE-1275 specification
> libopenbios: remove conditional logic from go()
> libopenbios: remove address parameter from start_elf()
>
> arch/amd64/context.c | 51 ++++++++++++++++++++-----
> arch/ppc/qemu/context.c | 67 ++++++++++++++++++++++-----------
> arch/ppc/qemu/init.c | 14 ++-----
> arch/sparc32/boot.c | 71 ++++-------------------------------
> arch/sparc32/boot.h | 6 +--
> arch/sparc32/context.c | 39 +++++++++++++++----
> arch/sparc32/openbios.c | 2 +-
> arch/sparc64/boot.c | 54 +-------------------------
> arch/sparc64/boot.h | 6 ---
> arch/sparc64/context.c | 68 ++++++++++++++++++++-------------
> arch/sparc64/openbios.c | 1 -
> arch/unix/boot.c | 13 +++++++
> arch/x86/boot.c | 53 +-------------------------
> arch/x86/boot.h | 6 +--
> arch/x86/context.c | 52 ++++++++++++++++++++-----
> arch/x86/openbios.c | 1 -
> forth/debugging/client.fs | 30 ++++++++-------
> include/libopenbios/bootcode_load.h | 2 +
> include/libopenbios/initprogram.h | 9 +++++
> libopenbios/aout_load.c | 48 +++++++++++------------
> libopenbios/bootcode_load.c | 33 +++++++++++++---
> libopenbios/elf_load.c | 28 +++++++-------
> libopenbios/fcode_load.c | 32 ++++++----------
> libopenbios/forth_load.c | 30 +++++++--------
> libopenbios/init.c | 3 ++
> libopenbios/initprogram.c | 45 ++++++++++++++++++++++
> libopenbios/load.c | 47 ++++++++---------------
> libopenbios/xcoff_load.c | 8 ++--
> 28 files changed, 417 insertions(+), 402 deletions(-)
During more thorough testing yesterday evening, I noticed that I'd
managed to miss out the XCOFF conversion from this patchset which broke
Darwin/OS X.
v2 to follow shortly.
ATB,
Mark.
More information about the OpenBIOS
mailing list