Fix running on bochs by forcing x86 pentium codegen

This commit is contained in:
2025-12-07 14:48:27 +01:00
parent 69dde0bf6a
commit 4b94ea7a41
8 changed files with 18 additions and 7 deletions

View File

@@ -1,6 +1,7 @@
clang_res_dir := $(shell $(cc) -print-resource-dir)
kernel_cflags := --target=i386-none-elf \
-march=pentium \
-nostdinc \
-nostdlib \
-ffreestanding \
@@ -8,7 +9,8 @@ kernel_cflags := --target=i386-none-elf \
-std=c11 \
-pedantic \
-Wall \
-Wextra
-Wextra \
-ffunction-sections -fdata-sections
ifeq ($(build),debug)
kernel_cflags += -O0 -g
@@ -27,6 +29,8 @@ kernel_ldflags := -mcpu=i386 \
-flto \
-static \
-Wl,--build-id=none \
-Wl,--gc-sections \
-Wl,--strip-all \
$(clang_res_dir)/lib/*/libclang_rt.builtins-i386.a
ifeq ($(build),debug)

View File

@@ -79,7 +79,7 @@ static void pmm_init1(void) {
}
void bootmain(void *mbootptr) {
multiboot_set((struct multiboot *)VIRT(mbootptr));
multiboot_set((struct multiboot *)((uptr_t)mbootptr + VIRT_BASE));
cpu_init();

View File

@@ -39,11 +39,11 @@ SECTIONS {
. = 0x00100000;
.multiboot ALIGN(4K): {
*(.multiboot)
KEEP(*(.multiboot))
}
.boot ALIGN(4K) : {
*(.boot)
KEEP(*(.boot))
}
. += VIRT_BASE;
@@ -64,5 +64,11 @@ SECTIONS {
*(.bss)
}
/DISCARD/ : {
*(.eh_frame)
*(.comment)
*(.note.gnu.build-id)
}
__kernel_end = .;
}

View File

@@ -89,6 +89,7 @@ static void tss_init(void) {
tss.fs = 0x10 | 0x3;
tss.fs = 0x10 | 0x3;
tss.ss = 0x10 | 0x3;
tss.iomap = sizeof(tss);
tss_flush();
}

View File

@@ -38,7 +38,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <sync/spinlock.h>
#define VIRT_BASE 0xC0000000
#define VIRT(x) (((uptr_t)(x)) + VIRT_BASE)
#define PAGE_SIZE 0x1000