Skip to content

Commit 62e8093

Browse files
committed
修复O3优化下发生页异常问题
1 parent 8c2c621 commit 62e8093

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

src/core/cpu/smp.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,19 @@ static void apu_gdt_setup(){
7676
: "memory"
7777
);
7878

79-
uint64_t address = ((uint64_t)(&cpu->tss0));
79+
uint64_t address = (uint64_t) &(cpu->tss0);
8080
uint64_t low_base = (((address & 0xffffffU)) << 16U);
8181
uint64_t mid_base = (((((address >> 24U)) & 0xffU)) << 56U);
8282
uint64_t high_base = (address >> 32U);
8383
uint64_t access_byte = (((uint64_t)(0x89U)) << 40U);
84-
uint64_t limit = ((uint64_t)((uint32_t)(sizeof(tss_t) - 1U)));
84+
uint64_t limit = ((uint64_t)(uint32_t)(sizeof(tss_t) - 1U));
85+
86+
printk("",address); // 用于对抗编译器优化
87+
8588
cpu->gdtEntries[5] = (((low_base | mid_base) | limit) | access_byte);
8689
cpu->gdtEntries[6] = high_base;
8790

88-
cpu->tss0.ist[0] = ((uint64_t) &cpu->tss_stack) + sizeof(tss_stack_t);
91+
cpu->tss0.ist[0] = ((uint64_t) &(cpu->tss_stack)) + sizeof(tss_stack_t);
8992

9093
__asm__ volatile("ltr %[offset];" : : [offset]"rm"(0x28U) : "memory");
9194
}

src/core/mem/page.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ __IRQHANDLER static void page_fault_handle(interrupt_frame_t *frame,uint64_t err
2727
switch_page_directory(get_kernel_pagedir());
2828
uint64_t faulting_address;
2929
__asm__ volatile("mov %%cr2, %0" : "=r"(faulting_address));
30-
logkf("Page fault, virtual address 0x%x\n", faulting_address);
30+
logkf("Page fault, virtual address 0x%x %p\n", faulting_address,frame->rip);
3131
if(get_current_task() != NULL){
3232
logkf("Current process PID: %d (%s)\n",get_current_task()->pid,get_current_task()->name);
3333
}

src/include/krlibc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
/**
44
* 定义CP_Kernel的各种属性
55
*/
6-
#define KERNEL_NAME "CP_Kernel-x86_64-0.0.8" //内核编号
6+
#define KERNEL_NAME "CP_Kernel-x86_64-0.1.0" //内核编号
77
#define MAX_CPU (256*2) //最大支持CPU核心数 256
88
#define STACK_SIZE 32768 //栈大小(byte)
99
#define MAX_WAIT_INDEX 100000 //阻塞最大循环数

xmake.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set_project("CoolPotOS")
33
add_rules("mode.debug", "mode.release")
44
add_requires("zig")
55

6-
--set_optimize("fastest")
6+
set_optimize("fastest")
77
set_languages("c23")
88
--set_warnings("all", "extra", "pedantic", "error")
99

0 commit comments

Comments
 (0)