feat(loader, kernel): impl part of loader and initialize kernel structure

This commit is contained in:
2026-04-11 09:42:09 +08:00
parent 1233ae9e9b
commit 34ccf69569
53 changed files with 1743 additions and 777 deletions

View File

@@ -0,0 +1,20 @@
const std = @import("std");
const elf = std.elf;
extern var __rela_dyn_start: u8;
extern var __rela_dyn_end: u8;
pub fn relocateSelf(base_addr: usize) callconv(.c) void {
const rela_size = (@intFromPtr(&__rela_dyn_end) - @intFromPtr(&__rela_dyn_start)) / @sizeOf(elf.Elf64_Rela);
const relas = @as([*]elf.Elf64_Rela, @ptrCast(@alignCast(&__rela_dyn_start)))[0..rela_size];
for (relas) |rela| {
const offset = rela.r_offset;
const addend = rela.r_addend;
// const sym_index = rela.r_info >> 32;
const type_ = rela.r_info & 0xffffffff;
if (type_ == @intFromEnum(elf.R_X86_64.RELATIVE)) {
const reloc_addr: *u64 = @ptrFromInt(offset + base_addr);
reloc_addr.* = base_addr + @as(usize, @intCast(addend));
}
}
}