From f10f065e9110cc0b6149b9fe2b67648be6200d05 Mon Sep 17 00:00:00 2001 From: Tom-on64 Date: Sat, 28 Mar 2026 18:03:46 +0100 Subject: [PATCH] Added __printf() attributes to printf-like functions --- kernel/include/kernel.h | 4 ++-- kernel/include/serial.h | 2 +- kernel/include/vsnprintf.h | 2 +- kernel/src/kmain.c | 4 ---- kernel/src/paging.c | 6 ++---- kernel/src/panic.c | 4 ++-- kernel/src/pmm.c | 8 ++++---- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/kernel/include/kernel.h b/kernel/include/kernel.h index 37b68fb..cc5b8be 100644 --- a/kernel/include/kernel.h +++ b/kernel/include/kernel.h @@ -66,7 +66,7 @@ extern uint8_t console_loglevel; // TODO: Add a ring buffer for the logs -int printk(const char* fmt, ...); +int printk(const char* fmt, ...) __printf(1, 2); int vprintk(const char* fmt, va_list ap); #define pr_emerg(fmt, ...) printk(KERN_EMERG fmt, ##__VA_ARGS__) @@ -80,7 +80,7 @@ int vprintk(const char* fmt, va_list ap); #define PANIC_MSG_BUFSZ 1024 -void panic(const char* fmt, ...) __noreturn __cold; +void panic(const char* fmt, ...) __noreturn __cold __printf(1, 2); void vpanic(const char* fmt, va_list ap)__noreturn __cold; extern uintptr_t __kernel_start, __kernel_text_start, __kernel_rodata_start, __kernel_data_start; diff --git a/kernel/include/serial.h b/kernel/include/serial.h index c62c6d7..b00a612 100644 --- a/kernel/include/serial.h +++ b/kernel/include/serial.h @@ -20,7 +20,7 @@ void serial_write(int dev, const char* buf, size_t len); void serial_puts(int dev, const char* s); void serial_cls(int dev); -int debugf(const char* fmt, ...); +int debugf(const char* fmt, ...) __printf(1, 2); int vdebugf(const char* fmt, va_list args); #endif diff --git a/kernel/include/vsnprintf.h b/kernel/include/vsnprintf.h index 0e73e6e..ff93a31 100644 --- a/kernel/include/vsnprintf.h +++ b/kernel/include/vsnprintf.h @@ -3,7 +3,7 @@ #include -int snprintf(char *buf, size_t n, const char *fmt, ...); +int snprintf(char *buf, size_t n, const char *fmt, ...) __printf(3, 4); int vsnprintf(char* buf, size_t n, const char* fmt, va_list ap); #endif diff --git a/kernel/src/kmain.c b/kernel/src/kmain.c index 78f5ee9..02fae78 100644 --- a/kernel/src/kmain.c +++ b/kernel/src/kmain.c @@ -8,8 +8,6 @@ #include #include -void a(void) { *(char*)(1234) = 0; } - __noreturn void _start(void) { int err = 0; @@ -37,8 +35,6 @@ void _start(void) { // The most important function in the world. splash(); - a(); - // Patiently wait for things to do :) while (1); }; diff --git a/kernel/src/paging.c b/kernel/src/paging.c index 7086bad..328f96b 100644 --- a/kernel/src/paging.c +++ b/kernel/src/paging.c @@ -11,8 +11,6 @@ // VIRTUAL address of the kernels PML4 uint64_t* pag_kernel_pml4 = NULL; -// abcabcaaabcaab - int pag_init(void) { pag_kernel_pml4 = TO_VIRT(pmm_alloc()); if (IS_ERR(pag_kernel_pml4)) return PTR_ERR(pag_kernel_pml4); @@ -43,8 +41,8 @@ int pag_init(void) { case LIMINE_MEMMAP_RESERVED_MAPPED: flags = 0; break; default: pr_warning( - "[pag] %p - %p: Unknown memmap type %d. Will remain unmapped.\n", - entry->base, entry->base + entry->length, entry->type + "[pag] %p - %p: Unknown memmap type %lu. Will remain unmapped.\n", + (void*)entry->base, (void*)entry->base + entry->length, entry->type ); continue; } diff --git a/kernel/src/panic.c b/kernel/src/panic.c index c874a21..a0e9fad 100644 --- a/kernel/src/panic.c +++ b/kernel/src/panic.c @@ -18,7 +18,7 @@ void panic_call_trace(void) { // TODO: Parse ELF and print function names char* fname = "???"; - pr_emerg(" [<%p>] %s+0x%x\n", retaddr, fname, offset); + pr_emerg(" [<%p>] %s+0x%lx\n", (void*)retaddr, fname, offset); rbp = (uintptr_t*)*rbp; } @@ -45,7 +45,7 @@ void vpanic(const char *fmt, va_list ap) { pr_emerg("--- [ Kernel panic: %s ] ---\n\n", buf); - pr_emerg("%d / %d pages free.\n\n", pmm_free_pages, pmm_total_pages); + pr_emerg("%lu / %lu pages free.\n\n", pmm_free_pages, pmm_total_pages); panic_call_trace(); pr_emerg("\n--- [ End kernel panic: %s ] ---\n", buf); diff --git a/kernel/src/pmm.c b/kernel/src/pmm.c index a12324c..aa4b746 100644 --- a/kernel/src/pmm.c +++ b/kernel/src/pmm.c @@ -16,8 +16,8 @@ int pmm_init(void) { struct limine_memmap_entry* entry = bootloader.mm_entries[i]; pr_info( - "\t%p - %p (%d bytes), type %d\n", - entry->base, entry->base + entry->length, entry->length, entry->type + "\t%p - %p (%lu bytes), type %lu\n", + (void*)entry->base, (void*)entry->base + entry->length, entry->length, entry->type ); if (entry->type != LIMINE_MEMMAP_USABLE) continue; @@ -25,7 +25,7 @@ int pmm_init(void) { // Limine spec says that it'll be aligned, but just as a sanity check if (entry->base % PAGE_SIZE != 0) { size_t diff = PAGE_SIZE - (entry->base % PAGE_SIZE); - pr_info("\t Not 4 kiB aligned, shifting %p -> %p (%d bytes).\n", entry->base, entry->base + diff, diff); + pr_info("\t Not 4 kiB aligned, shifting %p -> %p (%lu bytes).\n", (void*)entry->base, (void*)entry->base + diff, diff); entry->base += diff; entry->length -= diff; } @@ -38,7 +38,7 @@ int pmm_init(void) { } } - pr_info("[pmm] %d free pages.\n", pmm_total_pages); + pr_info("[pmm] %lu free pages.\n", pmm_total_pages); if (pmm_total_pages == 0) return -ENOMEM; pmm_free_pages = pmm_total_pages;