diff --git a/library/.gitignore b/library/.gitignore index a69946a..e958848 100644 --- a/library/.gitignore +++ b/library/.gitignore @@ -1,23 +1,23 @@ +Cargo.lock Cargo.toml - -backtrace -portable-simd -core_arch -core -compiler-builtins alloc -stdarch -unwind -std_detect +alloctests +backtrace +compiler-builtins +core +coretests panic_abort panic_unwind +portable-simd +proc_macro +profiler_builtins rustc-std-workspace-alloc rustc-std-workspace-core rustc-std-workspace-std -windows_link -profiler_builtins -test -proc_macro -alloctests -coretests +std_detect +stdarch sysroot +target +test +unwind +windows_link diff --git a/library/justfile b/library/justfile index e3610f2..300ad76 100644 --- a/library/justfile +++ b/library/justfile @@ -1,330 +1,108 @@ SRC_DIR := "std/src" PATCH_DIR := "std/patches" RUST_SRC := `rustc --print sysroot` / "lib/rustlib/src/rust/library" - -patch-std: - @echo "Start patching the std..." - @find {{ PATCH_DIR }} -type f | while read -r patch_file; do \ - relative_path="${patch_file#{{ PATCH_DIR }}/}"; \ - target_file="${relative_path%.sed}.rs"; \ - if [ -f "{{ SRC_DIR }}/$target_file" ]; then \ - echo " [SED] $target_file"; \ - sed -i -f "$patch_file" "{{ SRC_DIR }}/$target_file"; \ - else \ - echo "⚠ [WARN] target doesn't exist: $target_file"; \ - fi; \ - done - @echo "✅ Patching done." - -update-std: - @just setup-std - @just patch-std - -cp_std path: - @echo "Linking {{ path }}" - @mkdir {{ "std/src" / parent_directory(path) }} -p - @ln -fs {{ RUST_SRC / "std/src" / path }} {{ "std/src" / parent_directory(path) }} - -real_cp_std path: - @echo "Copying {{ path }}" - @mkdir {{ "std/src" / parent_directory(path) }} -p - @cp {{ RUST_SRC / "std/src" / path }} {{ "std/src" / path }} +ROOT_LINKS := "\ + Cargo.toml backtrace std_detect panic_abort panic_unwind \ + windows_link unwind alloc rustc-std-workspace-alloc \ + rustc-std-workspace-core rustc-std-workspace-std \ + compiler-builtins core stdarch portable-simd proc_macro \ + profiler_builtins test coretests alloctests sysroot" +REAL_CP_FILES := "\ + sys/args/mod.rs \ + sys/io/error/mod.rs \ + sys/pal/mod.rs \ + sys/random/mod.rs \ + sys/thread_local/mod.rs" +STD_FILES := "\ + alloc.rs ascii.rs backtrace.rs bstr.rs env.rs error.rs fs.rs \ + keyword_docs.rs lib.rs macros.rs panic.rs panicking.rs pat.rs \ + path.rs process.rs random.rs rt.rs tests_helpers.rs time.rs \ + backtrace collections ffi fs hash io net num os/raw/mod.rs \ + os/raw/tests.rs os/mod.rs prelude process sync sys/alloc/mod.rs \ + sys/args/unsupported.rs sys/env/mod.rs sys/env/common.rs \ + sys/env/unsupported.rs sys/fd/mod.rs sys/fs/mod.rs \ + sys/fs/common.rs sys/fs/unsupported.rs sys/helpers/mod.rs \ + sys/helpers/small_c_string.rs sys/helpers/tests.rs sys/helpers/wstr.rs \ + sys/io/error/generic.rs sys/io/io_slice/unsupported.rs \ + sys/io/is_terminal/unsupported.rs sys/io/kernel_copy/mod.rs \ + sys/io/mod.rs sys/net/connection/mod.rs sys/net/connection/unsupported.rs \ + sys/net/hostname/mod.rs sys/net/hostname/unsupported.rs sys/net/mod.rs \ + sys/os_str/bytes/tests.rs sys/os_str/bytes.rs sys/os_str/mod.rs \ + sys/pal/unsupported/mod.rs sys/pal/unsupported/common.rs \ + sys/pal/unsupported/os.rs sys/path/mod.rs sys/path/unix.rs \ + sys/personality/dwarf/eh.rs sys/personality/dwarf/mod.rs \ + sys/personality/dwarf/tests.rs sys/personality/mod.rs sys/pipe/mod.rs \ + sys/pipe/unsupported.rs sys/platform_version/mod.rs sys/process/mod.rs \ + sys/process/env.rs sys/process/unsupported.rs sys/random/unsupported.rs \ + sys/stdio/mod.rs sys/stdio/unsupported.rs sys/sync/condvar/mod.rs \ + sys/sync/condvar/no_threads.rs sys/sync/mutex/mod.rs \ + sys/sync/mutex/no_threads.rs sys/sync/once/mod.rs \ + sys/sync/once/no_threads.rs sys/sync/rwlock/mod.rs \ + sys/sync/rwlock/no_threads.rs sys/sync/thread_parking/mod.rs \ + sys/sync/thread_parking/unsupported.rs sys/sync/mod.rs \ + sys/sync/once_box.rs sys/thread/mod.rs sys/thread/unsupported.rs \ + sys/thread_local/no_threads.rs sys/thread_local/os.rs sys/time/mod.rs \ + sys/time/unsupported.rs sys/backtrace.rs sys/cmath.rs \ + sys/configure_builtins.rs sys/env_consts.rs sys/exit.rs sys/mod.rs thread" +KEEP_FILES := "sys sys/pal sys/pal/survos.rs sys/alloc sys/alloc/survos.rs" setup-std: - ln -fs {{ RUST_SRC / "Cargo.toml" }} "." + @echo "🔗 Linking root directories..." + @for dir in {{ ROOT_LINKS }}; do ln -fs {{ RUST_SRC }}/$dir "."; done - ln -fs {{ RUST_SRC / "backtrace" }} "." - ln -fs {{ RUST_SRC / "std_detect" }} "." - ln -fs {{ RUST_SRC / "panic_abort" }} "." - ln -fs {{ RUST_SRC / "panic_unwind" }} "." - ln -fs {{ RUST_SRC / "windows_link" }} "." - ln -fs {{ RUST_SRC / "unwind" }} "." - ln -fs {{ RUST_SRC / "alloc" }} "." - ln -fs {{ RUST_SRC / "rustc-std-workspace-alloc" }} "." - ln -fs {{ RUST_SRC / "rustc-std-workspace-core" }} "." - ln -fs {{ RUST_SRC / "rustc-std-workspace-std" }} "." - ln -fs {{ RUST_SRC / "compiler-builtins" }} "." - ln -fs {{ RUST_SRC / "core" }} "." - ln -fs {{ RUST_SRC / "stdarch" }} "." - ln -fs {{ RUST_SRC / "portable-simd" }} "." - ln -fs {{ RUST_SRC / "proc_macro" }} "." - ln -fs {{ RUST_SRC / "profiler_builtins" }} "." - ln -fs {{ RUST_SRC / "test" }} "." - ln -fs {{ RUST_SRC / "coretests" }} "." - ln -fs {{ RUST_SRC / "alloctests" }} "." - ln -fs {{ RUST_SRC / "sysroot" }} "." + @echo "📂 Processing std/src files..." + @for f in {{ STD_FILES }}; do {{ just_executable() }} cp_std $f; done + @for f in {{ REAL_CP_FILES }}; do {{ just_executable() }} real_cp_std $f; done - @just cp_std "../build.rs" - @sed -i "59a\ || target_os == \"survos\"" std/build.rs + @{{ just_executable() }} cp_std "../build.rs" + @{{ just_executable() }} cp_std "../Cargo.toml" + @sed -i '59a\ || target_os == "survos"' std/src/../build.rs - @just cp_std "../Cargo.toml" +update-std: setup-std patch-std - @just cp_std "alloc.rs" - @just cp_std "ascii.rs" - @just cp_std "backtrace.rs" - @just cp_std "bstr.rs" - @just cp_std "env.rs" - @just cp_std "error.rs" - @just cp_std "fs.rs" - @just cp_std "keyword_docs.rs" - @just cp_std "lib.rs" - @just cp_std "macros.rs" - @just cp_std "panic.rs" - @just cp_std "panicking.rs" - @just cp_std "pat.rs" - @just cp_std "path.rs" - @just cp_std "process.rs" - @just cp_std "random.rs" - @just cp_std "rt.rs" - @just cp_std "tests_helpers.rs" - @just cp_std "time.rs" - - @just cp_std "backtrace" - - @just cp_std "collections" - - @just cp_std "ffi" - - @just cp_std "fs" - - @just cp_std "hash" - - @just cp_std "io" - - @just cp_std "net" - - @just cp_std "num" - - @just cp_std "os/raw/mod.rs" - @just cp_std "os/raw/tests.rs" - @just cp_std "os/mod.rs" - - @just cp_std "prelude" - - @just cp_std "process" - - @just cp_std "sync" - - @just cp_std "sys/alloc/mod.rs" - - @just real_cp_std "sys/args/mod.rs" - @just cp_std "sys/args/unsupported.rs" - - @just cp_std "sys/env/mod.rs" - @just cp_std "sys/env/common.rs" - @just cp_std "sys/env/unsupported.rs" - - @just cp_std "sys/fd/mod.rs" - - @just cp_std "sys/fs/mod.rs" - @just cp_std "sys/fs/common.rs" - @just cp_std "sys/fs/unsupported.rs" - - @just cp_std "sys/helpers/mod.rs" - @just cp_std "sys/helpers/small_c_string.rs" - @just cp_std "sys/helpers/tests.rs" - @just cp_std "sys/helpers/wstr.rs" - - @just cp_std "sys/io/error/generic.rs" - @just real_cp_std "sys/io/error/mod.rs" - @just cp_std "sys/io/io_slice/unsupported.rs" - @just cp_std "sys/io/is_terminal/unsupported.rs" - @just cp_std "sys/io/kernel_copy/mod.rs" - @just cp_std "sys/io/mod.rs" - - @just cp_std "sys/net/connection/mod.rs" - @just cp_std "sys/net/connection/unsupported.rs" - @just cp_std "sys/net/hostname/mod.rs" - @just cp_std "sys/net/hostname/unsupported.rs" - @just cp_std "sys/net/mod.rs" - - @just cp_std "sys/os_str/bytes/tests.rs" - @just cp_std "sys/os_str/bytes.rs" - @just cp_std "sys/os_str/mod.rs" - - @just real_cp_std "sys/pal/mod.rs" - @just cp_std "sys/pal/unsupported/mod.rs" - @just cp_std "sys/pal/unsupported/common.rs" - @just cp_std "sys/pal/unsupported/os.rs" - - @just cp_std "sys/path/mod.rs" - @just cp_std "sys/path/unix.rs" - - @just cp_std "sys/personality/dwarf/eh.rs" - @just cp_std "sys/personality/dwarf/mod.rs" - @just cp_std "sys/personality/dwarf/tests.rs" - @just cp_std "sys/personality/mod.rs" - - @just cp_std "sys/pipe/mod.rs" - @just cp_std "sys/pipe/unsupported.rs" - - @just cp_std "sys/platform_version/mod.rs" - - @just cp_std "sys/process/mod.rs" - @just cp_std "sys/process/env.rs" - @just cp_std "sys/process/unsupported.rs" - - @just real_cp_std "sys/random/mod.rs" - @just cp_std "sys/random/unsupported.rs" - - @just cp_std "sys/stdio/mod.rs" - @just cp_std "sys/stdio/unsupported.rs" - - @just cp_std "sys/sync/condvar/mod.rs" - @just cp_std "sys/sync/condvar/no_threads.rs" - @just cp_std "sys/sync/mutex/mod.rs" - @just cp_std "sys/sync/mutex/no_threads.rs" - @just cp_std "sys/sync/once/mod.rs" - @just cp_std "sys/sync/once/no_threads.rs" - @just cp_std "sys/sync/rwlock/mod.rs" - @just cp_std "sys/sync/rwlock/no_threads.rs" - @just cp_std "sys/sync/thread_parking/mod.rs" - @just cp_std "sys/sync/thread_parking/unsupported.rs" - @just cp_std "sys/sync/mod.rs" - @just cp_std "sys/sync/once_box.rs" - - @just cp_std "sys/thread/mod.rs" - @just cp_std "sys/thread/unsupported.rs" - - @just real_cp_std "sys/thread_local/mod.rs" - @just cp_std "sys/thread_local/no_threads.rs" - @just cp_std "sys/thread_local/os.rs" - - @just cp_std "sys/time/mod.rs" - @just cp_std "sys/time/unsupported.rs" - - @just cp_std "sys/backtrace.rs" - @just cp_std "sys/cmath.rs" - @just cp_std "sys/configure_builtins.rs" - @just cp_std "sys/env_consts.rs" - @just cp_std "sys/exit.rs" - @just cp_std "sys/mod.rs" - - @just cp_std "thread" - -STD_FILES := "alloc.rs \ -ascii.rs \ -backtrace.rs \ -bstr.rs \ -env.rs \ -error.rs \ -fs.rs \ -keyword_docs.rs \ -lib.rs \ -macros.rs \ -panic.rs \ -panicking.rs \ -pat.rs \ -path.rs \ -process.rs \ -random.rs \ -rt.rs \ -tests_helpers.rs \ -time.rs \ -backtrace \ -collections \ -ffi \ -fs \ -hash \ -io \ -net \ -num \ -os/raw/mod.rs \ -os/raw/tests.rs \ -os/mod.rs \ -prelude \ -process \ -sync \ -sys/alloc/mod.rs \ -sys/args/mod.rs \ -sys/args/unsupported.rs \ -sys/env/mod.rs \ -sys/env/common.rs \ -sys/env/unsupported.rs \ -sys/fd/mod.rs \ -sys/fs/mod.rs \ -sys/fs/common.rs \ -sys/fs/unsupported.rs \ -sys/helpers/mod.rs \ -sys/helpers/small_c_string.rs \ -sys/helpers/tests.rs \ -sys/helpers/wstr.rs \ -sys/io/error/generic.rs \ -sys/io/error/mod.rs \ -sys/io/io_slice/unsupported.rs \ -sys/io/is_terminal/unsupported.rs \ -sys/io/kernel_copy/mod.rs \ -sys/io/mod.rs \ -sys/net/connection/mod.rs \ -sys/net/connection/unsupported.rs \ -sys/net/hostname/mod.rs \ -sys/net/hostname/unsupported.rs \ -sys/net/mod.rs \ -sys/os_str/bytes/tests.rs \ -sys/os_str/bytes.rs \ -sys/os_str/mod.rs \ -sys/pal/mod.rs \ -sys/pal/unsupported/mod.rs \ -sys/pal/unsupported/common.rs \ -sys/pal/unsupported/os.rs \ -sys/path/mod.rs \ -sys/path/unix.rs \ -sys/personality/dwarf/eh.rs \ -sys/personality/dwarf/mod.rs \ -sys/personality/dwarf/tests.rs \ -sys/personality/mod.rs \ -sys/pipe/mod.rs \ -sys/pipe/unsupported.rs \ -sys/platform_version/mod.rs \ -sys/process/mod.rs \ -sys/process/env.rs \ -sys/process/unsupported.rs \ -sys/random/mod.rs \ -sys/random/unsupported.rs \ -sys/stdio/mod.rs \ -sys/stdio/unsupported.rs \ -sys/sync/condvar/mod.rs \ -sys/sync/condvar/no_threads.rs \ -sys/sync/mutex/mod.rs \ -sys/sync/mutex/no_threads.rs \ -sys/sync/once/mod.rs \ -sys/sync/once/no_threads.rs \ -sys/sync/rwlock/mod.rs \ -sys/sync/rwlock/no_threads.rs \ -sys/sync/thread_parking/mod.rs \ -sys/sync/thread_parking/unsupported.rs \ -sys/sync/mod.rs \ -sys/sync/once_box.rs \ -sys/thread/mod.rs \ -sys/thread/unsupported.rs \ -sys/thread_local/mod.rs \ -sys/thread_local/no_threads.rs \ -sys/thread_local/os.rs \ -sys/time/mod.rs \ -sys/time/unsupported.rs \ -sys/backtrace.rs \ -sys/cmath.rs \ -sys/configure_builtins.rs \ -sys/env_consts.rs \ -sys/exit.rs \ -sys/mod.rs \ -thread" +patch-std: + @echo "🛠️ Patching the std..." + @find {{ PATCH_DIR }} -type f -name "*.sed" | while read -r patch_file; do \ + rel="${patch_file#{{ PATCH_DIR }}/}"; \ + target="{{ SRC_DIR }}/${rel%.sed}.rs"; \ + if [ -f "$target" ]; then \ + echo " [SED] ${rel%.sed}.rs"; \ + sed -i -f "$patch_file" "$target"; \ + else \ + echo "⚠ [WARN] target missing: $target"; \ + fi; \ + done build-sysroot: - RUSTFLAGS="-Zforce-unstable-if-unmarked -C relocation-model=pic -C link-arg=-pie" cargo build --package std --target ../riscv64.json \ - --features compiler-builtins-mem - mkdir ../sysroot/lib/rustlib/riscv64/lib -p - rm ../sysroot/lib/rustlib/riscv64/lib/* -rf + RUSTFLAGS="-Zforce-unstable-if-unmarked -C relocation-model=pic -C link-arg=-pie" \ + cargo build --package std --target ../riscv64.json --features compiler-builtins-mem + mkdir -p ../sysroot/lib/rustlib/riscv64/lib + rm -rf ../sysroot/lib/rustlib/riscv64/lib/* cp target/riscv64/debug/deps/*.rlib ../sysroot/lib/rustlib/riscv64/lib clean: cargo clean - rm ../sysroot/lib/rustlib/riscv64/lib/* -rf - - for file in {{ STD_FILES }}; do \ - rm -rf std/src/$file; \ + rm -rf ../sysroot/lib/rustlib/riscv64/lib/* + @for item in $(find library/std/src); do \ + basename_item=$(basename "$item"); \ + keep=0; \ + for protected in {{ KEEP_FILES }}; do \ + echo $basename_item = $protected; \ + if [ "$basename_item" = "$protected" ]; then keep=1; break; fi; \ + done; \ + if [ "$keep" -eq 0 ]; then \ + rm -rf "$item"; \ + fi; \ done + rm -f std/build.rs std/Cargo.toml Cargo.toml + @for item in {{ ROOT_LINKS }}; do rm -rf $item; done - rm -rf std/build.rs - rm -rf std/Cargo.toml - rm -rf Cargo.toml +# --- Helpers --- + +cp_std path: + @mkdir -p {{ SRC_DIR / parent_directory(path) }} + @ln -fs {{ RUST_SRC / "std/src" / path }} {{ parent_directory(SRC_DIR / path) }} + +real_cp_std path: + @mkdir -p {{ SRC_DIR / parent_directory(path) }} + @cp -r {{ RUST_SRC / "std/src" / path }} {{ SRC_DIR / path }} diff --git a/library/std/.gitignore b/library/std/.gitignore index 750959a..16ddd3e 100644 --- a/library/std/.gitignore +++ b/library/std/.gitignore @@ -1,110 +1,146 @@ +Cargo.lock Cargo.toml build.rs - -src/alloc.rs -src/ascii.rs -src/backtrace.rs -src/bstr.rs -src/env.rs -src/error.rs -src/fs.rs -src/keyword_docs.rs -src/lib.rs -src/macros.rs -src/panic.rs -src/panicking.rs -src/pat.rs -src/path.rs -src/process.rs +target src/random.rs -src/rt.rs -src/tests_helpers.rs -src/time.rs -src/backtrace -src/collections -src/ffi -src/fs -src/hash -src/io -src/net src/num -src/os/raw/mod.rs -src/os/raw/tests.rs -src/os/mod.rs src/prelude -src/process src/sync -src/sys/alloc/mod.rs +src/fs.rs +src/alloc.rs +src/process +src/backtrace.rs +src/ascii.rs +src/bstr.rs +src/thread +src/keyword_docs.rs +src/tests_helpers.rs +src/error.rs +src/net +src/rt.rs +src/sys/args src/sys/args/mod.rs src/sys/args/unsupported.rs -src/sys/env/mod.rs -src/sys/env/common.rs -src/sys/env/unsupported.rs -src/sys/fd/mod.rs -src/sys/fs/mod.rs -src/sys/fs/common.rs -src/sys/fs/unsupported.rs -src/sys/helpers/mod.rs -src/sys/helpers/small_c_string.rs -src/sys/helpers/tests.rs -src/sys/helpers/wstr.rs -src/sys/io/error/generic.rs -src/sys/io/error/mod.rs -src/sys/io/io_slice/unsupported.rs -src/sys/io/is_terminal/unsupported.rs -src/sys/io/kernel_copy/mod.rs -src/sys/io/mod.rs -src/sys/net/connection/mod.rs -src/sys/net/connection/unsupported.rs -src/sys/net/hostname/mod.rs -src/sys/net/hostname/unsupported.rs -src/sys/net/mod.rs -src/sys/os_str/bytes/tests.rs -src/sys/os_str/bytes.rs -src/sys/os_str/mod.rs -src/sys/pal/mod.rs -src/sys/pal/unsupported/mod.rs -src/sys/pal/unsupported/common.rs -src/sys/pal/unsupported/os.rs -src/sys/path/mod.rs -src/sys/path/unix.rs +src/sys/thread_local +src/sys/thread_local/os.rs +src/sys/thread_local/no_threads.rs +src/sys/thread_local/mod.rs +src/sys/platform_version +src/sys/platform_version/mod.rs +src/sys/personality +src/sys/personality/dwarf src/sys/personality/dwarf/eh.rs src/sys/personality/dwarf/mod.rs src/sys/personality/dwarf/tests.rs src/sys/personality/mod.rs -src/sys/pipe/mod.rs -src/sys/pipe/unsupported.rs -src/sys/platform_version/mod.rs +src/sys/pal/mod.rs +src/sys/pal/unsupported +src/sys/pal/unsupported/os.rs +src/sys/pal/unsupported/mod.rs +src/sys/pal/unsupported/common.rs +src/sys/sync +src/sys/sync/condvar +src/sys/sync/condvar/no_threads.rs +src/sys/sync/condvar/mod.rs +src/sys/sync/mutex +src/sys/sync/mutex/no_threads.rs +src/sys/sync/mutex/mod.rs +src/sys/sync/once_box.rs +src/sys/sync/rwlock +src/sys/sync/rwlock/no_threads.rs +src/sys/sync/rwlock/mod.rs +src/sys/sync/mod.rs +src/sys/sync/thread_parking +src/sys/sync/thread_parking/mod.rs +src/sys/sync/thread_parking/unsupported.rs +src/sys/sync/once +src/sys/sync/once/no_threads.rs +src/sys/sync/once/mod.rs +src/sys/fd +src/sys/fd/mod.rs +src/sys/process src/sys/process/mod.rs src/sys/process/env.rs src/sys/process/unsupported.rs -src/sys/random/mod.rs -src/sys/random/unsupported.rs -src/sys/stdio/mod.rs -src/sys/stdio/unsupported.rs -src/sys/sync/condvar/mod.rs -src/sys/sync/condvar/no_threads.rs -src/sys/sync/mutex/mod.rs -src/sys/sync/mutex/no_threads.rs -src/sys/sync/once/mod.rs -src/sys/sync/once/no_threads.rs -src/sys/sync/rwlock/mod.rs -src/sys/sync/rwlock/no_threads.rs -src/sys/sync/thread_parking/mod.rs -src/sys/sync/thread_parking/unsupported.rs -src/sys/sync/mod.rs -src/sys/sync/once_box.rs +src/sys/pipe +src/sys/pipe/mod.rs +src/sys/pipe/unsupported.rs +src/sys/env_consts.rs +src/sys/backtrace.rs +src/sys/exit.rs +src/sys/thread src/sys/thread/mod.rs src/sys/thread/unsupported.rs -src/sys/thread_local/mod.rs -src/sys/thread_local/no_threads.rs -src/sys/thread_local/os.rs +src/sys/env +src/sys/env/mod.rs +src/sys/env/common.rs +src/sys/env/unsupported.rs +src/sys/net +src/sys/net/hostname +src/sys/net/hostname/mod.rs +src/sys/net/hostname/unsupported.rs +src/sys/net/mod.rs +src/sys/net/connection +src/sys/net/connection/mod.rs +src/sys/net/connection/unsupported.rs +src/sys/path +src/sys/path/mod.rs +src/sys/path/unix.rs +src/sys/configure_builtins.rs +src/sys/mod.rs +src/sys/time src/sys/time/mod.rs src/sys/time/unsupported.rs -src/sys/backtrace.rs +src/sys/stdio +src/sys/stdio/mod.rs +src/sys/stdio/unsupported.rs src/sys/cmath.rs -src/sys/configure_builtins.rs -src/sys/env_consts.rs -src/sys/exit.rs -src/sys/mod.rs -src/thread +src/sys/alloc/mod.rs +src/sys/helpers +src/sys/helpers/mod.rs +src/sys/helpers/wstr.rs +src/sys/helpers/tests.rs +src/sys/helpers/small_c_string.rs +src/sys/fs +src/sys/fs/mod.rs +src/sys/fs/common.rs +src/sys/fs/unsupported.rs +src/sys/random +src/sys/random/mod.rs +src/sys/random/unsupported.rs +src/sys/io +src/sys/io/is_terminal +src/sys/io/is_terminal/unsupported.rs +src/sys/io/mod.rs +src/sys/io/io_slice +src/sys/io/io_slice/unsupported.rs +src/sys/io/error +src/sys/io/error/mod.rs +src/sys/io/error/generic.rs +src/sys/io/kernel_copy +src/sys/io/kernel_copy/mod.rs +src/sys/os_str +src/sys/os_str/mod.rs +src/sys/os_str/bytes +src/sys/os_str/bytes/tests.rs +src/sys/os_str/bytes.rs +src/macros.rs +src/os +src/os/mod.rs +src/os/raw +src/os/raw/mod.rs +src/os/raw/tests.rs +src/backtrace +src/path.rs +src/lib.rs +src/process.rs +src/ffi +src/env.rs +src/pat.rs +src/fs +src/panic.rs +src/collections +src/panicking.rs +src/time.rs +src/io +src/hash diff --git a/library/std/riscv64.json b/library/std/riscv64.json deleted file mode 100644 index 1801bfe..0000000 --- a/library/std/riscv64.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "llvm-target": "riscv64", - "llvm-abiname": "lp64", - "abi": "lp64", - "data-layout": "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128", - "target-endian": "little", - "target-pointer-width": 64, - "arch": "riscv64", - "os": "survos", - "vendor": "unknown", - "env": "", - "features": "+i,+m,+a,+zicsr", - "linker": "ld.lld", - "linker-flavor": "ld", - "executables": true, - "panic-strategy": "abort", - "relocation-model": "static", - "disable-redzone": true, - "emit-debug-gdb-scripts": false, - "eh-frame-header": false, - "code-model": "medium" -} diff --git a/library/std/src/sys/alloc/survos.rs b/library/std/src/sys/alloc/survos.rs new file mode 100644 index 0000000..6b92ca8 --- /dev/null +++ b/library/std/src/sys/alloc/survos.rs @@ -0,0 +1,104 @@ +#![allow(fuzzy_provenance_casts)] + +use crate::alloc::{GlobalAlloc, Layout, System}; + +#[stable(feature = "alloc_system_type", since = "1.28.0")] +unsafe impl GlobalAlloc for System { + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + alloc(layout) + } + + unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { + dealloc(ptr, layout) + } +} + +#[repr(u64)] +enum SysCall { + Read = 0, + Write = 1, + Open = 2, + Close = 3, + Seek = 8, + Alloc = 40, + Dealloc = 41, + Spawn = 58, + ExecVE = 59, + Exit = 60, + NanoSleep = 101, + WriteIntTemp = 998, + WriteTemp = 999, + Unimplemented = 1 << 31, +} + +#[allow(clippy::too_many_arguments)] +unsafe fn _syscall( + syscall: SysCall, + mut a1: u64, + mut a2: u64, + mut a3: u64, + mut a4: u64, + mut a5: u64, + mut a6: u64, + mut a7: u64, +) -> (u64, u64, u64, u64, u64, u64, u64, u64) { + let mut a0 = syscall as u64; + unsafe { + core::arch::asm!( + "ecall", + inlateout("a0") a0, + inlateout("a1") a1, + inlateout("a2") a2, + inlateout("a3") a3, + inlateout("a4") a4, + inlateout("a5") a5, + inlateout("a6") a6, + inlateout("a7") a7, + clobber_abi("system") + ); + } + (a0, a1, a2, a3, a4, a5, a6, a7) +} + +macro_rules! syscall { + ($syscall:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr, $a7:expr) => { + _syscall($syscall, $a1, $a2, $a3, $a4, $a5, $a6, $a7) + }; + ($syscall:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr, $a6:expr) => { + syscall!($syscall, $a1, $a2, $a3, $a4, $a5, $a6, 0) + }; + ($syscall:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr, $a5:expr) => { + syscall!($syscall, $a1, $a2, $a3, $a4, $a5, 0) + }; + ($syscall:expr, $a1:expr, $a2:expr, $a3:expr, $a4:expr) => { + syscall!($syscall, $a1, $a2, $a3, $a4, 0) + }; + ($syscall:expr, $a1:expr, $a2:expr, $a3:expr) => { + syscall!($syscall, $a1, $a2, $a3, 0) + }; + ($syscall:expr, $a1:expr, $a2:expr) => { + syscall!($syscall, $a1, $a2, 0) + }; + ($syscall:expr, $a1:expr) => { + syscall!($syscall, $a1, 0) + }; + ($syscall:expr) => { + syscall!($syscall, 0) + }; +} + +fn alloc(layout: Layout) -> *mut u8 { + unsafe { + let size = layout.size(); + let align = layout.align(); + let (ptr, ..) = syscall!(SysCall::Alloc, size as u64, align as u64); + ptr as *mut u8 + } +} +fn dealloc(ptr: *mut u8, layout: core::alloc::Layout) { + unsafe { + let size = layout.size(); + let align = layout.align(); + syscall!(SysCall::Dealloc, ptr as u64, size as u64, align as u64); + } +}