Prepare for supporting LBAs in persitent code
This commit is contained in:
parent
5bc0b375c5
commit
647601d993
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef __JABYENGINE_AUTO_LBA_HPP__
|
||||||
|
#define __JABYENGINE_AUTO_LBA_HPP__
|
||||||
|
#include "../../stdint.h"
|
||||||
|
|
||||||
|
namespace JabyEngine {
|
||||||
|
#define __jabyengine_start_lba_request
|
||||||
|
#define __jabyengine_request_lba_for(name, file) name
|
||||||
|
#define __jabyengine_end_lba_request EndOfRequest
|
||||||
|
|
||||||
|
struct __attribute__((packed)) AutoLBAEntry {
|
||||||
|
uint16_t lba;
|
||||||
|
uint16_t size_words;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //!__JABYENGINE_AUTO_LBA_HPP__
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef __JABYENGINE_AUTO_LBA_DECLARATION_HPP__
|
||||||
|
#define __JABYENGINE_AUTO_LBA_DECLARATION_HPP__
|
||||||
|
|
||||||
|
extern const JabyEngine::AutoLBAEntry overlay_lba[];
|
||||||
|
|
||||||
|
#define __declare_lba_header(enum_struct) \
|
||||||
|
[[gnu::used]] \
|
||||||
|
const JabyEngine::AutoLBAEntry __section(".header.lbas") overlay_lba[static_cast<int>(enum_struct::EndOfRequest)] = {0}
|
||||||
|
#endif //!__JABYENGINE_AUTO_LBA_DECLARATION_HPP__
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef __JABYENGINE_OVERLAY__HPP__
|
#ifndef __JABYENGINE_OVERLAY__HPP__
|
||||||
#define __JABYENGINE_OVERLAY__HPP__
|
#define __JABYENGINE_OVERLAY__HPP__
|
||||||
#include "../../stdint.h"
|
#include "../AutoLBA/auto_lba.hpp"
|
||||||
|
|
||||||
namespace JabyEngine {
|
namespace JabyEngine {
|
||||||
struct __attribute__((packed)) OverlayHeader {
|
struct __attribute__((packed)) OverlayHeader {
|
||||||
|
@ -8,10 +8,6 @@ namespace JabyEngine {
|
||||||
uint16_t lba_size; //< The size of the OverlayLBA section
|
uint16_t lba_size; //< The size of the OverlayLBA section
|
||||||
};
|
};
|
||||||
|
|
||||||
// Maybe encode attributes like "isLZ4" into size parameter
|
typedef AutoLBAEntry OverlayLBA;
|
||||||
struct __attribute__((packed)) OverlayLBA {
|
|
||||||
uint16_t lba;
|
|
||||||
uint16_t size_words;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
#endif //!__JABYENGINE_OVERLAY__HPP__
|
#endif //!__JABYENGINE_OVERLAY__HPP__
|
|
@ -3,12 +3,11 @@
|
||||||
|
|
||||||
// No include here because this header should be included in a namespace and we don't want multiple namespace definitions of OverlayHeader and OverlayLBA
|
// No include here because this header should be included in a namespace and we don't want multiple namespace definitions of OverlayHeader and OverlayLBA
|
||||||
|
|
||||||
|
#include "../AutoLBA/auto_lba_declaration.hpp"
|
||||||
extern const JabyEngine::OverlayHeader overlay_header;
|
extern const JabyEngine::OverlayHeader overlay_header;
|
||||||
extern const JabyEngine::OverlayLBA overlay_lba[];
|
|
||||||
|
|
||||||
#define __declare_overlay_header(function, enum_struct) \
|
#define __declare_overlay_header(function, enum_struct) \
|
||||||
|
__declare_lba_header(enum_struct); \
|
||||||
[[gnu::used]] \
|
[[gnu::used]] \
|
||||||
const JabyEngine::OverlayHeader __section(".header") overlay_header = {.execute = &function, .lba_size = static_cast<uint16_t>(enum_struct::EndOfRequest)}; \
|
const JabyEngine::OverlayHeader __section(".header") overlay_header = {.execute = &function, .lba_size = static_cast<uint16_t>(enum_struct::EndOfRequest)};
|
||||||
[[gnu::used]] \
|
|
||||||
const JabyEngine::OverlayLBA __section(".header.lbas") overlay_lba[static_cast<int>(enum_struct::EndOfRequest)] = {0}
|
|
||||||
#endif //!__JABYENGINE_OVERLAY_DECLARATION__HPP__
|
#endif //!__JABYENGINE_OVERLAY_DECLARATION__HPP__
|
|
@ -1,8 +0,0 @@
|
||||||
#ifndef __JABYENGINE_OVERLAY_LBA__HPP__
|
|
||||||
#define __JABYENGINE_OVERLAY_LBA__HPP__
|
|
||||||
|
|
||||||
#define __jabyengine_start_lba_request
|
|
||||||
#define __jabyengine_request_lba_for(name, file) name
|
|
||||||
#define __jabyengine_end_lba_request EndOfRequest
|
|
||||||
|
|
||||||
#endif //!__JABYENGINE_OVERLAY_LBA__HPP__
|
|
19
lib/psexe.ld
19
lib/psexe.ld
|
@ -44,9 +44,10 @@ __sp = __ram_top - 0x100;
|
||||||
__dcache = ORIGIN(dcache);
|
__dcache = ORIGIN(dcache);
|
||||||
__dcache_top = ORIGIN(dcache) + LENGTH(dcache);
|
__dcache_top = ORIGIN(dcache) + LENGTH(dcache);
|
||||||
|
|
||||||
__bss_len = (__bss_end - __bss_start);
|
__bss_len = (__bss_end - __bss_start);
|
||||||
__ftext_len = (__ftext_end - __ftext_start);
|
__ftext_len = (__ftext_end - __ftext_start);
|
||||||
__fdata_len = (__planschi_end - __fdata_start);
|
__fdata_len = (__planschi_end - __fdata_start);
|
||||||
|
__persistent_lbas_len = (__persistent_lbas_end - __persistent_lbas_start);
|
||||||
|
|
||||||
__stack_start = ORIGIN(ram) + LENGTH(ram);
|
__stack_start = ORIGIN(ram) + LENGTH(ram);
|
||||||
|
|
||||||
|
@ -120,7 +121,7 @@ SECTIONS {
|
||||||
LONG(TLOAD_ADDR);
|
LONG(TLOAD_ADDR);
|
||||||
|
|
||||||
/* 0x001C - 0x001F : size, in bytes, of the "text" section. */
|
/* 0x001C - 0x001F : size, in bytes, of the "text" section. */
|
||||||
LONG(__ftext_len + __fdata_len);
|
LONG(__persistent_lbas_len + __ftext_len + __fdata_len);
|
||||||
|
|
||||||
/* 0x0020 - 0x002F :
|
/* 0x0020 - 0x002F :
|
||||||
Skip "data_addr", "data_size", "bss_addr" and "bss_size".
|
Skip "data_addr", "data_size", "bss_addr" and "bss_size".
|
||||||
|
@ -140,8 +141,16 @@ SECTIONS {
|
||||||
. = . + 1992;
|
. = . + 1992;
|
||||||
} > loader
|
} > loader
|
||||||
|
|
||||||
|
__persistent_lbas_start = ABSOLUTE(.);
|
||||||
|
.persistent_lbas TLOAD_ADDR : {
|
||||||
|
__persistent_lbas = .;
|
||||||
|
KEEP(*(.header.lbas))
|
||||||
|
} > ram
|
||||||
|
. = ALIGN(4);
|
||||||
|
__persistent_lbas_end = ABSOLUTE(.);
|
||||||
|
|
||||||
__ftext_start = ABSOLUTE(.);
|
__ftext_start = ABSOLUTE(.);
|
||||||
.text TLOAD_ADDR : {
|
.text : {
|
||||||
*(.start)
|
*(.start)
|
||||||
*(.init)
|
*(.init)
|
||||||
KEEP (*(SORT_NONE(.fini)))
|
KEEP (*(SORT_NONE(.fini)))
|
||||||
|
|
Loading…
Reference in New Issue