From 4b4ad2ca655a9afc70a3f87aa93e947fd093b441 Mon Sep 17 00:00:00 2001 From: destoer Date: Wed, 8 Jul 2020 00:38:59 +0100 Subject: [PATCH] fix compilier warnings --- CMakeLists.txt | 2 +- chroma/inc/kernel/system/interrupts.h | 44 +++---------------- chroma/inc/kernel/video/tty.h | 11 ----- chroma/system/drivers/keyboard.c | 25 ++++++----- chroma/system/interrupts.c | 60 ++++++++++++++++++++++++- chroma/system/memory/paging.c | 6 +-- chroma/system/memory/physmem.c | 8 ++-- chroma/system/rw.c | 14 +++--- chroma/video/draw.c | 10 ++--- chroma/video/tty.c | 61 -------------------------- chroma/video/tty.d | 6 --- iso/boot/initrd | Bin 34496 -> 34496 bytes kernel.elf | Bin 34496 -> 0 bytes sync.iso | Bin 5144576 -> 5144576 bytes 14 files changed, 98 insertions(+), 149 deletions(-) delete mode 100644 chroma/inc/kernel/video/tty.h delete mode 100644 chroma/video/tty.c delete mode 100644 chroma/video/tty.d delete mode 100755 kernel.elf diff --git a/CMakeLists.txt b/CMakeLists.txt index c2b59a0..6686564 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,6 @@ SET(src_no_sse set_property(SOURCE ${src_no_sse} PROPERTY COMPILE_FLAGS -mgeneral-regs-only) add_executable(kernel.elf ${src_files} ${src_no_sse} font.o) -target_compile_options(kernel.elf PRIVATE -ffreestanding -O2 -Wall -Wextra -v -fPIC) +target_compile_options(kernel.elf PRIVATE -ffreestanding -O2 -Wall -Wextra -Wall -Werror -pedantic -fPIC) target_link_options(kernel.elf PRIVATE -T linker.ld -ffreestanding -O2 -nostdlib -lgcc) diff --git a/chroma/inc/kernel/system/interrupts.h b/chroma/inc/kernel/system/interrupts.h index 565c8f3..f381c40 100644 --- a/chroma/inc/kernel/system/interrupts.h +++ b/chroma/inc/kernel/system/interrupts.h @@ -1,41 +1,7 @@ #pragma once #include -static const char* ExceptionStrings[] = { - "Division by Zero", - "Debug", - "Non Maskable Interrupt", - "Breakpoint", - "Into Detected Overflow", - "Out of Bounds", - "Invalid Opcode", - "No Coprocessor", - "Double Fault", - "Coprocessor Segment Overrun", - "Bad TSS", - "Segment Not Present", - "Stack Fault", - "General Protection Fault", - "Page Fault", - "Unknown Interrupt", - "Coprocessor Fault", - "Alignment Check", - "Machine Check", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved", - "Reserved" -}; - +extern const char* ExceptionStrings[]; typedef struct __attribute__((packed)) { @@ -55,10 +21,10 @@ typedef struct __attribute__((packed)) { size_t ss; } EXCEPTION_FRAME; -static void* IRQ_Handlers[16] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 -}; + +typedef void (*IRQHandler)(INTERRUPT_FRAME* Frame); + +extern IRQHandler IRQ_Handlers[16]; void IRQ_Common(INTERRUPT_FRAME* Frame, size_t Interupt); void ISR_Common(INTERRUPT_FRAME* Frame, size_t Interrupt); diff --git a/chroma/inc/kernel/video/tty.h b/chroma/inc/kernel/video/tty.h deleted file mode 100644 index 0fcab05..0000000 --- a/chroma/inc/kernel/video/tty.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _KERNEL_TTY_H -#define _KERNEL_TTY_H - -#include - -void Term_Init(void); -void Term_PutChar(char c); -void Term_Write(const char* str, size_t len); -void Term_WriteStr(const char* str); - -#endif diff --git a/chroma/system/drivers/keyboard.c b/chroma/system/drivers/keyboard.c index a4fe573..cf52ea6 100644 --- a/chroma/system/drivers/keyboard.c +++ b/chroma/system/drivers/keyboard.c @@ -36,6 +36,18 @@ char keys[128] = { +void KbdEcho() { + if(!KbdFlags.EchoCount) { + if(!KbdFlags.Echo) { + Send8042(0xEE); + } + } else { + KbdFlags.EchoCount = 0; + KbdFlags.Echo = 0; + } +} + + void UpdateKeyboard(uint8_t msg) { InputBuffer[0] = msg; @@ -79,23 +91,12 @@ void UpdateKeyboard(uint8_t msg) { if(msg & 0x80) { } else { - SerialPrintf("Key pressed: [\%c]\r\n", keys[msg]); + SerialPrintf("Key pressed: [\\%c]\r\n", keys[msg]); WriteChar(keys[msg]); } } -void KbdEcho() { - if(!KbdFlags.EchoCount) { - if(!KbdFlags.Echo) { - Send8042(0xEE); - } - } else { - KbdFlags.EchoCount = 0; - KbdFlags.Echo = 0; - } -} - void Send8042(size_t info) { for(size_t i = 0; i < 8; i++) { unsigned char chr = (unsigned char) info; diff --git a/chroma/system/interrupts.c b/chroma/system/interrupts.c index 9a08447..409e453 100644 --- a/chroma/system/interrupts.c +++ b/chroma/system/interrupts.c @@ -36,6 +36,51 @@ #include #include +#define UNUSED(X) ((void)X) + +const char* ExceptionStrings[] = { + "Division by Zero", + "Debug", + "Non Maskable Interrupt", + "Breakpoint", + "Into Detected Overflow", + "Out of Bounds", + "Invalid Opcode", + "No Coprocessor", + "Double Fault", + "Coprocessor Segment Overrun", + "Bad TSS", + "Segment Not Present", + "Stack Fault", + "General Protection Fault", + "Page Fault", + "Unknown Interrupt", + "Coprocessor Fault", + "Alignment Check", + "Machine Check", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved", + "Reserved" +}; + +typedef void (*IRQHandler)(INTERRUPT_FRAME* Frame); + +IRQHandler IRQ_Handlers[16] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + + typedef unsigned long long int uword_t; /* All of the ISR routines call this function for now. @@ -43,6 +88,9 @@ typedef unsigned long long int uword_t; ! Be careful! */ void ISR_Common(INTERRUPT_FRAME* Frame, size_t Exception) { + + UNUSED(Frame); + /* Only the first 32 ISR/IRQs are reserved for exceptions by the CPU. We can handle up to 512 interrupts total, though. */ if(Exception < 32) { @@ -58,6 +106,9 @@ void ISR_Common(INTERRUPT_FRAME* Frame, size_t Exception) { /* The common handler for exceptions that throw error codes, which give us useful insight into what went wrong. In pure Curle style, though, we just ignore the error code. */ void ISR_Error_Common(INTERRUPT_FRAME* Frame, size_t ErrorCode, size_t Exception) { + + UNUSED(Frame); + if(Exception < 32) { FillScreen(0x0000FF00); @@ -125,11 +176,14 @@ void InstallIRQ(int IRQ, void (*Handler)(INTERRUPT_FRAME* Frame)) { /* A simple wrapper that unlinks a function pointer, rendering the IRQ unused. */ void UninstallIRQHandler(int IRQ) { - IRQ_Handlers[IRQ] = 0; // 0 is used in the common check to make sure that the function is callable. + IRQ_Handlers[IRQ] = NULL; // 0 is used in the common check to make sure that the function is callable. // This removes this irq from that check, ergo the function will no longer be called. } void EmptyIRQ(INTERRUPT_FRAME* frame) { + + UNUSED(frame); + // Flash the borders green, then back to blue for(size_t y = 0; y < bootldr.fb_height; y++) { @@ -175,6 +229,8 @@ void EmptyIRQ(INTERRUPT_FRAME* frame) { static void KeyboardCallback(INTERRUPT_FRAME* frame) { + UNUSED(frame); + uint8_t msg = ReadPort(0x60, 1); UpdateKeyboard(msg); @@ -271,7 +327,7 @@ __attribute__((interrupt)) void ISR14Handler(INTERRUPT_FRAME* Frame, size_t Erro SerialPrintf("Page fault! Caused by: [\r\n"); - size_t FaultAddr = ReadControlRegister(2); + //size_t FaultAddr = ReadControlRegister(2); uint8_t FaultPres = ErrorCode & 0x1; uint8_t FaultRW = ErrorCode & 0x2; uint8_t FaultUser = ErrorCode & 0x4; diff --git a/chroma/system/memory/paging.c b/chroma/system/memory/paging.c index 36522a6..6d3fb4a 100644 --- a/chroma/system/memory/paging.c +++ b/chroma/system/memory/paging.c @@ -1,6 +1,6 @@ #include -__attribute__((aligned(4096))) static size_t Pagetable[512] = {0}; +//__attribute__((aligned(4096))) static size_t Pagetable[512] = {0}; #define LAST_ENTRY 0xFF8 @@ -72,7 +72,7 @@ void InitPaging() { SET_ADDRESS(PT_KERNEL + LAST_ENTRY, 0xF14003); MappingIterations = 1; // For every core: - for(size_t i = 0; i < (bootldr.numcores + 3) >> 2; i++) { + for(size_t i = 0; i < (bootldr.numcores + 3U) >> 2; i++) { // PT_KERNEL[512 - (iterations + 1)] = 0x14003 + (iterations * page-width) SET_ADDRESS(PT_KERNEL + LAST_ENTRY - (MappingIterations * 8), 0xF14003 + (4096 * MappingIterations)); MappingIterations++; @@ -115,7 +115,7 @@ void InitPagingOldImpl() { // Clear space for our pagetable size_t PagetableDest = 0x1000; - memset(PagetableDest, 0, 4096); + memset((char*)PagetableDest, 0, 4096); // Start setting pagetable indexes *((size_t*)PagetableDest) = 0x2003; // PDP at 0x2000, present & r/w diff --git a/chroma/system/memory/physmem.c b/chroma/system/memory/physmem.c index d8c03b5..4cc442a 100644 --- a/chroma/system/memory/physmem.c +++ b/chroma/system/memory/physmem.c @@ -2,7 +2,7 @@ #include uint8_t* Memory = ((uint8_t*)(&end)); -uint8_t MemoryStart; +uint8_t* MemoryStart; size_t MemoryBuckets; @@ -56,7 +56,7 @@ void ListMemoryMap() { - for(MMapEnt* MapEntry = &bootldr.mmap; MapEntry < (size_t) &bootldr + bootldr.size; MapEntry++) { + for(MMapEnt* MapEntry = &bootldr.mmap; (size_t)MapEntry < (size_t)&environment; MapEntry++) { char EntryType[8] = {0}; switch(MMapEnt_Type(MapEntry)) { case MMAP_FREE: @@ -103,9 +103,9 @@ void MemoryTest() { SerialPrintf("Initializing basic memory test..\r\n"); bool Passed = true; size_t FirstPage = SeekFrame(); - void* FirstPageAlloc = (void*) AllocateFrame(); + /*(void* FirstPageAlloc = (void*)*/ AllocateFrame(); size_t SecondPage = SeekFrame(); - void* SecondPageAlloc = (void*) AllocateFrame(); + /*void* SecondPageAlloc = (void*)*/ AllocateFrame(); if(!(FirstPage == 0 && SecondPage == 1)) { Passed = false; diff --git a/chroma/system/rw.c b/chroma/system/rw.c index c6d3e03..f86ca02 100644 --- a/chroma/system/rw.c +++ b/chroma/system/rw.c @@ -41,10 +41,9 @@ size_t ReadModelSpecificRegister(size_t MSR) { } size_t WriteModelSpecificRegister(size_t MSR, size_t Data) { - size_t DataLow = 0, DataHigh = 0; - DataLow = ((uint32_t*) &Data)[0]; - DataHigh = ((uint32_t*) &Data)[1]; + const size_t DataLow = Data & 0x00000000ffffffff; + const size_t DataHigh = (Data & 0xffffffff00000000) >> 32; __asm__ __volatile__ ("wrmsr" : : "a" (DataLow), "c" (MSR), "d" (DataHigh) :); @@ -104,6 +103,8 @@ size_t ReadControlRegister(int CRX) { __asm__ __volatile__ ("pushfq\n\t" "popq %[dest]" : [dest] "=r" (Data) : :); break; default: + SerialPrintf("invalid crx read %x\r\n",CRX); + Data = 0xdeadbeef; break; } @@ -148,9 +149,12 @@ size_t ReadExtendedControlRegister(size_t XCRX) { return (RegHigh << 32 | RegLow); } +//TODO: make this just have an assert as returning data for a write to catch +// errors that shoudlunt really happen doesent make alot of sense size_t WriteExtendedControlRegister(size_t XCRX, size_t Data){ - - __asm__ __volatile__("xsetbv" : : "a" ( ((uint32_t*) &Data)[0]), "c" (XCRX), "d" ( ((uint32_t*) &Data)[1] ) :); + uint32_t DataLow = Data & 0xffffffff; + uint32_t DataHigh = (Data & 0xffffffff00000000) >> 32; + __asm__ __volatile__("xsetbv" : : "a" (DataLow), "c" (XCRX), "d" (DataHigh) :); return Data; } diff --git a/chroma/video/draw.c b/chroma/video/draw.c index fdd2f5b..e145c3f 100644 --- a/chroma/video/draw.c +++ b/chroma/video/draw.c @@ -70,7 +70,7 @@ static void DrawChar(const char character, size_t x, size_t y) { // This one is crazy. Stick with me. - if((FONT[character][Row * Y + X] >> (Bit & 0x7)) & 1) { // Check the bit in the bitmap, if it's solid.. + if((FONT[(int)character][Row * Y + X] >> (Bit & 0x7)) & 1) { // Check the bit in the bitmap, if it's solid.. for(uint32_t ScaleY = 0; ScaleY < PrintInfo.charScale; ScaleY++) { // Take care of the scale height for(uint32_t ScaleX = 0; ScaleX < PrintInfo.charScale; ScaleX++) { // And the scale width @@ -267,7 +267,7 @@ void WriteChar(const char character) { } void WriteString(const char* string) { - for(int i = 0; i < strlen(string); i++) { + for(unsigned int i = 0; i < strlen(string); i++) { WriteChar(string[i]); } } @@ -276,15 +276,15 @@ void WriteStringWithFont(const char *inChar) { psf_t *font = (psf_t*) &_binary_font_psf_start; - int drawX, drawY, kx = 0, fontLine, bitMask, offset; + unsigned int drawX, drawY, kx = 0, fontLine, bitMask, offset; - int bytesPerLine = ( font -> glyphWidth + 7 ) / 8; + const unsigned int bytesPerLine = ( font -> glyphWidth + 7 ) / 8; while(*inChar) { unsigned char *glyph = (unsigned char*) &_binary_font_psf_start + font->headerSize - + (*inChar > 0 && *inChar < font->numGlyphs ? *inChar : 0) * + + (*inChar > 0 && *inChar < (int)font->numGlyphs ? *inChar : 0) * font->glyphSize; diff --git a/chroma/video/tty.c b/chroma/video/tty.c deleted file mode 100644 index 98af3c8..0000000 --- a/chroma/video/tty.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include -#include -#include -#include - -#include - -static const size_t TERM_WIDTH = 80; -static const size_t TERM_HEIGHT = 25; - -size_t TERM_ROW; -size_t TERM_COL; -uint8_t TERM_COLOR; - -uint16_t* TERM_BUFFER; - -void Term_Init(void) { - - TERM_ROW = 0; - TERM_COL = 0; - TERM_COLOR = VGACharColor(VGA_COLOR_LIGHTGREY, VGA_COLOR_BLACK); - - TERM_BUFFER = (uint16_t*) 0xB8000; - - for(size_t y = 0; y < TERM_HEIGHT; y++) { - for(size_t x = 0; x < TERM_WIDTH; x++) { - const size_t index = y * TERM_WIDTH + x; - TERM_BUFFER[index] = VGAChar(' ', TERM_COLOR); - } - } -} - -void Term_SetColor(uint8_t color) { - TERM_COLOR = color; -} - -void Term_PutVGAChar(char c, uint8_t color, size_t x, size_t y) { - const size_t index = y * TERM_WIDTH + x; - TERM_BUFFER[index] = VGAChar(c, color); -} - -void Term_PutChar(char c) { - Term_PutVGAChar(c, TERM_COLOR, TERM_COL, TERM_ROW); - - if(++TERM_COL == TERM_WIDTH) { - TERM_COL = 0; - if(++TERM_ROW == TERM_HEIGHT) - TERM_ROW = 0; - } -} - -void Term_Write(const char* str, size_t len) { - for(size_t i = 0; i < len; i++) - Term_PutChar(str[i]); -} - -void Term_WriteString(const char* str) { - Term_Write(str, strlen(str)); -} - diff --git a/chroma/video/tty.d b/chroma/video/tty.d deleted file mode 100644 index 02cf1e2..0000000 --- a/chroma/video/tty.d +++ /dev/null @@ -1,6 +0,0 @@ -chroma/video/tty.o: chroma/video/tty.c chroma/inc/kernel/video/tty.h \ - chroma/inc/kernel/video/vga-textmode.h - -chroma/inc/kernel/video/tty.h: - -chroma/inc/kernel/video/vga-textmode.h: diff --git a/iso/boot/initrd b/iso/boot/initrd index 56e794e13bb4b67ba6dd58261484a092ddd1329c..7f049bee0a7ec78148c3b12ea41ec2f3cd83013a 100755 GIT binary patch delta 8583 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 delta 8521 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 diff --git a/kernel.elf b/kernel.elf deleted file mode 100755 index 56e794e13bb4b67ba6dd58261484a092ddd1329c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34496 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

ZMl25+{ zL`mNtmq@-M*FAmxsg->CK^00m{(X{9zd(}AcYsgpMhHI=N=aDB*n?7jM6Q!xkrn$S zzfszw`k=DCsx{B!5tjyS^UwOTJPi_r# zD&yZT{jfyxyKF*Uk$P9?{0aDLB%glECK-Q|X&mVfb}8xW>Tfw8*FR3d?~?d0>-citw@ChfO1>if zuaEm_$!8PR$qV4qIiFJT}9D}`SeRY$^2U-ze}!T zD<%Fi$){gFOP0S&^65w8lKJbvr*$c`PVfhH2W{go^4{iP&23FPLF^#acqfd3pe#BPb!=h005lw! z!4;w-@z$g~ZY7-TXx$|wYC3#)ZQI#g?Ztq4-Elu`#>?RD<~G={y{Q#ll=Z@|P+6j@ z)MQ=rB}*r%}`l~*UEY3?#<0Lj;&rksMX%> z+r1un)=lrD%WRe3vCZjg$5F4_UC&Q{VESlbc?yH|M=Z%oDdb-XYHA^JmlM7Ee>#u1zkubyI7*YZH`^Y+OH$ zy9hI4#}NoFF2mv0Qiy?@7;qY6iV$k6Q4iVnq?2 z=RM~!i%ukh0e#RRl16A?cyOzj!11daYm8n#1gg2-CVo9 z)y*34=N$S1q3fhk|E#5n>L{?}+~oemj?vC+Zj3YhAsoxi7HceAtOI{~JZNr<)u%?x z(L|J@GYOB>ui3<31JMH)PA-l|I~C%?qsJC@Q0F$rZfoDQ-Pg1k)Ym5HRz2rKG_%__ zx3|lU{l7@)P?ffJT$YHWi2a@^qBwMqrfU`benx+OHsle4wQEuvSW}B! zx4e}|snOdH$_qK%mN5E*NBz1ePfF7tam95@9+9WMDhf_q$0R5HGDhdo^RO$m&+Qfx MH|v6uPHg{w0Hux23IG5A diff --git a/sync.iso b/sync.iso index 7cb79e1c3ad32318e33e47b12023d860d23be310..8e6260736bb3248ba6065a90af100395c6900920 100644 GIT binary patch delta 18883 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 K9tTGr-S)p94sbvK delta 18820 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