fix: temporary disable the cse optimizations that cause kernel misbehave.
authorMinep <zelong56@gmail.com>
Sun, 23 Oct 2022 01:16:07 +0000 (02:16 +0100)
committerMinep <zelong56@gmail.com>
Sun, 23 Oct 2022 01:16:07 +0000 (02:16 +0100)
README.md
lunaix-os/config/make-cc
lunaix-os/makefile

index aa08848cbe3340c70f5599a3242918b7425b9051..cdeecbe60280b3467a1cff844d9ca3e0d2e05640 100644 (file)
--- a/README.md
+++ b/README.md
@@ -63,8 +63,8 @@ LunaixOS - 一个简单的,详细的,POSIX兼容的(但愿!),带有
 本项目支持的make命令:
 | 命令 | 用途 |
 |---|---|
 本项目支持的make命令:
 | 命令 | 用途 |
 |---|---|
-| `make all` | 构建镜像(`-O1`) |
-| `make instable` | æ\9e\84建é\95\9cå\83\8fï¼\88`-O2`ï¼\89**â\80»** |
+| `make all` | 构建镜像(`-O2`,但禁用CSE相关的优化项 **※** ) |
+| `make instable` | æ\9e\84建é\95\9cå\83\8fï¼\88`-O2`ï¼\8cå¼\80å\90¯CSEç\9b¸å\85³ä¼\98å\8c\96ï¼\89 |
 | `make all-debug` | 构建适合调试用的镜像(`-Og`) |
 | `make run` | 使用QEMU运行build目录下的镜像|
 | `make debug-qemu` | 构建并使用QEMU进行调试 |
 | `make all-debug` | 构建适合调试用的镜像(`-Og`) |
 | `make run` | 使用QEMU运行build目录下的镜像|
 | `make debug-qemu` | 构建并使用QEMU进行调试 |
@@ -72,7 +72,7 @@ LunaixOS - 一个简单的,详细的,POSIX兼容的(但愿!),带有
 | `make debug-qemu-vscode` | 用于vscode整合 |
 | `make clean` | 删除build目录 |
 
 | `make debug-qemu-vscode` | 用于vscode整合 |
 | `make clean` | 删除build目录 |
 
-**※:由于在`-O2`模式下,GCC会进行大量的优化,这导致LunaixOS会出现一些非常奇怪、离谱的bug,从而影响到基本运行。调试这些bug需要大量的汗水与时间,属于日后维护的任务。所以,在目前,LunaixOS将默认最大的优化程度设置为比较安全的`-O1`。`make instable`仅用于方便日后的对该问题的进一步调试。**
+**※:由于在`-O2`模式下,GCC会进行CSE优化,这导致LunaixOS会出现一些非常奇怪、离谱的bug,从而影响到基本运行。具体原因有待调查。**
 
 ## 运行以及Issue
 
 
 ## 运行以及Issue
 
index 71f3b7675e59f4f97d678d35f8df2f7269f9da70..ed1f6786021a640316dc2fba02a091fb78d12a61 100644 (file)
@@ -3,13 +3,20 @@ AS := i686-elf-as
 
 
 ARCH_OPT := -D__ARCH_IA32
 
 
 ARCH_OPT := -D__ARCH_IA32
-O := -O1
+O := -O2
 W := -Wall -Wextra -Wno-unknown-pragmas \
                -Wno-unused-function \
                -Wno-unused-but-set-variable \
                -Wno-unused-parameter \
                -Wno-unused-variable\
                -Werror=incompatible-pointer-types
 W := -Wall -Wextra -Wno-unknown-pragmas \
                -Wno-unused-function \
                -Wno-unused-but-set-variable \
                -Wno-unused-parameter \
                -Wno-unused-variable\
                -Werror=incompatible-pointer-types
-               
-CFLAGS := -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT)
+
+OFLAGS := -fno-gcse\
+                 -fno-gcse-lm\
+                 -fno-cse-follow-jumps\
+                 -fno-cse-skip-blocks\
+                 -fno-optimize-strlen\
+                 -fno-tree-builtin-call-dce 
+
+CFLAGS := -std=gnu99 -ffreestanding $(O) $(OFLAGS) $(W) $(ARCH_OPT)
 LDFLAGS := -ffreestanding $(O) -nostdlib -lgcc
\ No newline at end of file
 LDFLAGS := -ffreestanding $(O) -nostdlib -lgcc
\ No newline at end of file
index 2735946ad29feaa663c907eb6ce755be91392df8..058bcc8e8da5a5741a3f1e76f71028663bc7f008 100644 (file)
@@ -39,7 +39,7 @@ $(BUILD_DIR)/$(OS_ISO): $(ISO_DIR) $(BIN_DIR)/$(OS_BIN) GRUB_TEMPLATE
 
 all: clean $(BUILD_DIR)/$(OS_ISO)
 
 
 all: clean $(BUILD_DIR)/$(OS_ISO)
 
-instable: O := -O2
+instable: CFLAGS := -g -std=gnu99 -ffreestanding $(O) $(W) $(ARCH_OPT) -D__LUNAIXOS_DEBUG__
 instable: all
 
 all-debug: O := -Og
 instable: all
 
 all-debug: O := -Og