mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 06:18:59 +00:00
Kernel: Make better use of the multiboot info.
Define the multiboot info struct properly so we don't have to grab at byte offsets in the memory access checker code. Also print kernel command line in init().
This commit is contained in:
parent
8454d3e184
commit
4320c5fd58
Notes:
sideshowbarker
2024-07-19 13:47:53 +09:00
Author: https://github.com/awesomekling
Commit: 4320c5fd58
5 changed files with 115 additions and 28 deletions
|
@ -25,6 +25,7 @@
|
|||
#include <Kernel/SharedMemory.h>
|
||||
#include <Kernel/ProcessTracer.h>
|
||||
#include <Kernel/FileSystem/Custody.h>
|
||||
#include <Kernel/Multiboot.h>
|
||||
|
||||
//#define DEBUG_POLL_SELECT
|
||||
//#define DEBUG_IO
|
||||
|
@ -1433,33 +1434,12 @@ enum class KernelMemoryCheckResult {
|
|||
AccessDenied
|
||||
};
|
||||
|
||||
// FIXME: Nothing about this is really super...
|
||||
// This structure is only present at offset 28 in the main multiboot info struct
|
||||
// if bit 5 of offset 0 (flags) is set. We're just assuming that the flag is set.
|
||||
//
|
||||
// Also, there's almost certainly a better way to get that information here than
|
||||
// a global set by boot.S
|
||||
//
|
||||
// Also I'm not 100% sure any of this is correct...
|
||||
|
||||
struct mb_elf {
|
||||
uint32_t num;
|
||||
uint32_t size;
|
||||
uint32_t addr;
|
||||
uint32_t shndx;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
void* multiboot_ptr;
|
||||
}
|
||||
|
||||
static KernelMemoryCheckResult check_kernel_memory_access(LinearAddress laddr, bool is_write)
|
||||
{
|
||||
// FIXME: It would be better to have a proper structure for this...
|
||||
auto* sections = (const mb_elf*)((const byte*)multiboot_ptr + 28);
|
||||
auto& sections = multiboot_info_ptr->u.elf_sec;
|
||||
|
||||
auto* kernel_program_headers = (Elf32_Phdr*)(sections->addr);
|
||||
for (unsigned i = 0; i < sections->num; ++i) {
|
||||
auto* kernel_program_headers = (Elf32_Phdr*)(sections.addr);
|
||||
for (unsigned i = 0; i < sections.num; ++i) {
|
||||
auto& segment = kernel_program_headers[i];
|
||||
if (segment.p_type != PT_LOAD || !segment.p_vaddr || !segment.p_memsz)
|
||||
continue;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue