c - What's Causing This Strange Warning When I Compile My Kernel? Passing incompatible pointer type, expected struct * but got struct * -
c - What's Causing This Strange Warning When I Compile My Kernel? Passing incompatible pointer type, expected struct * but got struct * -
i'm hoping might able explain me. i'm writing own os, , getting writing memory manager. maintain getting weird warning when compile kernel. warning quite paradoxical me. function getting type of parameter expects, complaining if otherwise. runs fine, , i'm able info need initialize memory manager. can tell me what's causing this?
$home/opt/cross/bin/i686-elf-gcc -c -ffreestanding -o2 -wall -wextra -std=gnu99 -ggdb -isystem src/h -o build/kernel.c.o src/c/kernel.c
src/c/kernel.c: in function 'kernel_main': src/c/kernel.c:29:2: warning: passing argument 1 of 'memory_manager_initialize' incompatible pointer type
memory_manager_initialize(mboot_ptr); // wtf cause warning?
in file included src/h/system.h:39:0, src/h/multiboot.h:4, src/c/kernel.c:1:
src/h/memory.h:35:6: note: expected 'struct multiboot *' argument of type 'struct multiboot *'
void memory_manager_initialize(struct multiboot *mboot_ptr);
here's code loader grub calls.
# declare constants used multiboot header .set align, 1<<0 .set meminfo, 1<<1 .set magic, 0x1badb002 .set flags, align | meminfo .set checksum, -(magic + flags) .global .multiboot .extern code .extern bss .extern end .section .multiboot #.align 4 .long magic .long flags .long checksum .long .multiboot .long code .long bss .long end .long _start .section .text .global _start .extern kernel_main .type _start, @function _start: force %esp force %ebx cli phone call kernel_main .hang: jmp .hang .size _start, . - _start
here's code kernel warning coming from.
int kernel_main(struct multiboot *mboot_ptr, u32int initial_stack) { initial_esp = initial_stack; gdt_initialize(); idt_initialize(); memset((u8int *) &interrupt_handler, 0, sizeof(isr) * 256); enable_interrupts(); timer_initialize(100); keyboard_initialize(); keyboard_set_handler(kernel_keyboard_handler); vga_set_handler(kernel_vga_handler); memset((u8int *) terminal_buffer, 0, max_terminal_buffer_size); // clear terminal buffer (initalize 0 when start running) // need memory management going. memory_manager_initialize(mboot_ptr); // wtf cause warning?
and function that's beingness called defined as
void memory_manager_initialize(struct multiboot *mboot_ptr)
either struct defined as:
typedef struct { /* stuff */ } multiboot;
when should defined as:
typedef struct multiboot { // note difference in line /* stuff */ } multiboot;
or function prototype memory_manager_initialize()
appears before compiler sees definition of struct multiboot
.
c assembly struct kernel
Comments
Post a Comment