aboutsummaryrefslogtreecommitdiff
path: root/i686
diff options
context:
space:
mode:
authoraqua <aqua@iserlohn-fortress.net>2022-11-02 23:09:18 +0200
committeraqua <aqua@iserlohn-fortress.net>2022-11-02 23:09:18 +0200
commit509bf85036b3c345f832558a299257effabba108 (patch)
tree0dda6c4fd5e072410d958b65af90755c5014b514 /i686
parentmakefile: make all target the default (diff)
downloadkernel-509bf85036b3c345f832558a299257effabba108.tar.xz
fix compiler warnings
Diffstat (limited to 'i686')
-rw-r--r--i686/gdt.h6
-rw-r--r--i686/isr.c12
-rw-r--r--i686/lidt.c6
-rw-r--r--i686/paging.h6
-rw-r--r--i686/sys/control.h6
-rw-r--r--i686/sys/cpuid.h2
6 files changed, 20 insertions, 18 deletions
diff --git a/i686/gdt.h b/i686/gdt.h
index 9148c3d..f00ff7f 100644
--- a/i686/gdt.h
+++ b/i686/gdt.h
@@ -14,9 +14,9 @@ struct __attribute__((packed)) Access {
enum Ring privilege : 2; // descriptor privilege level
bool present : 1; // true for every active segment
};
-_Static_assert(sizeof(struct Access) == 1);
+_Static_assert(sizeof(struct Access) == 1, "access byte size");
-static const struct Access null_access = {};
+static const struct Access null_access = {false, false, false, false, false, false, false};
static const struct Access ktext_access = {.readwrite = true, .executable = true, .segment = true, .present = true};
static const struct Access kdata_access = {.readwrite = true, .segment = true, .present = true};
@@ -43,7 +43,7 @@ struct __attribute__((packed)) SegmentDescriptor_t {
bool granularity : 1; // limit scaled by 4k when set
uint8_t base_31_24; // high bits of segment address
};
-_Static_assert(sizeof(struct SegmentDescriptor_t) == 8);
+_Static_assert(sizeof(struct SegmentDescriptor_t) == 8, "segment descriptor size");
void SegmentDescriptor(struct SegmentDescriptor_t *self, unsigned base, unsigned limit, uint8_t access);
diff --git a/i686/isr.c b/i686/isr.c
index 6fbe200..862f74a 100644
--- a/i686/isr.c
+++ b/i686/isr.c
@@ -17,30 +17,32 @@ abort_handler(struct interrupt_frame *frame)
}
__attribute__((interrupt)) void
-syscall_handler(struct interrupt_frame *)
+syscall_handler(__attribute__((unused)) struct interrupt_frame *frame)
{
- printf("syscall\n");
+ unsigned int n;
+ asm volatile("mov %%eax, %0" : "=r"(n));
+ printf("syscall %x\n, n");
abort();
}
void pic_clear(unsigned char irq);
__attribute__((interrupt)) void
-irq0x00(struct interrupt_frame *)
+irq0x00(__attribute__((unused)) struct interrupt_frame *frame)
{
pic_clear(0x00);
}
extern void ps2_keyboard_irq_handler();
__attribute__((interrupt)) void
-irq0x01(struct interrupt_frame *)
+irq0x01(__attribute__((unused)) struct interrupt_frame *frame)
{
ps2_keyboard_irq_handler();
pic_clear(0x01);
}
__attribute__((interrupt)) void
-irq0x0c(struct interrupt_frame *)
+irq0x0c(__attribute__((unused)) struct interrupt_frame *frame)
{
printf("irq 0x0c\n");
pic_clear(0x0c);
diff --git a/i686/lidt.c b/i686/lidt.c
index 8a70bf3..59a2611 100644
--- a/i686/lidt.c
+++ b/i686/lidt.c
@@ -9,7 +9,7 @@ struct __attribute__((packed)) Pointer {
enum Type {
Null = 0,
- Intr = 0b10001110, // 32-bit interrupt
+ Intr = 0x8e, // 1000 1110 32-bit interrupt
};
struct __attribute__((packed)) Gate_t {
@@ -19,7 +19,7 @@ struct __attribute__((packed)) Gate_t {
uint8_t type; // interrupt type
uint16_t offset_31_16; // segment offset high
};
-_Static_assert(sizeof(struct Gate_t) == 8);
+_Static_assert(sizeof(struct Gate_t) == 8, "interrupt gate size");
void
Gate(struct Gate_t *entry, void (*f)(struct interrupt_frame *), uint16_t selector)
@@ -47,7 +47,7 @@ idt_install()
Gate(&interrupt_table[0x2c], &irq0x0c, 0x10);
// syscall 0x80
- Gate(&interrupt_table[0x80], &abort_handler, 0x10);
+ Gate(&interrupt_table[0x80], &syscall_handler, 0x10);
const struct Pointer ptr = {.limit = sizeof(interrupt_table) - 1, .base = (unsigned)&interrupt_table};
asm volatile("lidt (%0)" : : "a"(&ptr));
diff --git a/i686/paging.h b/i686/paging.h
index cff0506..f9c04a8 100644
--- a/i686/paging.h
+++ b/i686/paging.h
@@ -16,7 +16,7 @@ struct __attribute__((packed)) DirectoryEntry {
unsigned int __available__ : 3; // available to the OS
unsigned int address : 20;
};
-_Static_assert(sizeof(struct DirectoryEntry) == 4);
+_Static_assert(sizeof(struct DirectoryEntry) == 4, "DirectoryEntry size");
// DirectoryEntry4MB
// |31| | | | | | | | |22|21|20| | | | | | |13|12|11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
@@ -38,7 +38,7 @@ struct __attribute__((packed)) DirectoryEntry4MB {
unsigned rsvd : 1; // 21
unsigned int address_low : 10;
};
-_Static_assert(sizeof(struct DirectoryEntry4MB) == 4);
+_Static_assert(sizeof(struct DirectoryEntry4MB) == 4, "DirectoryEntry4M size");
// TableEntry
// |31| | | | | | | | | | | | | | | | | | | |11| | 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
@@ -56,4 +56,4 @@ struct __attribute__((packed)) TableEntry {
unsigned int __available__ : 3; // available to the OS
unsigned int address : 20;
};
-_Static_assert(sizeof(struct TableEntry) == 4);
+_Static_assert(sizeof(struct TableEntry) == 4, "TableEntry size");
diff --git a/i686/sys/control.h b/i686/sys/control.h
index 0231236..1b38472 100644
--- a/i686/sys/control.h
+++ b/i686/sys/control.h
@@ -1,6 +1,6 @@
#pragma once
-static void
+static inline void
abort()
{
asm volatile(R"(cli
@@ -8,13 +8,13 @@ h: hlt
jmp h)");
}
-static void
+static inline void
enable_interrupts()
{
asm volatile("sti");
}
-static void
+static inline void
disable_interrupts()
{
asm volatile("cli");
diff --git a/i686/sys/cpuid.h b/i686/sys/cpuid.h
index f2ffe37..862601f 100644
--- a/i686/sys/cpuid.h
+++ b/i686/sys/cpuid.h
@@ -12,7 +12,7 @@ struct CPUVersion {
unsigned int family_ex : 8;
unsigned int __unused_2 : 4;
} __attribute__((packed, aligned(__alignof__(unsigned int))));
-_Static_assert(sizeof(struct CPUVersion) == sizeof(unsigned int));
+_Static_assert(sizeof(struct CPUVersion) == sizeof(unsigned int), "cpuid version struct size");
unsigned int
family(const struct CPUVersion v)