From 3d6fcb8d8c09c7e30f704a5b12a17d0086bef52f Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sun, 5 Aug 2018 17:50:56 +0800 Subject: [PATCH] Fix x86_64. Not elegant. --- .gitignore | 2 +- kernel/Cargo.toml | 3 + kernel/Makefile | 41 +- kernel/build.rs | 12 +- kernel/src/arch/x86_64/boot/vector.asm | 1280 ----------------- kernel/src/arch/x86_64/interrupt/handler.rs | 3 + .../arch/x86_64/{boot => interrupt}/trap.asm | 12 +- kernel/src/lib.rs | 8 +- 8 files changed, 29 insertions(+), 1332 deletions(-) delete mode 100644 kernel/src/arch/x86_64/boot/vector.asm rename kernel/src/arch/x86_64/{boot => interrupt}/trap.asm (78%) diff --git a/.gitignore b/.gitignore index 23d1ed1..637c5b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ build target -kernel/src/arch/x86_64/boot/vector.asm \ No newline at end of file +/kernel/src/arch/x86_64/interrupt/vector.asm diff --git a/kernel/Cargo.toml b/kernel/Cargo.toml index 28a0cb3..6c756cc 100644 --- a/kernel/Cargo.toml +++ b/kernel/Cargo.toml @@ -3,6 +3,9 @@ name = "ucore" version = "0.1.0" authors = ["Runji Wang "] +[lib] +crate-type = ["staticlib", "rlib"] + [features] use_apic = [] link_user_program = [] diff --git a/kernel/Makefile b/kernel/Makefile index 11722b9..c81429d 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -27,7 +27,7 @@ user_bins := $(patsubst $(user_bin_path)/%.d, $(user_bin_path)/%, $(wildcard $(u user_obj := build/$(arch)/user.o SFSIMG := ../user/ucore32.img ifeq ($(arch), x86_64) -qemu_opts := -cdrom $(iso) -smp 4 -serial mon:stdio -drive file=$(SFSIMG),media=disk,cache=writeback +qemu_opts := -cdrom $(iso) -smp 4 -serial mon:stdio -drive file=$(SFSIMG),media=disk,cache=writeback -device isa-debug-exit endif ifeq ($(arch), riscv32) qemu_opts := -machine virt -kernel $(iso) -nographic @@ -42,25 +42,8 @@ features := $(features) link_user_program assembly_object_files := $(assembly_object_files) $(user_obj) endif -# Link user-riscv.img for RV32 -ifeq ($(arch), riscv32) -riscv_user_img_obj := build/riscv32/user-riscv.o -assembly_object_files := $(assembly_object_files) $(riscv_user_img_obj) -endif - -ifdef travis -test := 1 -features := $(features) qemu_auto_exit -endif - -ifdef test -features := $(features) test -# enable shutdown inside the qemu -qemu_opts := $(qemu_opts) -device isa-debug-exit -endif - -ifdef int -qemu_opts := $(qemu_opts) -d int +ifdef d +qemu_opts := $(qemu_opts) -d $(d) endif build_args := --target $(target).json --features "$(features)" @@ -69,6 +52,10 @@ ifeq ($(mode), release) build_args := $(build_args) --release endif +ifeq ($(arch), x86_64) +build_args := $(build_args) --lib +endif + ifeq ($(OS),Windows_NT) uname := Win32 @@ -124,6 +111,7 @@ build/x86_64/os.iso: $(kernel) $(grub_cfg) @rm -r build/isofiles build/riscv32/os.iso: kernel + @mkdir -p build/riscv32 @cd ../riscv-pk && \ mkdir -p build && \ cd build && \ @@ -138,7 +126,7 @@ build/riscv32/os.iso: kernel $(kernel): kernel $(assembly_object_files) $(linker_script) @$(ld) -n --gc-sections -T $(linker_script) -o $(kernel) \ - $(assembly_object_files) $(rust_lib) + $(assembly_object_files) target/x86_64-blog_os/$(mode)/libucore.a kernel: @CC=$(cc) cargo xbuild $(build_args) @@ -148,18 +136,7 @@ build/x86_64/boot/%.o: $(boot_src)/%.asm @mkdir -p $(shell dirname $@) @nasm -felf64 $< -o $@ -build/riscv32/boot/%.o: $(boot_src)/%.asm - @mkdir -p $(shell dirname $@) - @$(as) -march=rv32i $< -o $@ - # make user.o from binary files $(user_obj): $(user_bins) @cd $(user_bin_path) && \ $(ld) -o $(abspath $@) $(patsubst %, -b binary %, $(notdir $(user_bins))) - -$(riscv_user_img_obj): ../user/user-riscv.img - @cd ../user && $(ld) -o $(abspath $@) -b binary $(notdir $<) - -# patch Rust core for RISCV32I atomic -patch-core: - @patch -p0 /rust/rust-riscv-rust-1.26.0-1-dev/src/libcore/sync/atomic.rs src/arch/riscv32/atomic.patch \ No newline at end of file diff --git a/kernel/build.rs b/kernel/build.rs index bd9d470..6bbe313 100644 --- a/kernel/build.rs +++ b/kernel/build.rs @@ -15,11 +15,11 @@ fn main() { } fn gen_vector_asm() -> Result<()> { - let mut f = File::create("src/arch/x86_64/boot/vector.asm").unwrap(); + let mut f = File::create("src/arch/x86_64/interrupt/vector.asm").unwrap(); writeln!(f, "# generated by build.rs - do not edit")?; - writeln!(f, "section .text")?; - writeln!(f, "extern __alltraps")?; + writeln!(f, ".section .text")?; + writeln!(f, ".intel_syntax noprefix")?; for i in 0..256 { writeln!(f, "vector{}:", i)?; if !(i == 8 || (i >= 10 && i <= 14) || i == 17) { @@ -29,11 +29,11 @@ fn gen_vector_asm() -> Result<()> { writeln!(f, "\tjmp __alltraps")?; } - writeln!(f, "\nsection .rodata")?; - writeln!(f, "global __vectors")?; + writeln!(f, "\n.section .rodata")?; + writeln!(f, ".global __vectors")?; writeln!(f, "__vectors:")?; for i in 0..256 { - writeln!(f, "\tdq vector{}", i)?; + writeln!(f, "\t.quad vector{}", i)?; } Ok(()) } \ No newline at end of file diff --git a/kernel/src/arch/x86_64/boot/vector.asm b/kernel/src/arch/x86_64/boot/vector.asm deleted file mode 100644 index 6ae8219..0000000 --- a/kernel/src/arch/x86_64/boot/vector.asm +++ /dev/null @@ -1,1280 +0,0 @@ -# generated by build.rs - do not edit -section .text -extern __alltraps -vector0: - push 0 - push 0 - jmp __alltraps -vector1: - push 0 - push 1 - jmp __alltraps -vector2: - push 0 - push 2 - jmp __alltraps -vector3: - push 0 - push 3 - jmp __alltraps -vector4: - push 0 - push 4 - jmp __alltraps -vector5: - push 0 - push 5 - jmp __alltraps -vector6: - push 0 - push 6 - jmp __alltraps -vector7: - push 0 - push 7 - jmp __alltraps -vector8: - push 8 - jmp __alltraps -vector9: - push 0 - push 9 - jmp __alltraps -vector10: - push 10 - jmp __alltraps -vector11: - push 11 - jmp __alltraps -vector12: - push 12 - jmp __alltraps -vector13: - push 13 - jmp __alltraps -vector14: - push 14 - jmp __alltraps -vector15: - push 0 - push 15 - jmp __alltraps -vector16: - push 0 - push 16 - jmp __alltraps -vector17: - push 17 - jmp __alltraps -vector18: - push 0 - push 18 - jmp __alltraps -vector19: - push 0 - push 19 - jmp __alltraps -vector20: - push 0 - push 20 - jmp __alltraps -vector21: - push 0 - push 21 - jmp __alltraps -vector22: - push 0 - push 22 - jmp __alltraps -vector23: - push 0 - push 23 - jmp __alltraps -vector24: - push 0 - push 24 - jmp __alltraps -vector25: - push 0 - push 25 - jmp __alltraps -vector26: - push 0 - push 26 - jmp __alltraps -vector27: - push 0 - push 27 - jmp __alltraps -vector28: - push 0 - push 28 - jmp __alltraps -vector29: - push 0 - push 29 - jmp __alltraps -vector30: - push 0 - push 30 - jmp __alltraps -vector31: - push 0 - push 31 - jmp __alltraps -vector32: - push 0 - push 32 - jmp __alltraps -vector33: - push 0 - push 33 - jmp __alltraps -vector34: - push 0 - push 34 - jmp __alltraps -vector35: - push 0 - push 35 - jmp __alltraps -vector36: - push 0 - push 36 - jmp __alltraps -vector37: - push 0 - push 37 - jmp __alltraps -vector38: - push 0 - push 38 - jmp __alltraps -vector39: - push 0 - push 39 - jmp __alltraps -vector40: - push 0 - push 40 - jmp __alltraps -vector41: - push 0 - push 41 - jmp __alltraps -vector42: - push 0 - push 42 - jmp __alltraps -vector43: - push 0 - push 43 - jmp __alltraps -vector44: - push 0 - push 44 - jmp __alltraps -vector45: - push 0 - push 45 - jmp __alltraps -vector46: - push 0 - push 46 - jmp __alltraps -vector47: - push 0 - push 47 - jmp __alltraps -vector48: - push 0 - push 48 - jmp __alltraps -vector49: - push 0 - push 49 - jmp __alltraps -vector50: - push 0 - push 50 - jmp __alltraps -vector51: - push 0 - push 51 - jmp __alltraps -vector52: - push 0 - push 52 - jmp __alltraps -vector53: - push 0 - push 53 - jmp __alltraps -vector54: - push 0 - push 54 - jmp __alltraps -vector55: - push 0 - push 55 - jmp __alltraps -vector56: - push 0 - push 56 - jmp __alltraps -vector57: - push 0 - push 57 - jmp __alltraps -vector58: - push 0 - push 58 - jmp __alltraps -vector59: - push 0 - push 59 - jmp __alltraps -vector60: - push 0 - push 60 - jmp __alltraps -vector61: - push 0 - push 61 - jmp __alltraps -vector62: - push 0 - push 62 - jmp __alltraps -vector63: - push 0 - push 63 - jmp __alltraps -vector64: - push 0 - push 64 - jmp __alltraps -vector65: - push 0 - push 65 - jmp __alltraps -vector66: - push 0 - push 66 - jmp __alltraps -vector67: - push 0 - push 67 - jmp __alltraps -vector68: - push 0 - push 68 - jmp __alltraps -vector69: - push 0 - push 69 - jmp __alltraps -vector70: - push 0 - push 70 - jmp __alltraps -vector71: - push 0 - push 71 - jmp __alltraps -vector72: - push 0 - push 72 - jmp __alltraps -vector73: - push 0 - push 73 - jmp __alltraps -vector74: - push 0 - push 74 - jmp __alltraps -vector75: - push 0 - push 75 - jmp __alltraps -vector76: - push 0 - push 76 - jmp __alltraps -vector77: - push 0 - push 77 - jmp __alltraps -vector78: - push 0 - push 78 - jmp __alltraps -vector79: - push 0 - push 79 - jmp __alltraps -vector80: - push 0 - push 80 - jmp __alltraps -vector81: - push 0 - push 81 - jmp __alltraps -vector82: - push 0 - push 82 - jmp __alltraps -vector83: - push 0 - push 83 - jmp __alltraps -vector84: - push 0 - push 84 - jmp __alltraps -vector85: - push 0 - push 85 - jmp __alltraps -vector86: - push 0 - push 86 - jmp __alltraps -vector87: - push 0 - push 87 - jmp __alltraps -vector88: - push 0 - push 88 - jmp __alltraps -vector89: - push 0 - push 89 - jmp __alltraps -vector90: - push 0 - push 90 - jmp __alltraps -vector91: - push 0 - push 91 - jmp __alltraps -vector92: - push 0 - push 92 - jmp __alltraps -vector93: - push 0 - push 93 - jmp __alltraps -vector94: - push 0 - push 94 - jmp __alltraps -vector95: - push 0 - push 95 - jmp __alltraps -vector96: - push 0 - push 96 - jmp __alltraps -vector97: - push 0 - push 97 - jmp __alltraps -vector98: - push 0 - push 98 - jmp __alltraps -vector99: - push 0 - push 99 - jmp __alltraps -vector100: - push 0 - push 100 - jmp __alltraps -vector101: - push 0 - push 101 - jmp __alltraps -vector102: - push 0 - push 102 - jmp __alltraps -vector103: - push 0 - push 103 - jmp __alltraps -vector104: - push 0 - push 104 - jmp __alltraps -vector105: - push 0 - push 105 - jmp __alltraps -vector106: - push 0 - push 106 - jmp __alltraps -vector107: - push 0 - push 107 - jmp __alltraps -vector108: - push 0 - push 108 - jmp __alltraps -vector109: - push 0 - push 109 - jmp __alltraps -vector110: - push 0 - push 110 - jmp __alltraps -vector111: - push 0 - push 111 - jmp __alltraps -vector112: - push 0 - push 112 - jmp __alltraps -vector113: - push 0 - push 113 - jmp __alltraps -vector114: - push 0 - push 114 - jmp __alltraps -vector115: - push 0 - push 115 - jmp __alltraps -vector116: - push 0 - push 116 - jmp __alltraps -vector117: - push 0 - push 117 - jmp __alltraps -vector118: - push 0 - push 118 - jmp __alltraps -vector119: - push 0 - push 119 - jmp __alltraps -vector120: - push 0 - push 120 - jmp __alltraps -vector121: - push 0 - push 121 - jmp __alltraps -vector122: - push 0 - push 122 - jmp __alltraps -vector123: - push 0 - push 123 - jmp __alltraps -vector124: - push 0 - push 124 - jmp __alltraps -vector125: - push 0 - push 125 - jmp __alltraps -vector126: - push 0 - push 126 - jmp __alltraps -vector127: - push 0 - push 127 - jmp __alltraps -vector128: - push 0 - push 128 - jmp __alltraps -vector129: - push 0 - push 129 - jmp __alltraps -vector130: - push 0 - push 130 - jmp __alltraps -vector131: - push 0 - push 131 - jmp __alltraps -vector132: - push 0 - push 132 - jmp __alltraps -vector133: - push 0 - push 133 - jmp __alltraps -vector134: - push 0 - push 134 - jmp __alltraps -vector135: - push 0 - push 135 - jmp __alltraps -vector136: - push 0 - push 136 - jmp __alltraps -vector137: - push 0 - push 137 - jmp __alltraps -vector138: - push 0 - push 138 - jmp __alltraps -vector139: - push 0 - push 139 - jmp __alltraps -vector140: - push 0 - push 140 - jmp __alltraps -vector141: - push 0 - push 141 - jmp __alltraps -vector142: - push 0 - push 142 - jmp __alltraps -vector143: - push 0 - push 143 - jmp __alltraps -vector144: - push 0 - push 144 - jmp __alltraps -vector145: - push 0 - push 145 - jmp __alltraps -vector146: - push 0 - push 146 - jmp __alltraps -vector147: - push 0 - push 147 - jmp __alltraps -vector148: - push 0 - push 148 - jmp __alltraps -vector149: - push 0 - push 149 - jmp __alltraps -vector150: - push 0 - push 150 - jmp __alltraps -vector151: - push 0 - push 151 - jmp __alltraps -vector152: - push 0 - push 152 - jmp __alltraps -vector153: - push 0 - push 153 - jmp __alltraps -vector154: - push 0 - push 154 - jmp __alltraps -vector155: - push 0 - push 155 - jmp __alltraps -vector156: - push 0 - push 156 - jmp __alltraps -vector157: - push 0 - push 157 - jmp __alltraps -vector158: - push 0 - push 158 - jmp __alltraps -vector159: - push 0 - push 159 - jmp __alltraps -vector160: - push 0 - push 160 - jmp __alltraps -vector161: - push 0 - push 161 - jmp __alltraps -vector162: - push 0 - push 162 - jmp __alltraps -vector163: - push 0 - push 163 - jmp __alltraps -vector164: - push 0 - push 164 - jmp __alltraps -vector165: - push 0 - push 165 - jmp __alltraps -vector166: - push 0 - push 166 - jmp __alltraps -vector167: - push 0 - push 167 - jmp __alltraps -vector168: - push 0 - push 168 - jmp __alltraps -vector169: - push 0 - push 169 - jmp __alltraps -vector170: - push 0 - push 170 - jmp __alltraps -vector171: - push 0 - push 171 - jmp __alltraps -vector172: - push 0 - push 172 - jmp __alltraps -vector173: - push 0 - push 173 - jmp __alltraps -vector174: - push 0 - push 174 - jmp __alltraps -vector175: - push 0 - push 175 - jmp __alltraps -vector176: - push 0 - push 176 - jmp __alltraps -vector177: - push 0 - push 177 - jmp __alltraps -vector178: - push 0 - push 178 - jmp __alltraps -vector179: - push 0 - push 179 - jmp __alltraps -vector180: - push 0 - push 180 - jmp __alltraps -vector181: - push 0 - push 181 - jmp __alltraps -vector182: - push 0 - push 182 - jmp __alltraps -vector183: - push 0 - push 183 - jmp __alltraps -vector184: - push 0 - push 184 - jmp __alltraps -vector185: - push 0 - push 185 - jmp __alltraps -vector186: - push 0 - push 186 - jmp __alltraps -vector187: - push 0 - push 187 - jmp __alltraps -vector188: - push 0 - push 188 - jmp __alltraps -vector189: - push 0 - push 189 - jmp __alltraps -vector190: - push 0 - push 190 - jmp __alltraps -vector191: - push 0 - push 191 - jmp __alltraps -vector192: - push 0 - push 192 - jmp __alltraps -vector193: - push 0 - push 193 - jmp __alltraps -vector194: - push 0 - push 194 - jmp __alltraps -vector195: - push 0 - push 195 - jmp __alltraps -vector196: - push 0 - push 196 - jmp __alltraps -vector197: - push 0 - push 197 - jmp __alltraps -vector198: - push 0 - push 198 - jmp __alltraps -vector199: - push 0 - push 199 - jmp __alltraps -vector200: - push 0 - push 200 - jmp __alltraps -vector201: - push 0 - push 201 - jmp __alltraps -vector202: - push 0 - push 202 - jmp __alltraps -vector203: - push 0 - push 203 - jmp __alltraps -vector204: - push 0 - push 204 - jmp __alltraps -vector205: - push 0 - push 205 - jmp __alltraps -vector206: - push 0 - push 206 - jmp __alltraps -vector207: - push 0 - push 207 - jmp __alltraps -vector208: - push 0 - push 208 - jmp __alltraps -vector209: - push 0 - push 209 - jmp __alltraps -vector210: - push 0 - push 210 - jmp __alltraps -vector211: - push 0 - push 211 - jmp __alltraps -vector212: - push 0 - push 212 - jmp __alltraps -vector213: - push 0 - push 213 - jmp __alltraps -vector214: - push 0 - push 214 - jmp __alltraps -vector215: - push 0 - push 215 - jmp __alltraps -vector216: - push 0 - push 216 - jmp __alltraps -vector217: - push 0 - push 217 - jmp __alltraps -vector218: - push 0 - push 218 - jmp __alltraps -vector219: - push 0 - push 219 - jmp __alltraps -vector220: - push 0 - push 220 - jmp __alltraps -vector221: - push 0 - push 221 - jmp __alltraps -vector222: - push 0 - push 222 - jmp __alltraps -vector223: - push 0 - push 223 - jmp __alltraps -vector224: - push 0 - push 224 - jmp __alltraps -vector225: - push 0 - push 225 - jmp __alltraps -vector226: - push 0 - push 226 - jmp __alltraps -vector227: - push 0 - push 227 - jmp __alltraps -vector228: - push 0 - push 228 - jmp __alltraps -vector229: - push 0 - push 229 - jmp __alltraps -vector230: - push 0 - push 230 - jmp __alltraps -vector231: - push 0 - push 231 - jmp __alltraps -vector232: - push 0 - push 232 - jmp __alltraps -vector233: - push 0 - push 233 - jmp __alltraps -vector234: - push 0 - push 234 - jmp __alltraps -vector235: - push 0 - push 235 - jmp __alltraps -vector236: - push 0 - push 236 - jmp __alltraps -vector237: - push 0 - push 237 - jmp __alltraps -vector238: - push 0 - push 238 - jmp __alltraps -vector239: - push 0 - push 239 - jmp __alltraps -vector240: - push 0 - push 240 - jmp __alltraps -vector241: - push 0 - push 241 - jmp __alltraps -vector242: - push 0 - push 242 - jmp __alltraps -vector243: - push 0 - push 243 - jmp __alltraps -vector244: - push 0 - push 244 - jmp __alltraps -vector245: - push 0 - push 245 - jmp __alltraps -vector246: - push 0 - push 246 - jmp __alltraps -vector247: - push 0 - push 247 - jmp __alltraps -vector248: - push 0 - push 248 - jmp __alltraps -vector249: - push 0 - push 249 - jmp __alltraps -vector250: - push 0 - push 250 - jmp __alltraps -vector251: - push 0 - push 251 - jmp __alltraps -vector252: - push 0 - push 252 - jmp __alltraps -vector253: - push 0 - push 253 - jmp __alltraps -vector254: - push 0 - push 254 - jmp __alltraps -vector255: - push 0 - push 255 - jmp __alltraps - -section .rodata -global __vectors -__vectors: - dq vector0 - dq vector1 - dq vector2 - dq vector3 - dq vector4 - dq vector5 - dq vector6 - dq vector7 - dq vector8 - dq vector9 - dq vector10 - dq vector11 - dq vector12 - dq vector13 - dq vector14 - dq vector15 - dq vector16 - dq vector17 - dq vector18 - dq vector19 - dq vector20 - dq vector21 - dq vector22 - dq vector23 - dq vector24 - dq vector25 - dq vector26 - dq vector27 - dq vector28 - dq vector29 - dq vector30 - dq vector31 - dq vector32 - dq vector33 - dq vector34 - dq vector35 - dq vector36 - dq vector37 - dq vector38 - dq vector39 - dq vector40 - dq vector41 - dq vector42 - dq vector43 - dq vector44 - dq vector45 - dq vector46 - dq vector47 - dq vector48 - dq vector49 - dq vector50 - dq vector51 - dq vector52 - dq vector53 - dq vector54 - dq vector55 - dq vector56 - dq vector57 - dq vector58 - dq vector59 - dq vector60 - dq vector61 - dq vector62 - dq vector63 - dq vector64 - dq vector65 - dq vector66 - dq vector67 - dq vector68 - dq vector69 - dq vector70 - dq vector71 - dq vector72 - dq vector73 - dq vector74 - dq vector75 - dq vector76 - dq vector77 - dq vector78 - dq vector79 - dq vector80 - dq vector81 - dq vector82 - dq vector83 - dq vector84 - dq vector85 - dq vector86 - dq vector87 - dq vector88 - dq vector89 - dq vector90 - dq vector91 - dq vector92 - dq vector93 - dq vector94 - dq vector95 - dq vector96 - dq vector97 - dq vector98 - dq vector99 - dq vector100 - dq vector101 - dq vector102 - dq vector103 - dq vector104 - dq vector105 - dq vector106 - dq vector107 - dq vector108 - dq vector109 - dq vector110 - dq vector111 - dq vector112 - dq vector113 - dq vector114 - dq vector115 - dq vector116 - dq vector117 - dq vector118 - dq vector119 - dq vector120 - dq vector121 - dq vector122 - dq vector123 - dq vector124 - dq vector125 - dq vector126 - dq vector127 - dq vector128 - dq vector129 - dq vector130 - dq vector131 - dq vector132 - dq vector133 - dq vector134 - dq vector135 - dq vector136 - dq vector137 - dq vector138 - dq vector139 - dq vector140 - dq vector141 - dq vector142 - dq vector143 - dq vector144 - dq vector145 - dq vector146 - dq vector147 - dq vector148 - dq vector149 - dq vector150 - dq vector151 - dq vector152 - dq vector153 - dq vector154 - dq vector155 - dq vector156 - dq vector157 - dq vector158 - dq vector159 - dq vector160 - dq vector161 - dq vector162 - dq vector163 - dq vector164 - dq vector165 - dq vector166 - dq vector167 - dq vector168 - dq vector169 - dq vector170 - dq vector171 - dq vector172 - dq vector173 - dq vector174 - dq vector175 - dq vector176 - dq vector177 - dq vector178 - dq vector179 - dq vector180 - dq vector181 - dq vector182 - dq vector183 - dq vector184 - dq vector185 - dq vector186 - dq vector187 - dq vector188 - dq vector189 - dq vector190 - dq vector191 - dq vector192 - dq vector193 - dq vector194 - dq vector195 - dq vector196 - dq vector197 - dq vector198 - dq vector199 - dq vector200 - dq vector201 - dq vector202 - dq vector203 - dq vector204 - dq vector205 - dq vector206 - dq vector207 - dq vector208 - dq vector209 - dq vector210 - dq vector211 - dq vector212 - dq vector213 - dq vector214 - dq vector215 - dq vector216 - dq vector217 - dq vector218 - dq vector219 - dq vector220 - dq vector221 - dq vector222 - dq vector223 - dq vector224 - dq vector225 - dq vector226 - dq vector227 - dq vector228 - dq vector229 - dq vector230 - dq vector231 - dq vector232 - dq vector233 - dq vector234 - dq vector235 - dq vector236 - dq vector237 - dq vector238 - dq vector239 - dq vector240 - dq vector241 - dq vector242 - dq vector243 - dq vector244 - dq vector245 - dq vector246 - dq vector247 - dq vector248 - dq vector249 - dq vector250 - dq vector251 - dq vector252 - dq vector253 - dq vector254 - dq vector255 diff --git a/kernel/src/arch/x86_64/interrupt/handler.rs b/kernel/src/arch/x86_64/interrupt/handler.rs index b22156e..c9e389d 100644 --- a/kernel/src/arch/x86_64/interrupt/handler.rs +++ b/kernel/src/arch/x86_64/interrupt/handler.rs @@ -67,6 +67,9 @@ use super::consts::*; use super::TrapFrame; +global_asm!(include_str!("trap.asm")); +global_asm!(include_str!("vector.asm")); + #[no_mangle] pub extern fn rust_trap(tf: &mut TrapFrame) { trace!("Interrupt: {:#x}", tf.trap_num); diff --git a/kernel/src/arch/x86_64/boot/trap.asm b/kernel/src/arch/x86_64/interrupt/trap.asm similarity index 78% rename from kernel/src/arch/x86_64/boot/trap.asm rename to kernel/src/arch/x86_64/interrupt/trap.asm index 093f29c..a12d6ee 100644 --- a/kernel/src/arch/x86_64/boot/trap.asm +++ b/kernel/src/arch/x86_64/interrupt/trap.asm @@ -1,5 +1,7 @@ -section .text -global __alltraps +.section .text +.global __alltraps +.intel_syntax noprefix + __alltraps: push rax push rcx @@ -19,14 +21,12 @@ __alltraps: push r15 mov rdi, rsp - extern rust_trap call rust_trap -global trap_ret +.global trap_ret trap_ret: mov rdi, rsp - extern set_return_rsp call set_return_rsp pop r15 @@ -46,7 +46,7 @@ trap_ret: pop rcx pop rax - ; pop trap_num, error_code + # pop trap_num, error_code add rsp, 16 iretq \ No newline at end of file diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs index 02fb8e2..b24d93a 100644 --- a/kernel/src/lib.rs +++ b/kernel/src/lib.rs @@ -40,12 +40,6 @@ extern crate volatile; extern crate x86_64; extern crate xmas_elf; -// Export to asm -pub use arch::interrupt::rust_trap; -#[cfg(target_arch = "x86_64")] -pub use arch::interrupt::set_return_rsp; -#[cfg(target_arch = "x86_64")] -pub use arch::other_main; use linked_list_allocator::LockedHeap; #[macro_use] // print! @@ -66,7 +60,7 @@ mod console; #[allow(dead_code)] #[cfg(target_arch = "x86_64")] #[path = "arch/x86_64/mod.rs"] -mod arch; +pub mod arch; #[cfg(target_arch = "riscv32")] #[path = "arch/riscv32/mod.rs"]