diff --git a/examples/kernel-multiboot2-grub/expected.txt b/examples/kernel-multiboot2-grub/expected.txt index 91e53e6..5c1ba79 100644 Binary files a/examples/kernel-multiboot2-grub/expected.txt and b/examples/kernel-multiboot2-grub/expected.txt differ diff --git a/examples/kernel-multiboot2-grub/multiboot2.c b/examples/kernel-multiboot2-grub/multiboot2.c index 51377e6..c7023c1 100644 --- a/examples/kernel-multiboot2-grub/multiboot2.c +++ b/examples/kernel-multiboot2-grub/multiboot2.c @@ -10,10 +10,10 @@ __attribute__((packed)) multiboot2_header = { .multiboot2_header = { .magic = KERNAUX_MULTIBOOT2_HEADER_MAGIC, - .arch = KERNAUX_MULTIBOOT2_ARCH_NONE, + .arch = KERNAUX_MULTIBOOT2_HEADER_ARCH_I386, .total_size = sizeof(multiboot2_header), .checksum = KERNAUX_MULTIBOOT2_HEADER_CHECKSUM( - KERNAUX_MULTIBOOT2_ARCH_NONE, + KERNAUX_MULTIBOOT2_HEADER_ARCH_I386, sizeof(multiboot2_header) ), }, diff --git a/examples/kernel-multiboot2-limine/expected.txt b/examples/kernel-multiboot2-limine/expected.txt index 263ddae..312e026 100644 Binary files a/examples/kernel-multiboot2-limine/expected.txt and b/examples/kernel-multiboot2-limine/expected.txt differ diff --git a/examples/kernel-multiboot2-limine/multiboot2.c b/examples/kernel-multiboot2-limine/multiboot2.c index 51377e6..c7023c1 100644 --- a/examples/kernel-multiboot2-limine/multiboot2.c +++ b/examples/kernel-multiboot2-limine/multiboot2.c @@ -10,10 +10,10 @@ __attribute__((packed)) multiboot2_header = { .multiboot2_header = { .magic = KERNAUX_MULTIBOOT2_HEADER_MAGIC, - .arch = KERNAUX_MULTIBOOT2_ARCH_NONE, + .arch = KERNAUX_MULTIBOOT2_HEADER_ARCH_I386, .total_size = sizeof(multiboot2_header), .checksum = KERNAUX_MULTIBOOT2_HEADER_CHECKSUM( - KERNAUX_MULTIBOOT2_ARCH_NONE, + KERNAUX_MULTIBOOT2_HEADER_ARCH_I386, sizeof(multiboot2_header) ), }, diff --git a/include/kernaux/multiboot2.h b/include/kernaux/multiboot2.h index 8de5ddd..8a1f2d1 100644 --- a/include/kernaux/multiboot2.h +++ b/include/kernaux/multiboot2.h @@ -43,8 +43,7 @@ extern "C" { ***********************/ enum KernAux_Multiboot2_Header_Arch { - KERNAUX_MULTIBOOT2_HEADER_ARCH_NONE = 0, - KERNAUX_MULTIBOOT2_HEADER_ARCH_I386 = 1, + KERNAUX_MULTIBOOT2_HEADER_ARCH_I386 = 0, KERNAUX_MULTIBOOT2_HEADER_ARCH_MIPS32 = 4, }; @@ -465,6 +464,10 @@ __attribute__((packed)); * String functions * ********************/ +const char *KernAux_Multiboot2_Header_Arch_to_str( + enum KernAux_Multiboot2_Header_Arch arch +); + const char *KernAux_Multiboot2_HTag_to_str( enum KernAux_Multiboot2_HTag tag_type ); @@ -473,6 +476,10 @@ const char *KernAux_Multiboot2_ITag_to_str( enum KernAux_Multiboot2_ITag tag_type ); +const char *KernAux_Multiboot2_HTag_RelocatableHeader_Preference_to_str( + enum KernAux_Multiboot2_HTag_RelocatableHeader_Preference pref +); + /*************************** * Header helper functions * ***************************/ diff --git a/src/multiboot2/enums_to_str.c b/src/multiboot2/enums_to_str.c index b4ef7a0..dcb8b14 100644 --- a/src/multiboot2/enums_to_str.c +++ b/src/multiboot2/enums_to_str.c @@ -6,8 +6,21 @@ #include +const char *KernAux_Multiboot2_Header_Arch_to_str( + const enum KernAux_Multiboot2_Header_Arch arch +) { + switch (arch) { + case KERNAUX_MULTIBOOT2_HEADER_ARCH_I386: + return "i386"; + case KERNAUX_MULTIBOOT2_HEADER_ARCH_MIPS32: + return "MIPS32"; // TODO: specify this architecture in README + default: + return NULL; + } +} + const char *KernAux_Multiboot2_HTag_to_str( - enum KernAux_Multiboot2_HTag tag_type + const enum KernAux_Multiboot2_HTag tag_type ) { switch (tag_type) { case KERNAUX_MULTIBOOT2_HTAG_NONE: @@ -38,7 +51,7 @@ const char *KernAux_Multiboot2_HTag_to_str( } const char *KernAux_Multiboot2_ITag_to_str( - enum KernAux_Multiboot2_ITag tag_type + const enum KernAux_Multiboot2_ITag tag_type ) { switch (tag_type) { case KERNAUX_MULTIBOOT2_ITAG_NONE: @@ -89,3 +102,18 @@ const char *KernAux_Multiboot2_ITag_to_str( return NULL; } } + +const char *KernAux_Multiboot2_HTag_RelocatableHeader_Preference_to_str( + const enum KernAux_Multiboot2_HTag_RelocatableHeader_Preference pref +) { + switch (pref) { + case KERNAUX_MULTIBOOT2_HTAG_RELOCATABLE_HEADER_PREFERENCE_NONE: + return "none"; + case KERNAUX_MULTIBOOT2_HTAG_RELOCATABLE_HEADER_PREFERENCE_LOWEST: + return "lowest"; + case KERNAUX_MULTIBOOT2_HTAG_RELOCATABLE_HEADER_PREFERENCE_HIGHEST: + return "highest"; + default: + return NULL; + } +} diff --git a/src/multiboot2/header_is_valid.c b/src/multiboot2/header_is_valid.c index 22344d2..6a8545b 100644 --- a/src/multiboot2/header_is_valid.c +++ b/src/multiboot2/header_is_valid.c @@ -15,8 +15,7 @@ bool KernAux_Multiboot2_Header_is_valid( return false; } - if (multiboot2_header->arch != KERNAUX_MULTIBOOT2_HEADER_ARCH_NONE && - multiboot2_header->arch != KERNAUX_MULTIBOOT2_HEADER_ARCH_I386 && + if (multiboot2_header->arch != KERNAUX_MULTIBOOT2_HEADER_ARCH_I386 && multiboot2_header->arch != KERNAUX_MULTIBOOT2_HEADER_ARCH_MIPS32) { return false; diff --git a/src/multiboot2/header_print.c b/src/multiboot2/header_print.c index b3a492f..3fd31c0 100644 --- a/src/multiboot2/header_print.c +++ b/src/multiboot2/header_print.c @@ -13,7 +13,11 @@ void KernAux_Multiboot2_Header_print( ) { printf("Multiboot 2 header\n"); printf(" magic: %u\n", multiboot2_header->magic); - printf(" arch: %u\n", multiboot2_header->arch); + printf( + " arch: %u (%s)\n", + multiboot2_header->arch, + KernAux_Multiboot2_Header_Arch_to_str(multiboot2_header->arch) + ); printf(" size: %u\n", multiboot2_header->total_size); printf(" checksum: %u\n", multiboot2_header->checksum); diff --git a/tests/test_multiboot2_header_print.c b/tests/test_multiboot2_header_print.c index eff576a..fa0bae9 100644 --- a/tests/test_multiboot2_header_print.c +++ b/tests/test_multiboot2_header_print.c @@ -13,9 +13,9 @@ static const char output2[] = "Multiboot 2 header\n" " magic: 3897708758\n" - " arch: 1\n" + " arch: 0 (i386)\n" " size: 272\n" - " checksum: 397258265\n" + " checksum: 397258266\n" "Multiboot 2 header tag\n" " type: 1 (information request)\n" " flags: 0\n"