stivale1&2: Allocate root struct on the heap
This commit is contained in:
parent
d815c3d732
commit
735afcc4ee
|
@ -55,16 +55,16 @@ bool stivale_load_by_anchor(void **_anchor, const char *magic,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct stivale_struct stivale_struct = {0};
|
|
||||||
|
|
||||||
bool stivale_load(char *config, char *cmdline) {
|
bool stivale_load(char *config, char *cmdline) {
|
||||||
|
struct stivale_struct *stivale_struct = ext_mem_alloc(sizeof(struct stivale_struct));
|
||||||
|
|
||||||
// BIOS or UEFI?
|
// BIOS or UEFI?
|
||||||
#if bios == 1
|
#if bios == 1
|
||||||
stivale_struct.flags |= (1 << 0);
|
stivale_struct->flags |= (1 << 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
stivale_struct.flags |= (1 << 1); // we give colour information
|
stivale_struct->flags |= (1 << 1); // we give colour information
|
||||||
stivale_struct.flags |= (1 << 2); // we give SMBIOS information
|
stivale_struct->flags |= (1 << 2); // we give SMBIOS information
|
||||||
|
|
||||||
struct file_handle *kernel_file;
|
struct file_handle *kernel_file;
|
||||||
|
|
||||||
|
@ -207,8 +207,8 @@ bool stivale_load(char *config, char *cmdline) {
|
||||||
panic("stivale: The stack cannot be 0 for 32-bit kernels");
|
panic("stivale: The stack cannot be 0 for 32-bit kernels");
|
||||||
}
|
}
|
||||||
|
|
||||||
stivale_struct.module_count = 0;
|
stivale_struct->module_count = 0;
|
||||||
uint64_t *prev_mod_ptr = &stivale_struct.modules;
|
uint64_t *prev_mod_ptr = &stivale_struct->modules;
|
||||||
for (int i = 0; ; i++) {
|
for (int i = 0; ; i++) {
|
||||||
struct conf_tuple conf_tuple =
|
struct conf_tuple conf_tuple =
|
||||||
config_get_tuple(config, i, "MODULE_PATH", "MODULE_STRING");
|
config_get_tuple(config, i, "MODULE_PATH", "MODULE_STRING");
|
||||||
|
@ -219,7 +219,7 @@ bool stivale_load(char *config, char *cmdline) {
|
||||||
if (module_path == NULL)
|
if (module_path == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
stivale_struct.module_count++;
|
stivale_struct->module_count++;
|
||||||
|
|
||||||
struct stivale_module *m = ext_mem_alloc(sizeof(struct stivale_module));
|
struct stivale_module *m = ext_mem_alloc(sizeof(struct stivale_module));
|
||||||
|
|
||||||
|
@ -270,20 +270,20 @@ bool stivale_load(char *config, char *cmdline) {
|
||||||
uint64_t rsdp = (uint64_t)(size_t)acpi_get_rsdp();
|
uint64_t rsdp = (uint64_t)(size_t)acpi_get_rsdp();
|
||||||
|
|
||||||
if (rsdp)
|
if (rsdp)
|
||||||
stivale_struct.rsdp = REPORTED_ADDR(rsdp);
|
stivale_struct->rsdp = REPORTED_ADDR(rsdp);
|
||||||
|
|
||||||
uint64_t smbios_entry_32 = 0, smbios_entry_64 = 0;
|
uint64_t smbios_entry_32 = 0, smbios_entry_64 = 0;
|
||||||
acpi_get_smbios((void **)&smbios_entry_32, (void **)&smbios_entry_64);
|
acpi_get_smbios((void **)&smbios_entry_32, (void **)&smbios_entry_64);
|
||||||
|
|
||||||
if (smbios_entry_32)
|
if (smbios_entry_32)
|
||||||
stivale_struct.smbios_entry_32 = REPORTED_ADDR(smbios_entry_32);
|
stivale_struct->smbios_entry_32 = REPORTED_ADDR(smbios_entry_32);
|
||||||
if (smbios_entry_64)
|
if (smbios_entry_64)
|
||||||
stivale_struct.smbios_entry_64 = REPORTED_ADDR(smbios_entry_64);
|
stivale_struct->smbios_entry_64 = REPORTED_ADDR(smbios_entry_64);
|
||||||
|
|
||||||
stivale_struct.cmdline = REPORTED_ADDR((uint64_t)(size_t)cmdline);
|
stivale_struct->cmdline = REPORTED_ADDR((uint64_t)(size_t)cmdline);
|
||||||
|
|
||||||
stivale_struct.epoch = time();
|
stivale_struct->epoch = time();
|
||||||
printv("stivale: Current epoch: %U\n", stivale_struct.epoch);
|
printv("stivale: Current epoch: %U\n", stivale_struct->epoch);
|
||||||
|
|
||||||
term_deinit();
|
term_deinit();
|
||||||
|
|
||||||
|
@ -304,18 +304,18 @@ bool stivale_load(char *config, char *cmdline) {
|
||||||
(uint64_t)fbinfo.framebuffer_pitch * fbinfo.framebuffer_height,
|
(uint64_t)fbinfo.framebuffer_pitch * fbinfo.framebuffer_height,
|
||||||
MEMMAP_FRAMEBUFFER, false, false, false, true);
|
MEMMAP_FRAMEBUFFER, false, false, false, true);
|
||||||
|
|
||||||
stivale_struct.framebuffer_addr = REPORTED_ADDR((uint64_t)fbinfo.framebuffer_addr);
|
stivale_struct->framebuffer_addr = REPORTED_ADDR((uint64_t)fbinfo.framebuffer_addr);
|
||||||
stivale_struct.framebuffer_width = fbinfo.framebuffer_width;
|
stivale_struct->framebuffer_width = fbinfo.framebuffer_width;
|
||||||
stivale_struct.framebuffer_height = fbinfo.framebuffer_height;
|
stivale_struct->framebuffer_height = fbinfo.framebuffer_height;
|
||||||
stivale_struct.framebuffer_bpp = fbinfo.framebuffer_bpp;
|
stivale_struct->framebuffer_bpp = fbinfo.framebuffer_bpp;
|
||||||
stivale_struct.framebuffer_pitch = fbinfo.framebuffer_pitch;
|
stivale_struct->framebuffer_pitch = fbinfo.framebuffer_pitch;
|
||||||
stivale_struct.fb_memory_model = STIVALE_FBUF_MMODEL_RGB;
|
stivale_struct->fb_memory_model = STIVALE_FBUF_MMODEL_RGB;
|
||||||
stivale_struct.fb_red_mask_size = fbinfo.red_mask_size;
|
stivale_struct->fb_red_mask_size = fbinfo.red_mask_size;
|
||||||
stivale_struct.fb_red_mask_shift = fbinfo.red_mask_shift;
|
stivale_struct->fb_red_mask_shift = fbinfo.red_mask_shift;
|
||||||
stivale_struct.fb_green_mask_size = fbinfo.green_mask_size;
|
stivale_struct->fb_green_mask_size = fbinfo.green_mask_size;
|
||||||
stivale_struct.fb_green_mask_shift = fbinfo.green_mask_shift;
|
stivale_struct->fb_green_mask_shift = fbinfo.green_mask_shift;
|
||||||
stivale_struct.fb_blue_mask_size = fbinfo.blue_mask_size;
|
stivale_struct->fb_blue_mask_size = fbinfo.blue_mask_size;
|
||||||
stivale_struct.fb_blue_mask_shift = fbinfo.blue_mask_shift;
|
stivale_struct->fb_blue_mask_shift = fbinfo.blue_mask_shift;
|
||||||
} else {
|
} else {
|
||||||
#if uefi == 1
|
#if uefi == 1
|
||||||
panic("stivale: Cannot use text mode with UEFI.");
|
panic("stivale: Cannot use text mode with UEFI.");
|
||||||
|
@ -351,17 +351,18 @@ bool stivale_load(char *config, char *cmdline) {
|
||||||
|
|
||||||
memcpy(mmap_copy, mmap, mmap_entries * sizeof(struct e820_entry_t));
|
memcpy(mmap_copy, mmap, mmap_entries * sizeof(struct e820_entry_t));
|
||||||
|
|
||||||
stivale_struct.memory_map_entries = (uint64_t)mmap_entries;
|
stivale_struct->memory_map_entries = (uint64_t)mmap_entries;
|
||||||
stivale_struct.memory_map_addr = REPORTED_ADDR((uint64_t)(size_t)mmap_copy);
|
stivale_struct->memory_map_addr = REPORTED_ADDR((uint64_t)(size_t)mmap_copy);
|
||||||
|
|
||||||
stivale_spinup(bits, want_5lv, &pagemap,
|
stivale_spinup(bits, want_5lv, &pagemap,
|
||||||
entry_point, REPORTED_ADDR((uint64_t)(uintptr_t)&stivale_struct),
|
entry_point, REPORTED_ADDR((uint64_t)(uintptr_t)stivale_struct),
|
||||||
stivale_hdr.stack, false);
|
stivale_hdr.stack, false);
|
||||||
|
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pmm_free(kernel, kernel_file_size);
|
pmm_free(kernel, kernel_file_size);
|
||||||
|
pmm_free(stivale_struct, sizeof(struct stivale_struct));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,8 +31,6 @@
|
||||||
((PTR) + ((stivale2_hdr.flags & (1 << 1)) ? \
|
((PTR) + ((stivale2_hdr.flags & (1 << 1)) ? \
|
||||||
direct_map_offset : 0))
|
direct_map_offset : 0))
|
||||||
|
|
||||||
struct stivale2_struct stivale2_struct = {0};
|
|
||||||
|
|
||||||
#define get_phys_addr(addr) ({ \
|
#define get_phys_addr(addr) ({ \
|
||||||
uintptr_t r1; \
|
uintptr_t r1; \
|
||||||
if ((addr) & ((uint64_t)1 << 63)) { \
|
if ((addr) & ((uint64_t)1 << 63)) { \
|
||||||
|
@ -77,6 +75,8 @@ void stivale2_term_callback(uint64_t, uint64_t, uint64_t, uint64_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool stivale2_load(char *config, char *cmdline) {
|
bool stivale2_load(char *config, char *cmdline) {
|
||||||
|
struct stivale2_struct *stivale2_struct = ext_mem_alloc(sizeof(struct stivale2_struct));
|
||||||
|
|
||||||
struct file_handle *kernel_file;
|
struct file_handle *kernel_file;
|
||||||
|
|
||||||
char *kernel_path = config_get_value(config, 0, "KERNEL_PATH");
|
char *kernel_path = config_get_value(config, 0, "KERNEL_PATH");
|
||||||
|
@ -266,8 +266,8 @@ failed_to_load_header_section:
|
||||||
panic("stivale2: The stack cannot be 0 for 32-bit kernels");
|
panic("stivale2: The stack cannot be 0 for 32-bit kernels");
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(stivale2_struct.bootloader_brand, "Limine");
|
strcpy(stivale2_struct->bootloader_brand, "Limine");
|
||||||
strcpy(stivale2_struct.bootloader_version, LIMINE_VERSION);
|
strcpy(stivale2_struct->bootloader_version, LIMINE_VERSION);
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
// Create boot volume tag
|
// Create boot volume tag
|
||||||
|
@ -286,7 +286,7 @@ failed_to_load_header_section:
|
||||||
memcpy(&tag->part_guid, &kernel_volume->part_guid, sizeof(struct stivale2_guid));
|
memcpy(&tag->part_guid, &kernel_volume->part_guid, sizeof(struct stivale2_guid));
|
||||||
}
|
}
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -298,7 +298,7 @@ failed_to_load_header_section:
|
||||||
|
|
||||||
tag->kernel_file = REPORTED_ADDR((uint64_t)(uintptr_t)kernel);
|
tag->kernel_file = REPORTED_ADDR((uint64_t)(uintptr_t)kernel);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -311,7 +311,7 @@ failed_to_load_header_section:
|
||||||
tag->kernel_file = REPORTED_ADDR((uint64_t)(uintptr_t)kernel);
|
tag->kernel_file = REPORTED_ADDR((uint64_t)(uintptr_t)kernel);
|
||||||
tag->kernel_size = kernel_file_size;
|
tag->kernel_size = kernel_file_size;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -323,7 +323,7 @@ failed_to_load_header_section:
|
||||||
|
|
||||||
tag->kernel_slide = slide;
|
tag->kernel_slide = slide;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -337,7 +337,7 @@ failed_to_load_header_section:
|
||||||
tag->flags = 1 << 0; // bit 0 = BIOS boot
|
tag->flags = 1 << 0; // bit 0 = BIOS boot
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -406,7 +406,7 @@ failed_to_load_header_section:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -420,7 +420,7 @@ failed_to_load_header_section:
|
||||||
if (rsdp)
|
if (rsdp)
|
||||||
tag->rsdp = REPORTED_ADDR(rsdp);
|
tag->rsdp = REPORTED_ADDR(rsdp);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -438,7 +438,7 @@ failed_to_load_header_section:
|
||||||
if (smbios_entry_64)
|
if (smbios_entry_64)
|
||||||
tag->smbios_entry_64 = REPORTED_ADDR(smbios_entry_64);
|
tag->smbios_entry_64 = REPORTED_ADDR(smbios_entry_64);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -450,7 +450,7 @@ failed_to_load_header_section:
|
||||||
|
|
||||||
tag->cmdline = REPORTED_ADDR((uint64_t)(size_t)cmdline);
|
tag->cmdline = REPORTED_ADDR((uint64_t)(size_t)cmdline);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -463,7 +463,7 @@ failed_to_load_header_section:
|
||||||
tag->epoch = time();
|
tag->epoch = time();
|
||||||
printv("stivale2: Current epoch: %U\n", tag->epoch);
|
printv("stivale2: Current epoch: %U\n", tag->epoch);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -561,7 +561,7 @@ failed_to_load_header_section:
|
||||||
tag->cols = term_cols;
|
tag->cols = term_cols;
|
||||||
tag->rows = term_rows;
|
tag->rows = term_rows;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
|
|
||||||
if (textmode) {
|
if (textmode) {
|
||||||
#if bios == 1
|
#if bios == 1
|
||||||
|
@ -599,7 +599,7 @@ have_fb_tag:;
|
||||||
tag->blue_mask_size = fb->blue_mask_size;
|
tag->blue_mask_size = fb->blue_mask_size;
|
||||||
tag->blue_mask_shift = fb->blue_mask_shift;
|
tag->blue_mask_shift = fb->blue_mask_shift;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#if bios == 1
|
#if bios == 1
|
||||||
|
@ -615,7 +615,7 @@ have_tm_tag:;
|
||||||
tmtag->cols = 80;
|
tmtag->cols = 80;
|
||||||
tmtag->bytes_per_char = 2;
|
tmtag->bytes_per_char = 2;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tmtag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tmtag);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -634,7 +634,7 @@ have_tm_tag:;
|
||||||
|
|
||||||
memcpy(tag->edid_information, edid_info, sizeof(struct edid_info_struct));
|
memcpy(tag->edid_information, edid_info, sizeof(struct edid_info_struct));
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,7 +647,7 @@ have_tm_tag:;
|
||||||
|
|
||||||
tag->addr = direct_map_offset;
|
tag->addr = direct_map_offset;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if bios == 1
|
#if bios == 1
|
||||||
|
@ -658,7 +658,7 @@ have_tm_tag:;
|
||||||
struct stivale2_struct_tag_pxe_server_info *tag = ext_mem_alloc(sizeof(struct stivale2_struct_tag_pxe_server_info));
|
struct stivale2_struct_tag_pxe_server_info *tag = ext_mem_alloc(sizeof(struct stivale2_struct_tag_pxe_server_info));
|
||||||
tag->tag.identifier = STIVALE2_STRUCT_TAG_PXE_SERVER_INFO;
|
tag->tag.identifier = STIVALE2_STRUCT_TAG_PXE_SERVER_INFO;
|
||||||
tag->server_ip = get_boot_server_info();
|
tag->server_ip = get_boot_server_info();
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -677,7 +677,7 @@ have_tm_tag:;
|
||||||
|
|
||||||
memcpy(tag->pmrs, ranges, ranges_count * sizeof(struct stivale2_pmr));
|
memcpy(tag->pmrs, ranges, ranges_count * sizeof(struct stivale2_pmr));
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -694,7 +694,7 @@ have_tm_tag:;
|
||||||
tag->physical_base_address = physical_base;
|
tag->physical_base_address = physical_base;
|
||||||
tag->virtual_base_address = virtual_base;
|
tag->virtual_base_address = virtual_base;
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,7 +708,7 @@ have_tm_tag:;
|
||||||
|
|
||||||
tag->system_table = REPORTED_ADDR((uint64_t)(uintptr_t)gST);
|
tag->system_table = REPORTED_ADDR((uint64_t)(uintptr_t)gST);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -747,7 +747,7 @@ have_tm_tag:;
|
||||||
tag->cpu_count = cpu_count;
|
tag->cpu_count = cpu_count;
|
||||||
tag->flags |= (smp_hdr_tag->flags & 1) && x2apic_check();
|
tag->flags |= (smp_hdr_tag->flags & 1) && x2apic_check();
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -780,7 +780,7 @@ have_tm_tag:;
|
||||||
memcpy((void*)tag + sizeof(struct stivale2_struct_tag_memmap),
|
memcpy((void*)tag + sizeof(struct stivale2_struct_tag_memmap),
|
||||||
mmap, sizeof(struct e820_entry_t) * mmap_entries);
|
mmap, sizeof(struct e820_entry_t) * mmap_entries);
|
||||||
|
|
||||||
append_tag(&stivale2_struct, (struct stivale2_tag *)tag);
|
append_tag(stivale2_struct, (struct stivale2_tag *)tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
|
@ -789,7 +789,7 @@ have_tm_tag:;
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
print("stivale2: Generated tags:\n");
|
print("stivale2: Generated tags:\n");
|
||||||
struct stivale2_tag *taglist =
|
struct stivale2_tag *taglist =
|
||||||
(void*)(uintptr_t)(stivale2_struct.tags - ((stivale2_hdr.flags & (1 << 1)) ? direct_map_offset : 0));
|
(void*)(uintptr_t)(stivale2_struct->tags - ((stivale2_hdr.flags & (1 << 1)) ? direct_map_offset : 0));
|
||||||
for (size_t i = 0; ; i++) {
|
for (size_t i = 0; ; i++) {
|
||||||
print(" Tag #%u ID: %X\n", i, taglist->identifier);
|
print(" Tag #%u ID: %X\n", i, taglist->identifier);
|
||||||
if (taglist->next) {
|
if (taglist->next) {
|
||||||
|
@ -806,12 +806,13 @@ have_tm_tag:;
|
||||||
term_runtime = true;
|
term_runtime = true;
|
||||||
|
|
||||||
stivale_spinup(bits, want_5lv, &pagemap, entry_point,
|
stivale_spinup(bits, want_5lv, &pagemap, entry_point,
|
||||||
REPORTED_ADDR((uint64_t)(uintptr_t)&stivale2_struct),
|
REPORTED_ADDR((uint64_t)(uintptr_t)stivale2_struct),
|
||||||
stivale2_hdr.stack, want_pmrs);
|
stivale2_hdr.stack, want_pmrs);
|
||||||
|
|
||||||
__builtin_unreachable();
|
__builtin_unreachable();
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
pmm_free(kernel, kernel_file_size);
|
pmm_free(kernel, kernel_file_size);
|
||||||
|
pmm_free(stivale2_struct, sizeof(struct stivale2_struct));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue