Specify Multiboot 2 header in C

This commit is contained in:
Alex Kotov 2022-11-29 23:19:53 +04:00
parent bbd1eeb357
commit b2b1b3910a
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
4 changed files with 36 additions and 20 deletions

View File

@ -20,7 +20,7 @@ CPPFLAGS = \
$(MRUBY_FLAGS) \
-DKERNAUX_DEBUG \
OBJS = start.S.o main.c.o libc.c.o logger.c.o panic.c.o
OBJS = multiboot2.c.o start.S.o main.c.o libc.c.o logger.c.o panic.c.o
all: $(MRUBYVISOR)

View File

@ -14,7 +14,7 @@ SECTIONS
.text BLOCK(4K) : ALIGN(4K)
{
*(.multiboot)
*(.multiboot2)
*(.text)
}

34
src/multiboot2.c Normal file
View File

@ -0,0 +1,34 @@
#include <kernaux/multiboot2.h>
#include <kernaux/macro/packing_start.run>
__attribute__((
section(".multiboot2"),
used,
aligned(KERNAUX_MULTIBOOT2_HEADER_ALIGN)
))
const struct {
struct KernAux_Multiboot2_Header header;
struct KernAux_Multiboot2_HTag_None tag_none;
}
KERNAUX_PACKED
multiboot2 = {
.header = {
.magic = KERNAUX_MULTIBOOT2_HEADER_MAGIC,
.arch = KERNAUX_MULTIBOOT2_HEADER_ARCH_I386,
.total_size = sizeof(multiboot2),
.checksum = KERNAUX_MULTIBOOT2_HEADER_CHECKSUM(
KERNAUX_MULTIBOOT2_HEADER_ARCH_I386,
sizeof(multiboot2)
),
},
.tag_none = {
.base = {
.type = KERNAUX_MULTIBOOT2_HTAG_NONE,
.flags = 0,
.size = sizeof(multiboot2.tag_none),
},
},
};
#include <kernaux/macro/packing_end.run>

View File

@ -1,21 +1,3 @@
.set MULTIBOOT_MAGIC, 0xE85250D6
.set MULTIBOOT_ARCH, 0
.set MULTIBOOT_LENGTH, 16 + 8
.set MULTIBOOT_CHECKSUM, -(MULTIBOOT_MAGIC + MULTIBOOT_ARCH + MULTIBOOT_LENGTH)
.section .multiboot
.align 4
.long MULTIBOOT_MAGIC
.long MULTIBOOT_ARCH
.long MULTIBOOT_LENGTH
.long MULTIBOOT_CHECKSUM
.long 0
.long 8
.section .bss
.global _kernel_stack_start