[OpenBIOS] [PATCHv2 00/25] Implement load/init-program as per IEEE-1275 specification

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Thu Sep 8 09:00:39 CEST 2016


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>

v2:
- Fix missing patch for XCOFF loader conversion
- Switch aout_init_program() to use memmove()
- Fix minor typo in aout_init_program() comment


Mark Cave-Ayland (25):
  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
  xcoff: 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 +++
 include/libopenbios/xcoff_load.h    |    2 +-
 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                  |   58 +++++++++---------
 libopenbios/xcoff_load.c            |  111 +++++++++++++++++++++++++++++++----
 29 files changed, 526 insertions(+), 409 deletions(-)

-- 
1.7.10.4




More information about the OpenBIOS mailing list