From eda979e0efcebc2d5a125a36dea0b7288cb62e10 Mon Sep 17 00:00:00 2001 From: Jaby Date: Sun, 4 Dec 2022 04:55:53 +0100 Subject: [PATCH] Introduce Overlay Header and LBAs --- include/PSX/Overlay/overlay.hpp | 13 +++++++++++++ include/PSX/Overlay/overlay_declaration.hpp | 16 ++++++++++++++++ src/Tools/mkoverlay/src/creator/ldscript.rs | 2 ++ 3 files changed, 31 insertions(+) create mode 100644 include/PSX/Overlay/overlay.hpp create mode 100644 include/PSX/Overlay/overlay_declaration.hpp diff --git a/include/PSX/Overlay/overlay.hpp b/include/PSX/Overlay/overlay.hpp new file mode 100644 index 00000000..c1433e30 --- /dev/null +++ b/include/PSX/Overlay/overlay.hpp @@ -0,0 +1,13 @@ +#ifndef __JABYENGINE_OVERLAY__H__ +#define __JABYENGINE_OVERLAY__H__ +#include "../../stdint.h" + +typedef struct __attribute__((packed)) { + void (*execute)(); +} OverlayHeader; + +typedef struct __attribute__((packed)) { + uint16_t lba; + uint16_t size; +} OverlayLBA; +#endif //!__JABYENGINE_OVERLAY__H__ \ No newline at end of file diff --git a/include/PSX/Overlay/overlay_declaration.hpp b/include/PSX/Overlay/overlay_declaration.hpp new file mode 100644 index 00000000..3a853b11 --- /dev/null +++ b/include/PSX/Overlay/overlay_declaration.hpp @@ -0,0 +1,16 @@ +#ifndef __JABYENGINE_OVERLAY_DECLARATION__H__ +#define __JABYENGINE_OVERLAY_DECLARATION__H__ + +// No include here because this header should be included in a namespace and we don't want multiple namespace definitions of OverlayHeader and OverlayLBA + +extern const OverlayHeader overlay_header; +extern const OverlayLBA overlay_lba[]; + +#define __declare_overlay_header(function) \ +[[gnu::used]] \ +const OverlayHeader __section(".header") overlay_header = {.execute = &function}; + +#define __declare_overlay_lbas(...) \ +[[gnu::used]] \ +const OverlayLBA __section(".header.lbas") overlay_lba[] = {__VA_ARGS__}; +#endif //!__JABYENGINE_OVERLAY_DECLARATION__H__ \ No newline at end of file diff --git a/src/Tools/mkoverlay/src/creator/ldscript.rs b/src/Tools/mkoverlay/src/creator/ldscript.rs index aa5ebf02..7207471b 100644 --- a/src/Tools/mkoverlay/src/creator/ldscript.rs +++ b/src/Tools/mkoverlay/src/creator/ldscript.rs @@ -38,6 +38,8 @@ pub fn write(output: &mut Output, overlay_desc: &Vec) -> Result<(), writeln!(output, "\t\t.{} {{", section.name)?; writeln!(output, "\t\t\t__{}_start = .;", section.name)?; section.file_pattern.iter().try_for_each(|patr| writeln!(output, "\t\t\tKEEP({}(.header))", patr))?; + writeln!(output, "\t\t\t__{}_lbas = .;", section.name)?; + section.file_pattern.iter().try_for_each(|patr| writeln!(output, "\t\t\tKEEP({}(.header.lbas))", patr))?; writeln!(output, "\t\t\t__{}_ctor = .;", section.name)?; for section_type in [".text.startup._GLOBAL__*", ".ctors", ".text.*", ".rodata*", ".sdata*", ".data*", ".sbss*", ".bss*"] {