[kernel] Add test mode, controlled by manifest
The manifest can now supply a list of boot flags, including "test". Those get turned into the bootproto::args::flags field by the bootloader. The kernel takes those and uses the test flag to control enabling syscalls with the new "test" attribute, like the new test_finish syscall, which lets automated tests call back to the kernel to shut down the system.
This commit is contained in:
@@ -41,7 +41,8 @@ bootconfig::bootconfig(util::buffer data, uefi::boot_services *bs)
|
||||
data += 1; // reserved byte
|
||||
uint16_t num_programs = *util::read<uint16_t>(data);
|
||||
uint16_t num_data = *util::read<uint16_t>(data);
|
||||
data += 2; // reserved short
|
||||
|
||||
m_flags = *util::read<uint16_t>(data);
|
||||
|
||||
read_descriptor(m_kernel, data);
|
||||
read_descriptor(m_init, data);
|
||||
|
||||
@@ -28,12 +28,14 @@ public:
|
||||
/// Constructor. Loads bootconfig from the given buffer.
|
||||
bootconfig(util::buffer data, uefi::boot_services *bs);
|
||||
|
||||
inline const descriptor & kernel() { return m_kernel; }
|
||||
inline const descriptor & init() { return m_init; }
|
||||
inline uint16_t flags() const { return m_flags; }
|
||||
inline const descriptor & kernel() const { return m_kernel; }
|
||||
inline const descriptor & init() const { return m_init; }
|
||||
descriptors programs() { return m_programs; }
|
||||
descriptors data() { return m_data; }
|
||||
|
||||
private:
|
||||
uint16_t m_flags;
|
||||
descriptor m_kernel;
|
||||
descriptor m_init;
|
||||
descriptors m_programs;
|
||||
|
||||
@@ -77,6 +77,7 @@ load_resources(bootproto::args *args, video::screen *screen, uefi::handle image,
|
||||
|
||||
args->kernel = loader::load_program(disk, bc.kernel(), true);
|
||||
args->init = loader::load_program(disk, bc.init());
|
||||
args->flags = static_cast<bootproto::boot_flags>(bc.flags());
|
||||
|
||||
namespace bits = util::bits;
|
||||
using bootproto::desc_flags;
|
||||
|
||||
Reference in New Issue
Block a user