rwth-os / eduos-rs Goto Github PK
View Code? Open in Web Editor NEWA teaching operating system written in Rust
Home Page: https://rwth-os.github.io/eduOS-rs/
License: Apache License 2.0
A teaching operating system written in Rust
Home Page: https://rwth-os.github.io/eduOS-rs/
License: Apache License 2.0
I can't build the system because LLVM TOOLS returns errors about unsupported assembler prompts. How to fix it?
Using the modules crate::arch::x86_64::mm::{ paging, virtualmem }
results in unexpected behavior, assuming I understand the intentions of the code correctly.
After a call to paging::unmap
, or at the very least virtualmem::deallocate
, I'll expect paging::get_page_table_entry::<BasePageSize>
to return None
.
After each of the above calls, paging::get_page_table_entry::<BasePageSize>
returns Some(0)
for the first page. If page count > 1, following pages will be mapped to a multiple of BasePageSize::SIZE
.
To reproduce the issue and making sure, it is not a misunderstanding on my part, here is an example function I put into main.rs and call from main.rs:main (after initialization of course), producing the output shown below:
Code:
// Helper function used in test(usize)
fn to_string(it: Option<crate::arch::x86_64::mm::paging::PageTableEntry>) -> String
{
match it
{
None => "None".to_owned(),
Some(it) => alloc::format!("Some(0x{:016x})", it.address())
}
}
fn test(count: usize)
{
use crate::arch::mm::{
paging::{
self,
BasePageSize,
PageSize,
PageTableEntryFlags
},
virtualmem,
physicalmem
};
let allocation_size = BasePageSize::SIZE * count;
// Allocate Page & Frame
let virt = virtualmem::allocate_aligned(allocation_size, BasePageSize::SIZE);
let phys = physicalmem::allocate_aligned(allocation_size, BasePageSize::SIZE);
println!("Trying: 0x{:016x} => 0x{:016x}", virt, phys);
println!("Alloc: 0x{:016x} => {}", virt, to_string(paging::get_page_table_entry::<BasePageSize>(virt)));
println!(" 0x{:016x} => {}", virt + BasePageSize::SIZE, to_string(paging::get_page_table_entry::<BasePageSize>(virt + BasePageSize::SIZE)));
// Map Page to Frame
paging::map::<BasePageSize>(virt, phys, count, PageTableEntryFlags::empty());
println!("Mapped: 0x{:016x} => {}", virt, to_string(paging::get_page_table_entry::<BasePageSize>(virt)));
println!(" 0x{:016x} => {}", virt + BasePageSize::SIZE, to_string(paging::get_page_table_entry::<BasePageSize>(virt + BasePageSize::SIZE)));
// Unmap Page
paging::unmap::<BasePageSize>(virt, count);
println!("Unmapped: 0x{:016x} => {}", virt, to_string(paging::get_page_table_entry::<BasePageSize>(virt)));
println!(" 0x{:016x} => {}", virt + BasePageSize::SIZE, to_string(paging::get_page_table_entry::<BasePageSize>(virt + BasePageSize::SIZE)));
// Deallocate Page & Frame
virtualmem::deallocate(virt, allocation_size);
physicalmem::deallocate(phys, allocation_size);
println!("Dealloc: 0x{:016x} => {}", virt, to_string(paging::get_page_table_entry::<BasePageSize>(virt)));
println!(" 0x{:016x} => {}", virt + BasePageSize::SIZE, to_string(paging::get_page_table_entry::<BasePageSize>(virt + BasePageSize::SIZE)));
}
Output:
Building bootloader
Finished release [optimized + debuginfo] target(s) in 0.03s
Running: `qemu-system-x86_64 -display none -smp 1 -m 128M -serial stdio -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr -device isa-debug-exit,iobase=0xf4,iosize=0x04 -drive format=raw,file=target/x86_64-eduos/debug/bootimage-eduos-rs.bin`
[INFO] Memory size 127 MByte
init: paging // Note: added println! into the respective init functions just to make sure
init: physicalmem
init: virtualmem
[INFO] Found mountable file at 0x251fb0 (len 0x3b90)
Hello from eduOS-rs!
[INFO] Print file system:
[INFO] /
[INFO] bin (Directory)
[INFO] demo (File)
[INFO] dev (Directory)
[INFO] Creating task 1
[INFO] Creating task 2
[INFO] Creating task 3
Trying: 0x0000000080000000 => 0x0000000000af0000 // test(1)
Alloc: 0x0000000080000000 => None
0x0000000080001000 => None
Mapped: 0x0000000080000000 => Some(0x0000000000af0000)
0x0000000080001000 => None
Unmapped: 0x0000000080000000 => Some(0x0000000000000000) // <- Mapped to 0
0x0000000080001000 => None
Dealloc: 0x0000000080000000 => Some(0x0000000000000000)
0x0000000080001000 => None
Trying: 0x0000000080000000 => 0x0000000000af3000 // test(2)
Alloc: 0x0000000080000000 => Some(0x0000000000000000) // <- Some(0) from previous invocation of test
0x0000000080001000 => None
Mapped: 0x0000000080000000 => Some(0x0000000000af3000)
0x0000000080001000 => Some(0x0000000000af4000)
Unmapped: 0x0000000080000000 => Some(0x0000000000000000) // <- Mapped to 0
0x0000000080001000 => Some(0x0000000000001000) // <- Mapped to 4096
Dealloc: 0x0000000080000000 => Some(0x0000000000000000)
0x0000000080001000 => Some(0x0000000000001000)
hello from task 1
[INFO] finish task with id 1
hello from task 2
[INFO] finish task with id 2
[INFO] Hello from loader
Hello World from Linux!
[INFO] finish task with id 3
Shutdown system!
When i try to run the newly compiled program i get this error while running:
[ERROR] Error: file depends on following libraries: ["libc.so"]
[ERROR] Unable to load elf64 binary /bin/demo
if i change -pie to -static-pie i get this error while running:
[ERROR] Page Fault (#PF) Exception: ExceptionStackFrame {
instruction_pointer: 0x20000000077,
code_segment: 0x2b,
cpu_flags: 0x1202,
stack_pointer: 0x20000400000,
stack_segment: 0x23,
}
[ERROR] virtual_address = 0x23, page fault error = The fault was caused by a non-present page.
The access causing the fault was a read.
The access causing the fault originated when the processor was executing in user mode.
The fault was not caused by reserved bit violation.
The fault was not caused by an instruction fetch.
Using macports has the advantage that we can skip the manual installation of binutils.
replace_boot_stack adjusts the RSP register to point to the new stack and copies the contents of the old stack to the new stack.
However, adjusting the RSP register may not be enough. Other registers may also contain references to the old stack. Elements on the stack itself may even contain references to the old stack.
To give an example: Even though the "x86_64-unknown-none-gnu.json" file contains "eliminate-frame-pointer": true, this is just a possible optimization. The compiler may still decide to use RBP for memory references. Looking into the disassembly reveals that this indeed happens right in rust_main.
When entering replace_boot_stack, this RBP has been pushed somewhere on the stack, without any reliable way of adjusting this memory reference.
To solve this problem, I would keep using the original boot stack, and offer a way to pass the address of a dynamically allocated boot stack to the application processor boot code as soon as SMP is implemented.
In fact, this is how I will proceed for HermitCore-rs.
Running a cargo test --lib
on the project fails with the following error
Toolchain: nightly-2021-02-01-x86_64-unknown-linux-gnu
bader@prometheus:~/Work/RWTH.ERC/eduOS-rs$ cargo test --lib
Compiling eduos-rs v0.1.0 (/home/bader/Work/RWTH.ERC/eduOS-rs)
error[E0463]: can't find crate for `test`
--> src/mm/freelist.rs:203:1
|
203 | / fn add_element() {
204 | | let mut freelist = FreeList::new();
205 | | let entry = FreeListEntry::new(0x10000, 0x100000);
206 | |
... |
216 | | }
217 | | }
| |_^ can't find crate
|
= note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to previous error
For more information about this error, try `rustc --explain E0463`.
error: could not compile `eduos-rs`
To learn more, run the command again with --verbose.
What I've tried so far:
#![cfg_attr(not(test), no_std)]
When running make qemu
on stage0 branch:
$ make qemu
bootimage build --target x86_64-eduos.json
Error: Failed to read bootimage configuration: unexpected `package.metadata.bootimage` key `bootloader` with value `name = "bootloader"
target = "x86_64-bootloader.json"
`
make: *** [Makefile:30: bootimage.bin] Error 1
So there seem to be some braking changes in config format.
When investigating the error, I found in the doc, that:
Note: At least bootloader version 0.5.1 is required since bootimage 0.7.0. For earlier bootloader versions, use bootimage 0.6.6
, but we use bootloader = "0.3.4"
Easy workaround would be to downgrade bootimage
to 0.6.6 (I tested it and it works), but I think upgrading and fixing the config would be the better way.
➜ eduOS-rs git:(master) rustup toolchain list
stable-x86_64-apple-darwin (default)
nightly-2020-02-20-x86_64-apple-darwin
nightly-x86_64-apple-darwin
➜ eduOS-rs git:(master) rustup override set nightly
info: using existing install for 'nightly-x86_64-apple-darwin'
info: override toolchain for '/Users/wangguocheng/osSpace/eduOS-rs' set to 'nightly-x86_64-apple-darwin'
nightly-x86_64-apple-darwin unchanged - rustc 1.45.0-nightly (74e804683 2020-05-30)
➜ eduOS-rs git:(master) cargo install --git https://github.com/RWTH-OS/ehyve.git
Updating git repository `https://github.com/RWTH-OS/ehyve.git`
Updating git submodule `https://github.com/RWTH-OS/libwhp.git`
Installing ehyve v0.0.10 (https://github.com/RWTH-OS/ehyve.git#5991b98c)
Updating crates.io index
Downloaded lazy_static v1.4.0
Downloaded thread_local v1.0.1
Downloaded env_logger v0.7.1
Downloaded semver-parser v0.7.0
Downloaded rustc_version v0.2.3
Downloaded cc v1.0.54
Downloaded quick-error v1.2.3
Downloaded humantime v1.3.0
Downloaded elf v0.0.10
Downloaded regex v1.3.9
Downloaded memchr v2.3.3
Downloaded memmap v0.7.0
Downloaded regex-syntax v0.6.18
Downloaded termcolor v1.1.0
Downloaded aho-corasick v0.7.10
Downloaded raw-cpuid v7.0.3
Downloaded semver v0.9.0
Downloaded byteorder v0.5.3
Downloaded aligned_alloc v0.1.3
Downloaded xhypervisor v0.0.12
Downloaded bit_field v0.10.0
Downloaded x86 v0.28.0
Downloaded 22 crates (2.9 MB) in 12.62s (largest was `x86` at 2.0 MB)
Compiling libc v0.2.71
Compiling semver-parser v0.7.0
Compiling bitflags v1.2.1
Compiling memchr v2.3.3
Compiling winapi-build v0.1.1
Compiling cc v1.0.54
Compiling lazy_static v1.4.0
Compiling log v0.4.8
Compiling cfg-if v0.1.10
Compiling quick-error v1.2.3
Compiling xhypervisor v0.0.12
Compiling regex-syntax v0.6.18
Compiling x86 v0.28.0
Compiling unicode-width v0.1.7
Compiling winapi v0.2.8
Compiling byteorder v0.5.3
Compiling ansi_term v0.11.0
Compiling vec_map v0.8.2
Compiling bit_field v0.10.0
Compiling strsim v0.8.0
Compiling termcolor v1.1.0
Compiling thread_local v1.0.1
Compiling semver v0.9.0
Compiling humantime v1.3.0
Compiling kernel32-sys v0.2.2
Compiling textwrap v0.11.0
Compiling elf v0.0.10
Compiling rustc_version v0.2.3
Compiling aho-corasick v0.7.10
Compiling atty v0.2.14
Compiling aligned_alloc v0.1.3
Compiling memmap v0.7.0
Compiling clap v2.33.1
Compiling regex v1.3.9
Compiling env_logger v0.7.1
Compiling raw-cpuid v7.0.3
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits32/eflags.rs:95:5
|
95 | asm!("clac" ::: "memory" "flags" : "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits32/eflags.rs:110:5
|
110 | asm!("stac" ::: "memory" "flags" : "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits32/mod.rs:9:5
|
9 | asm!("mov esp, $0; jmp $1" :: "rg"(stack), "r"(ip) :: "volatile", "intel");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/registers.rs:6:9
|
6 | asm!("leaq 0(%rip), $0" : "=r" (rip) ::);
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/registers.rs:16:9
|
16 | asm!("mov %rsp, $0" : "=r" (rsp) ::);
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/registers.rs:26:9
|
26 | asm!("mov %rbp, $0" : "=r" (rbp) ::);
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/rflags.rs:82:5
|
82 | asm!("pushfq; popq $0" : "=r"(r) :: "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/rflags.rs:89:5
|
89 | asm!("pushq $0; popfq" :: "r"(val.bits()) : "memory" "flags");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:140:5
|
140 | asm!("pushq $0; \
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
141 | | leaq 1f(%rip), %rax; \
142 | | pushq %rax; \
143 | | lretq; \
144 | | 1:" :: "ri" (sel.bits() as usize) : "rax" "memory");
| |______________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:151:5
|
151 | asm!("wrgsbase $0" :: "r" (base) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:158:5
|
158 | asm!("wrfsbase $0" :: "r" (base) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:166:5
|
166 | asm!("rdgsbase $0" : "=r" (gs_base) );
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:175:5
|
175 | asm!("rdfsbase $0" : "=r" (fs_base) );
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/segmentation.rs:190:5
|
190 | asm!("swapgs" ::: "gs");
| ----^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/sgx.rs:25:5
|
25 | asm!("encls" : "={eax}" (eax), "={rbx}" (out_rbx)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
26 | | : "{rax}" (rax), "{rbx}" (rbx));
| |_________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/sgx.rs:34:5
|
34 | asm!("encls" : "={eax}" (eax), "={rbx}" (out_rbx)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
35 | | : "{rax}" (rax), "{rbx}" (rbx), "{rcx}" (rcx));
| |________________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/sgx.rs:43:5
|
43 | asm!("encls" : "={eax}" (eax), "={rbx}" (out_rbx)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
44 | | : "{rax}" (rax), "{rbx}" (rbx), "{rcx}" (rcx), "{rdx}" (rdx));
| |_______________________________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/sgx.rs:255:5
|
255 | asm!("enclu" : "={eax}" (eax), "={rcx}" (out_rcx)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
256 | | : "{rax}" (rax), "{rbx}" (rbx), "{rcx}" (rcx));
| |________________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/sgx.rs:264:5
|
264 | asm!("enclu" : "={eax}" (eax), "={rcx}" (out_rcx)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
265 | | : "{rax}" (rax), "{rbx}" (rbx), "{rcx}" (rcx), "{rdx}" (rdx));
| |_______________________________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:96:5
|
96 | asm!("syscall" : "={rax}" (ret) : "{rax}" (arg0) : "rcx", "r11", "memory" : "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:104:5
|
104 | asm!("syscall" : "={rax}" (ret) : "{rax}" (arg0), "{rdi}" (arg1)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
105 | | : "rcx", "r11", "memory" : "volatile");
| |__________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:113:5
|
113 | asm!("syscall" : "={rax}" (ret) : "{rax}" (arg0), "{rdi}" (arg1), "{rsi}" (arg2)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
114 | | : "rcx", "r11", "memory" : "volatile");
| |__________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:122:5
|
122 | asm!("syscall" : "={rax}" (ret) : "{rax}" (arg0), "{rdi}" (arg1), "{rsi}" (arg2), "{rdx}" (arg3)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
123 | | : "rcx", "r11", "memory" : "volatile");
| |__________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:131:5
|
131 | asm!("syscall" : "={rax}" (ret)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
132 | | : "{rax}" (arg0), "{rdi}" (arg1), "{rsi}" (arg2), "{rdx}" (arg3), "{r10}" (arg4)
133 | | : "rcx", "r11", "memory" : "volatile");
| |__________________________________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:141:5
|
141 | asm!("syscall" : "={rax}" (ret)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
142 | | : "{rax}" (arg0), "{rdi}" (arg1), "{rsi}" (arg2), "{rdx}" (arg3), "{r10}" (arg4), "{r8}" (arg5)
143 | | : "rcx", "r11", "memory"
144 | | : "volatile");
| |_________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/syscall.rs:160:5
|
160 | asm!("syscall" : "={rax}" (ret)
| ^---
| |
| _____help: replace with: `llvm_asm!`
| |
161 | | : "{rax}" (arg0), "{rdi}" (arg1), "{rsi}" (arg2), "{rdx}" (arg3),
162 | | "{r10}" (arg4), "{r8}" (arg5), "{r9}" (arg6)
163 | | : "rcx", "r11", "memory"
164 | | : "volatile");
| |_________________________________^
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:30:5
|
30 | asm!("vmxon $0" : /* no outputs */ : "m"(addr));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:45:5
|
45 | asm!("vmclear $0" : /* no outputs */ : "m"(addr));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:53:5
|
53 | asm!("vmptrld $0" : /* no outputs */ : "m"(addr));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:60:5
|
60 | asm!("vmptrst ($0)" : /* no outputs */ : "r"(&value) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:68:5
|
68 | asm!("vmread $1, $0" : "=r"(value) : "r"(field));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/bits64/vmx.rs:75:5
|
75 | asm!("vmwrite $1, $0" : /* no outputs */ : "r"(field), "r"(value));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:93:5
|
93 | asm!("mov %cr0, $0" : "=r" (ret));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:99:5
|
99 | asm!("mov $0, %cr0" :: "r" (val.bits) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:105:5
|
105 | asm!("mov %cr2, $0" : "=r" (ret));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:111:5
|
111 | asm!("mov $0, %cr2" :: "r" (val) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:117:5
|
117 | asm!("mov %cr3, $0" : "=r" (ret));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:123:5
|
123 | asm!("mov $0, %cr3" :: "r" (val) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:129:5
|
129 | asm!("mov %cr4, $0" : "=r" (ret));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/controlregs.rs:145:5
|
145 | asm!("mov $0, %cr4" :: "r" (val.bits) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:59:5
|
59 | asm!("lgdt ($0)" :: "r" (gdt) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:64:5
|
64 | asm!("sgdt ($0)" : "=r" (idt as *mut DescriptorTablePointer<T>) :: "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:75:5
|
75 | asm!("lldt $0" :: "r" (selector.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:84:5
|
84 | asm!("sldt $0" : "=r"(selector));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:90:5
|
90 | asm!("lidt ($0)" :: "r" (idt) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/dtables.rs:95:5
|
95 | asm!("sidt ($0)" : "=r" (idt as *mut DescriptorTablePointer<T>) :: "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:6:5
|
6 | asm!("outb %al, %dx" :: "{dx}"(port), "{al}"(val));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:13:5
|
13 | asm!("inb %dx, %al" : "={ax}"(ret) : "{dx}"(port) :: "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:20:5
|
20 | asm!("outw %ax, %dx" :: "{dx}"(port), "{al}"(val));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:27:5
|
27 | asm!("inw %dx, %ax" : "={ax}"(ret) : "{dx}"(port) :: "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:34:5
|
34 | asm!("outl %eax, %dx" :: "{dx}"(port), "{al}"(val));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/io.rs:41:5
|
41 | asm!("inl %dx, %eax" : "={ax}"(ret) : "{dx}"(port) :: "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/msr.rs:7:5
|
7 | asm!("wrmsr" :: "{ecx}" (msr), "{eax}" (low), "{edx}" (high) : "memory" : "volatile" );
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/msr.rs:14:5
|
14 | asm!("rdmsr" : "={eax}" (low), "={edx}" (high) : "{ecx}" (msr) : "memory" : "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:557:5
|
557 | asm!("movw $0, %ss " :: "r" (sel.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:562:5
|
562 | asm!("movw $0, %ds " :: "r" (sel.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:567:5
|
567 | asm!("movw $0, %es " :: "r" (sel.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:572:5
|
572 | asm!("movw $0, %fs " :: "r" (sel.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:577:5
|
577 | asm!("movw $0, %gs " :: "r" (sel.bits()) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:585:14
|
585 | unsafe { asm!("mov %cs, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:592:14
|
592 | unsafe { asm!("mov %es, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:599:14
|
599 | unsafe { asm!("mov %ss, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:606:14
|
606 | unsafe { asm!("mov %ds, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:613:14
|
613 | unsafe { asm!("mov %fs, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/segmentation.rs:620:14
|
620 | unsafe { asm!("mov %gs, $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/task.rs:9:14
|
9 | unsafe { asm!("str $0" : "=r" (segment) ) };
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/task.rs:15:5
|
15 | asm!("ltr $0" :: "r" (sel.bits()));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/tlb.rs:9:5
|
9 | asm!("invlpg ($0)" :: "r" (addr) : "memory");
| ----^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/lib.rs:91:5
|
91 | asm!("hlt" :::: "volatile");
| ----^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: legacy asm! syntax is no longer supported
--> /Users/wangguocheng/.cargo/registry/src/github.com-1ecc6299db9ec823/x86-0.28.0/src/lib.rs:118:5
|
118 | asm!("rdpid $0" : "=r"(pid));
| ----^^^^^^^^^^^^^^^^^^^^^^^^^
| |
| help: replace with: `llvm_asm!`
error: aborting due to 70 previous errors
error: could not compile `x86`.
To learn more, run the command again with --verbose.
warning: build failed, waiting for other jobs to finish...
error: failed to compile `ehyve v0.0.10 (https://github.com/RWTH-OS/ehyve.git#5991b98c)`, intermediate artifacts can be found at `/var/folders/6w/y98wch9x1wz2pxtxdfft4v8m0000gn/T/cargo-installCkeMkj`
Caused by:
build failed
I have tried stage0, 8, 7, and all getting the error:
error: process didn't exit successfully: bootimage runner target\x86_64-eduos\debug\eduos-rs
(exit code: 5)
I am running from Windows 11.
Below is the complete cargo run ouput:
cargo run
Compiling compiler_builtins v0.1.82
Compiling core v0.0.0 (C:\Users\xxxxx.rustup\toolchains\nightly-2022-11-11-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\core)
Compiling bootloader v0.9.23
Compiling lock_api v0.4.9
Compiling x86 v0.52.0
Compiling rustc-std-workspace-core v1.99.0 (C:\Users\xxxxx.rustup\toolchains\nightly-2022-11-11-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\rustc-std-workspace-core)
Compiling alloc v0.0.0 (C:\Users\xxxxx.rustup\toolchains\nightly-2022-11-11-x86_64-pc-windows-msvc\lib\rustlib\src\rust\library\alloc)
Compiling bitflags v1.3.2
Compiling scopeguard v1.1.0
Compiling bit_field v0.10.1
Compiling qemu-exit v3.0.1
Compiling raw-cpuid v10.6.0
Compiling spin v0.9.4
Compiling eduos-rs v0.1.0 (C:\Users\xxxxx\source\repos\eduOS-rs)
Finished dev [unoptimized + debuginfo] target(s) in 23.85s
Running bootimage runner target\x86_64-eduos\debug\eduos-rs
Building bootloader
Compiling bootloader v0.9.23 (C:\Users\xxxxx.cargo\registry\src\github.com-1ecc6299db9ec823\bootloader-0.9.23)
Finished release [optimized + debuginfo] target(s) in 3.84s
Running: qemu-system-x86_64 -display none -smp 1 -m 128M -serial stdio -cpu qemu64,apic,fsgsbase,rdtscp,xsave,xsaveopt,fxsr -device isa-debug-exit,iobase=0xf4,iosize=0x04 -drive format=raw,file=target\x86_64-eduos\debug\bootimage-eduos-rs.bin
Hello world!
error: process didn't exit successfully: bootimage runner target\x86_64-eduos\debug\eduos-rs
(exit code: 5)
yuyang@yuyang-PC:~/projects/eduOS-rs$ cargo build
Compiling eduos-rs v0.1.0 (/home/yuyang/projects/eduOS-rs)
warning: target json file contains unused fields: eliminate-frame-pointer
error[E0557]: feature has been removed
--> src/lib.rs:1:17
|
1 | #![feature(asm, const_fn, llvm_asm, lang_items)]
| ^^^^^^^^ feature has been removed
|
= note: split into finer-grained feature gates
warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
--> src/lib.rs:7:12
|
7 | #![feature(specialization)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
= help: consider using `min_specialization` instead, which is more stable and complete
For more information about this error, try `rustc --explain E0557`.
warning: `eduos-rs` (lib) generated 2 warnings
error: could not compile `eduos-rs` due to previous error; 2 warnings emitted
yuyang@yuyang-PC:~/projects/eduOS-rs$ cargo version
cargo 1.55.0-nightly (d21c22870 2021-07-26)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.