diff options
Diffstat (limited to 'src/kernel/dump_multiboot.cc')
-rw-r--r-- | src/kernel/dump_multiboot.cc | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/kernel/dump_multiboot.cc b/src/kernel/dump_multiboot.cc index 60b4b91..219d64f 100644 --- a/src/kernel/dump_multiboot.cc +++ b/src/kernel/dump_multiboot.cc @@ -6,11 +6,11 @@ extern "C" void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr) { printk("multiboot addr: ", uhex{mb_addr}, !(mb_addr & 7) ? " is aligned" : " is not aligned", '\n'); struct multiboot_tag* tag; - const uint32_t size = *(unsigned*)mb_addr; + const uint32_t size = *reinterpret_cast<uint32_t*>(mb_addr); printk("Announced mbi size ", size, '\n'); - for (tag = (struct multiboot_tag*)(mb_addr + 8); tag->type != MULTIBOOT_TAG_TYPE_END; - tag = (struct multiboot_tag*)((multiboot_uint8_t*)tag + ((tag->size + 7) & ~7))) { + for (tag = reinterpret_cast<multiboot_tag*>(mb_addr + 8); tag->type != MULTIBOOT_TAG_TYPE_END; + tag = reinterpret_cast<multiboot_tag*>(reinterpret_cast<uint8_t*>(tag) + ((tag->size + 7u) & ~7u))) { switch (tag->type) { case MULTIBOOT_TAG_TYPE_CMDLINE: { auto* t = reinterpret_cast<multiboot_tag_string*>(tag); @@ -37,11 +37,14 @@ extern "C" void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr) { multiboot_memory_map_t* mmap; printk("memory map\n"); - for (mmap = t->entries; (multiboot_uint8_t*)mmap < (multiboot_uint8_t*)tag + tag->size; - mmap = (multiboot_memory_map_t*)((unsigned long)mmap + ((struct multiboot_tag_mmap*)tag)->entry_size)) { - printk(" base_addr = ", uhex{(unsigned)(mmap->addr >> 32)}, ' ', uhex{(unsigned)(mmap->addr & 0xffffffff)}); - printk(" length = ", (unsigned)(mmap->len >> 32), ' ', (unsigned)(mmap->len & 0xffffffff)); - printk(" type = ", (unsigned)mmap->type, '\n'); + for (mmap = t->entries; reinterpret_cast<uint8_t*>(mmap) < reinterpret_cast<uint8_t*>(tag) + tag->size; + mmap = reinterpret_cast<multiboot_memory_map_t*>(reinterpret_cast<uint32_t>(mmap) + + reinterpret_cast<multiboot_tag_mmap*>(tag)->entry_size)) { + printk(" base_addr = ", uhex{static_cast<uint32_t>(mmap->addr >> 32)}, ' ', + uhex{static_cast<uint32_t>(mmap->addr & 0xffffffff)}); + printk(" length = ", static_cast<uint32_t>(mmap->len >> 32), ' ', + static_cast<uint32_t>(mmap->len & 0xffffffff)); + printk(" type = ", mmap->type, '\n'); } } break; @@ -51,6 +54,6 @@ extern "C" void dump_multiboot(uint32_t mb_magic, uint32_t mb_addr) { } // switch(tag->type) } // for(each tag) - tag = (struct multiboot_tag*)((multiboot_uint8_t*)tag + ((tag->size + 7) & ~7)); - printk("Total mbi size ", (unsigned)tag - mb_addr, '\n'); + tag = reinterpret_cast<multiboot_tag*>(reinterpret_cast<uint8_t*>(tag) + ((tag->size + 7u) & ~7u)); + printk("Total mbi size ", reinterpret_cast<uint32_t>(tag) - mb_addr, '\n'); } |