mustang icon indicating copy to clipboard operation
mustang copied to clipboard

Try `mustang` on real-world programs!

Open sunfishcode opened this issue 4 years ago • 40 comments

Mustang is now complete enough to support the current directory, command-line arguments, environment variables, std::fs, std::net, std::thread, std::time,std::alloc, and everything in the standard library that doesn't involve I/O too. It can now run some real-world programs! To try it:

  • Identify a program to try. Ideally avoid the known limitations, however reports confirming the known limitations are still useful.

  • Follow the usage instructions in the README.

  • Post a comment here about whatever happens—success, failure of any kind, or something was unclear.

sunfishcode avatar Sep 19 '21 15:09 sunfishcode

I tried to run an async web app using tokio, it failed in tokio initialization because sched_getaffinity (used by num_cpus) is not implemented 🙁

What the error looks like
thread 'main' panicked at 'not implemented: sched_getaffinity', /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/c-scape-0.0.0/src/lib.rs:2289:5
stack backtrace:
   0: rust_begin_unwind
             at /home/jplatte/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:517:5
   1: core::panicking::panic_fmt
             at /home/jplatte/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:100:14
   2: sched_getaffinity
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/c-scape-0.0.0/src/lib.rs:2289:5
   3: num_cpus::linux::logical_cpus
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/num_cpus-1.13.0/src/linux.rs:41:17
   4: num_cpus::linux::get_num_cpus
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/num_cpus-1.13.0/src/linux.rs:35:17
   5: num_cpus::get
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/num_cpus-1.13.0/src/lib.rs:73:5
   6: tokio::loom::std::sys::num_cpus
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.11.0/src/loom/std/mod.rs:87:23
   7: core::ops::function::FnOnce::call_once
             at /home/jplatte/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
   8: core::option::Option<T>::unwrap_or_else
             at /home/jplatte/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:784:21
   9: tokio::runtime::builder::Builder::build_threaded_runtime
             at /home/jplatte/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-1.11.0/src/runtime/builder.rs:545:32
   [...]

When using the current_thread runtime instead, it doesn't fail to initialize but still doesn't work (worker threads panic and new ones are started constantly when trying to connect to the app AFAICT), due to unimplemented condvar stuff mentioned in the readme.

Also, nm -u does return some output for the binary:

                 U epoll_create1@GLIBC_2.9
                 U epoll_ctl@GLIBC_2.3.2
                 U epoll_wait@GLIBC_2.3.2
                 U eventfd@GLIBC_2.7

jplatte avatar Oct 08 '21 22:10 jplatte

I found an application I wrote that works with mustang: https://github.com/jplatte/i3-workspace-scroll

It's < 50 LOC but it uses command line arguments and some IPC through a socket file.

One thing I was curious about was file sizes. Here's a comparison:

Debug Release Mustang+Debug Mustang+Release
Original 7.1M 3.7M 25.3M 2.0M
Stripped 691K 447K 4.6M 1.4M

The sizes of the .so files the application links against w/o mustang (libc, libdl, libgcc_s, libm, ld-linux-x86-64) add up to about 4.1M.

jplatte avatar Oct 08 '21 23:10 jplatte

Thanks for trying it out! I believe you're the first person to have tried anything with async :smile: . Fortunately, I expect sched_getaffinity, epoll_* and eventfd will be pretty straightforward.

Concerning code size, mustang currently forces its entire libc to be statically linked in, in order to prevent the linker from satisfying any symbol references with the platform libc. I'm hoping to find a better approach there.

sunfishcode avatar Oct 08 '21 23:10 sunfishcode

With https://github.com/sunfishcode/mustang/pull/45, mustang no longer forces its entire libc to be statically linked in, and file sizes are much smaller. For example, unstripped release hello world on x86_64 went from 1.8M to 640K.

sunfishcode avatar Oct 14 '21 13:10 sunfishcode

Using latest (main) of mustang and rsix, here's what I get when running ripgrep:

...
     Running `target/x86_64-mustang-linux-gnu/debug/rg foo`
thread '<unnamed>' panicked at 'assertion failed: page_size != 0', /home/tshepang/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/thread.rs:465:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread '<unnamed>' panicked at 'attempt to create unaligned or null slice', /home/tshepang/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/raw.rs:89:5
stack backtrace:
thread panicked while processing panic. aborting.

tshepang avatar Oct 26 '21 18:10 tshepang

@tshepang Ooh, good idea trying ripgrip :-). It looks like one thing ripgrep needs is sched_getaffinity, which should help tokio too. I've now filed https://github.com/sunfishcode/mustang/issues/56 to track that.

sunfishcode avatar Oct 27 '21 02:10 sunfishcode

Thanks to @nivkner implementing sched_getaffinity, ripgrip kind of runs now!

When ripgrep runs on a single file, instead of on a directory, it uses mmap via the memmap2 crate, which calls libc::fstat, which isn't implemented yet (#71).

When ripgrip runs on directories, it appears to run successfully, but it also prints out several messages about unimplemented pthread_cond* functions:

unimplemented: pthread_condattr_init
unimplemented: pthread_condattr_setclock
unimplemented: pthread_cond_init
unimplemented: pthread_condattr_destroy
unimplemented: pthread_cond_broadcast
unimplemented: pthread_cond_destroy

This is https://github.com/sunfishcode/mustang/issues/40.

sunfishcode avatar Nov 10 '21 00:11 sunfishcode

I tried running bat with mustang. Following the README, I installed rust-src, set RUST_TARGET_PATH, added mustang = "0.3.0" to bat's dependencies, added mustang::can_run_this!(); to src/bin/bat/main.rs, and built with cargo build --release -Z build-std --target=x86_64-mustang-linux-gnu.

indexmap appears multiple times in bat's dependency tree, and has #[cfg(has_std)] attributes that don't work correctly with mustang. This issue has more info on how it works. I was able to fix it by adding this to [dependencies]:

indexmap = { version = "*", features = ["std"] }

I also ran into an an unrelated regression on Nightly which was easy enough to work around.

After the above modifications, it successfully passed the compilation step, but failed during linking. The traceback is ~1200 lines long; I'm happy to post it if it's helpful, but it looks generally like this:

error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m64" "-nostartfiles" "-Wl,--undefined=_Unwind_Backtrace" <...extremely long list of .o files, -L, .rlib files, etc.>
  = note: /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/debug/deps/liblibgit2_sys-e0d42202f97337e4.rlib(attr.o): in function `git_attr_get_many_with_session':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.21+1.1.0/libgit2/src/attr.c:183: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/debug/deps/liblibgit2_sys-e0d42202f97337e4.rlib(attr.o): in function `preload_attr_file':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/libgit2-sys-0.12.21+1.1.0/libgit2/src/attr.c:274: undefined reference to `__stack_chk_fail'
          <...many more undefined references to __stack_chk_fail, strcmp, strcasecmp, strrchr, strncmp, vsnprintf, etc.>
          collect2: error: ld returned 1 exit status

  = help: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
  = note: use the `-l` flag to specify native libraries to link
  = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)

It seems like I must have configured something incorrectly, but I can't tell from the README.

antonok-edm avatar Nov 30 '21 02:11 antonok-edm

Cool, thanks for trying bat, that's a fun idea! It looks like you've configured everything correctly; the errors you're seeing there are bugs in mustang.

Specifically, mustang so far has focused on running Rust code, and bat uses libgit2 written in C. Mustang's libc support so far only covers things used by Rust, so it doesn't yet have all the things that are common to use in C programs. #69 is a PR to add a note about this to the README.md.

A possible workaround might be to disable the git feature when building bat. I don't know if there is other C code in bat's dependency tree though.

sunfishcode avatar Nov 30 '21 14:11 sunfishcode

Neat! That makes sense, I see liblibgit2 in the errors above now. Disabling the git feature helped, then it turns out regex-onig uses C code so I had to swap it out for the pure-Rust regex-fancy feature instead.

That narrowed the errors down to just this one:

  = note: /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/debug/deps/libstd-e475f264d98f5821.rlib(std-e475f264d98f5821.std.a79cc641-cgu.2.rcgu.o): in function `std::sys::unix::os::glibc_version':
          /home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/os.rs:644: undefined reference to `gnu_get_libc_version'

That's in the standard library, so I went ahead and manually modified that sys/unix/os.rs in my toolchain directory:

 #[cfg(all(target_os = "linux", target_env = "gnu"))]
 pub fn glibc_version() -> Option<(usize, usize)> {
+    None
-    extern "C" {
-        fn gnu_get_libc_version() -> *const libc::c_char;
-    }
-    let version_cstr = unsafe { CStr::from_ptr(gnu_get_libc_version()) };
-    if let Ok(version_str) = version_cstr.to_str() {
-        parse_glibc_version(version_str)
-    } else {
-        None
-    }
}

After a clean rebuild, it successfully compiled!

It panics when running, which I guess is the point of this issue :smile:

RUST_BACKTRACE=1 cargo run -Z build-std --target=x86_64-mustang-linux-gnu -- LICENSE-APACHE
    Finished dev [unoptimized + debuginfo] target(s) in 0.08s
     Running `target/x86_64-mustang-linux-gnu/debug/bat LICENSE-APACHE`
thread 'main' panicked at 'unrecognized ioctl(21523)', /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/c-scape-0.3.0/src/lib.rs:1512:14
stack backtrace:
   0: rust_begin_unwind
             at /home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/panicking.rs:498:5
   1: core::panicking::panic_fmt
             at /home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:107:14
   2: ioctl
             at /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/c-scape-0.3.0/src/lib.rs:1512:14
   3: terminal_size::unix::terminal_size_using_fd
             at /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/terminal_size-0.1.16/src/unix.rs:31:17
   4: console::unix_term::terminal_size
             at /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/console-0.15.0/src/unix_term.rs:47:5
   5: console::term::Term::size_checked
             at /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/console-0.15.0/src/term.rs:392:9
   6: console::term::Term::size
             at /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/console-0.15.0/src/term.rs:384:9
   7: bat::app::App::config
             at ./src/bin/bat/app.rs:182:52
   8: bat::run
             at ./src/bin/bat/main.rs:303:26
   9: bat::main
             at ./src/bin/bat/main.rs:337:18
  10: core::ops::function::FnOnce::call_once
             at /home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:227:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

So that's coming from https://github.com/eminence/terminal-size/blob/master/src/unix.rs#L31:

ioctl(fd, TIOCGWINSZ.into(), &mut winsize)

On the other hand, if I prevent that code from getting run with a small patch:

diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs
index 842eec6..b60276f 100644
--- a/src/bin/bat/app.rs
+++ b/src/bin/bat/app.rs
@@ -179,7 +179,7 @@ impl App {
                     _ => unreachable!("other values for --color are not allowed"),
                 },
             paging_mode,
-            term_width: maybe_term_width.unwrap_or(Term::stdout().size().1 as usize),
+            term_width: maybe_term_width.unwrap_or_else(|| Term::stdout().size().1 as usize),
             loop_through: !(self.interactive_output
                 || self.matches.value_of("color") == Some("always")
                 || self.matches.value_of("decorations") == Some("always")

...and pass the --terminal-width argument manually on the command line, I can actually view all sorts of files with correct syntax highlighting and paging interactions!

It's very slow though, and I still can't get it to link in Release mode. I get ~250 lines of undefined reference errors, which appear to all be originating from c-scape. Some random examples, happy to post a full log if that's helpful as well:

  = note: /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-2f6985a442db2685.rlib(c_scape-2f6985a442db2685.c_scape.e6de75ef-cgu.0.rcgu.o): in function `<&T as core::fmt::Debug>::fmt':
          c_scape.e6de75ef-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h184ef3cd73ec6070E+0xf): undefined reference to `core::fmt::Formatter::debug_lower_hex'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h184ef3cd73ec6070E+0x26): undefined reference to `core::fmt::num::<impl core::fmt::LowerHex for usize>::fmt'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h184ef3cd73ec6070E+0x2f): undefined reference to `core::fmt::Formatter::debug_upper_hex'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h184ef3cd73ec6070E+0x46): undefined reference to `core::fmt::num::<impl core::fmt::UpperHex for usize>::fmt'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h184ef3cd73ec6070E+0x4f): undefined reference to `core::fmt::num::imp::<impl core::fmt::Display for usize>::fmt'
          ...
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17hbd196bcaed0b3fbcE+0xca): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-2f6985a442db2685.rlib(c_scape-2f6985a442db2685.c_scape.e6de75ef-cgu.0.rcgu.o): in function `origin::program::exit_immediately':
          c_scape.e6de75ef-cgu.0:(.text._ZN6origin7program16exit_immediately17h8677a8b25e83e50cE+0xa): undefined reference to `log::MAX_LOG_LEVEL_FILTER'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text._ZN6origin7program16exit_immediately17h8677a8b25e83e50cE+0x5a): undefined reference to `log::__private_api_log'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-2f6985a442db2685.rlib(c_scape-2f6985a442db2685.c_scape.e6de75ef-cgu.0.rcgu.o): in function `__xpg_strerror_r':
          c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x19): undefined reference to `rustix::imp::linux_raw::io::error::Error::from_errno'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x4df): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x556): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x5f5): undefined reference to `core::fmt::num::imp::<impl core::fmt::Display for i32>::fmt'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x63b): undefined reference to `alloc::fmt::format'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x66f): undefined reference to `core::slice::<impl [T]>::copy_from_slice::len_mismatch_fail'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x683): undefined reference to `core::panicking::panic_bounds_check'
          /usr/bin/ld: c_scape.e6de75ef-cgu.0:(.text.__xpg_strerror_r+0x693): undefined reference to `alloc::alloc::handle_alloc_error'
          ...

antonok-edm avatar Nov 30 '21 23:11 antonok-edm

Cool! #68 adds gnu_get_libc_version and #70 adds the TIOCGWINSZ ioctl.

I don't know what's going on with those release mode link errors yet though. Could you post the full log? You can use <details> and </details> tags to hide the log behind a click in a github comment. Also, would you be able to try running mustang's hello example in --release mode?

sunfishcode avatar Dec 01 '21 01:12 sunfishcode

Those two PRs work great! I was able to remove the workarounds for them.

Full log from bat in release mode:
error: linking with `cc` failed: exit status: 1
  |
  = note: "cc" "-m64" "-nostartfiles" "-Wl,--undefined=_Unwind_Backtrace" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/bat-ec8e91af3f6a95ff.bat.f3711392-cgu.0.rcgu.o" "-Wl,--as-needed" "-L" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/deps" "-L" "/tmp/bat/target/release/deps" "-L" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/build/ansi_colours-86c9cbf794f4a08c/out" "-L" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/build/sys-info-edf9d90becd4c67b/out" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.config/cargo/git/checkouts/mustang-602e93abf7520381/1cf3702/mustang/empty/x86_64" "-L" "/home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-mustang-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/rustcQBFN4e/libmustang-9647933cd048a944.rlib" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib" "/tmp/rustcQBFN4e/libsys_info-1cdbc8a9cf094753.rlib" "/tmp/rustcQBFN4e/libansi_colours-e2941a831c6a06c0.rlib" "-Wl,--start-group" "-Wl,--end-group" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libcompiler_builtins-5ef97cc642839815.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/antonok/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-mustang-linux-gnu/lib" "-o" "/tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/bat-ec8e91af3f6a95ff" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-Wl,-O1" "-nodefaultlibs"
  = note: /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `::fmt':
          c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h1a443e9d9e31f818E+0xf): undefined reference to `core::fmt::Formatter::debug_lower_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h1a443e9d9e31f818E+0x26): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h1a443e9d9e31f818E+0x2f): undefined reference to `core::fmt::Formatter::debug_upper_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h1a443e9d9e31f818E+0x46): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h1a443e9d9e31f818E+0x4f): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `::fmt':
          c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h219aa351b5c63e90E+0xf): undefined reference to `core::fmt::Formatter::debug_lower_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h219aa351b5c63e90E+0x26): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h219aa351b5c63e90E+0x2f): undefined reference to `core::fmt::Formatter::debug_upper_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h219aa351b5c63e90E+0x46): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN42_$LT$$RF$T$u20$as$u20$core..fmt..Debug$GT$3fmt17h219aa351b5c63e90E+0x4f): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::fmt::num::::fmt':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3fmt3num50_$LT$impl$u20$core..fmt..Debug$u20$for$u20$i64$GT$3fmt17h353cf0d4376ab5b3E+0xf): undefined reference to `core::fmt::Formatter::debug_lower_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN4core3fmt3num50_$LT$impl$u20$core..fmt..Debug$u20$for$u20$i64$GT$3fmt17h353cf0d4376ab5b3E+0x26): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN4core3fmt3num50_$LT$impl$u20$core..fmt..Debug$u20$for$u20$i64$GT$3fmt17h353cf0d4376ab5b3E+0x2f): undefined reference to `core::fmt::Formatter::debug_upper_hex'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN4core3fmt3num50_$LT$impl$u20$core..fmt..Debug$u20$for$u20$i64$GT$3fmt17h353cf0d4376ab5b3E+0x46): undefined reference to `core::fmt::num::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN4core3fmt3num50_$LT$impl$u20$core..fmt..Debug$u20$for$u20$i64$GT$3fmt17h353cf0d4376ab5b3E+0x4f): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:path::pathbuf>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr39drop_in_place$LT$std..path..PathBuf$GT$17h6e8e105559fed4c0E+0x18): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:string::string>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr42drop_in_place$LT$alloc..string..String$GT$17h181be0a18533c207E+0x18): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:ffi::valistimpl>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr42drop_in_place$LT$core..ffi..VaListImpl$GT$17h5d1b38e5d25d9ccaE+0x2): undefined reference to `<:ffi::valistimpl as core::ops::drop::drop>::drop'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:ffi::c_str::cstring>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr45drop_in_place$LT$std..ffi..c_str..CString$GT$17h2c2542beed811823E+0x19): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:vec::vec>>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT$17h8aa4b43e5931e992E+0x18): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:imp::linux_raw::fs::dir::direntry>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr62drop_in_place$LT$rustix..imp..linux_raw..fs..dir..DirEntry$GT$17h872639da79e9d8d3E+0x1b): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:borrow::cow>>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr68drop_in_place$LT$alloc..borrow..Cow$LT$std..ffi..c_str..CStr$GT$$GT$17hed8706970577ba7dE+0x21): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::ptr::drop_in_place<:vec::vec>>':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr69drop_in_place$LT$alloc..vec..Vec$LT$$RF$std..ffi..c_str..CStr$GT$$GT$17h7fc93c40775febc4E+0x1e): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o):c_scape.77e7b1bb-cgu.0:(.text._ZN4core3ptr91drop_in_place$LT$alloc..vec..Vec$LT$alloc..borrow..Cow$LT$std..ffi..c_str..CStr$GT$$GT$$GT$17h56257609118788cfE+0x25): more undefined references to `__rust_dealloc' follow
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::iter::traits::iterator::Iterator::collect':
          c_scape.77e7b1bb-cgu.0:(.text._ZN4core4iter6traits8iterator8Iterator7collect17hb1c4adfe983e4e74E+0x33): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN4core4iter6traits8iterator8Iterator7collect17hb1c4adfe983e4e74E+0x146): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::panicking::assert_failed':
          c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN4core9panicking13assert_failed17h5a4e33f9d95cfe1dE+0x49): undefined reference to `core::panicking::assert_failed_inner'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `core::panicking::assert_failed':
          c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN4core9panicking13assert_failed17hd78d1757a85ee1faE+0x49): undefined reference to `core::panicking::assert_failed_inner'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `alloc::raw_vec::finish_grow':
          c_scape.77e7b1bb-cgu.0:(.text._ZN5alloc7raw_vec11finish_grow17h3fe6418fcfbc6480E+0x2c): undefined reference to `__rust_realloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN5alloc7raw_vec11finish_grow17h3fe6418fcfbc6480E+0x50): undefined reference to `__rust_alloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `alloc::raw_vec::RawVec::reserve::do_reserve_and_handle':
          c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h256209b50c6fc8b8E+0xaf): undefined reference to `alloc::raw_vec::capacity_overflow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h256209b50c6fc8b8E+0xbc): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `alloc::raw_vec::RawVec::reserve::do_reserve_and_handle':
          c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h58c0cd5be1a66009E+0x84): undefined reference to `alloc::raw_vec::capacity_overflow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h58c0cd5be1a66009E+0x91): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `alloc::raw_vec::RawVec::reserve::do_reserve_and_handle':
          c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h8c996eb38519f8d7E+0xbd): undefined reference to `alloc::raw_vec::capacity_overflow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.unlikely._ZN5alloc7raw_vec19RawVec$LT$T$C$A$GT$7reserve21do_reserve_and_handle17h8c996eb38519f8d7E+0xca): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `origin::program::exit_immediately':
          c_scape.77e7b1bb-cgu.0:(.text._ZN6origin7program16exit_immediately17h0ecd7018bc817c7eE+0xa): undefined reference to `log::MAX_LOG_LEVEL_FILTER'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN6origin7program16exit_immediately17h0ecd7018bc817c7eE+0x5a): undefined reference to `log::__private_api_log'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `__xpg_strerror_r':
          c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x19): undefined reference to `rustix::imp::linux_raw::io::error::Error::from_errno'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x4df): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x556): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x5f5): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x63b): undefined reference to `alloc::fmt::format'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x66f): undefined reference to `core::slice::::copy_from_slice::len_mismatch_fail'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x683): undefined reference to `core::panicking::panic_bounds_check'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__xpg_strerror_r+0x693): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `open64':
          c_scape.77e7b1bb-cgu.0:(.text.open64+0x3d): undefined reference to `rustix::imp::linux_raw::conv::oflags_bits'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.open64+0xa4): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `open':
          c_scape.77e7b1bb-cgu.0:(.text.open+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.open+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `readlink':
          c_scape.77e7b1bb-cgu.0:(.text.readlink+0x57): undefined reference to `rustix::fs::at::_readlinkat'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.readlink+0xce): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.readlink+0xf2): undefined reference to `core::slice::::copy_from_slice::len_mismatch_fail'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `statx':
          c_scape.77e7b1bb-cgu.0:(.text.statx+0x204): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `realpath':
          c_scape.77e7b1bb-cgu.0:(.text.realpath+0x3f): undefined reference to `realpath_ext::util::zeroed_vec'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x5e): undefined reference to `realpath_ext::realpath_raw'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x82): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0xdb): undefined reference to `<:ffi::os_str::osstring as std::os::unix::ffi::os_str::osstringext>::from_vec'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x132): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x19e): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x1c1): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.realpath+0x225): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `fcntl':
          c_scape.77e7b1bb-cgu.0:(.text.fcntl+0x1a4): undefined reference to `<:ffi::valistimpl as core::ops::drop::drop>::drop'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.fcntl+0x1c4): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.fcntl+0x20c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.fcntl+0x227): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `mkdir':
          c_scape.77e7b1bb-cgu.0:(.text.mkdir+0x76): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `lseek64':
          c_scape.77e7b1bb-cgu.0:(.text.lseek64+0x6c): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.lseek64+0xb4): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `opendir':
          c_scape.77e7b1bb-cgu.0:(.text.opendir+0x20): undefined reference to `rustix::imp::linux_raw::conv::oflags_bits'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.opendir+0x51): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.opendir+0x98): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `readdir64_r':
          c_scape.77e7b1bb-cgu.0:(.text.readdir64_r+0x21): undefined reference to `rustix::imp::linux_raw::fs::dir::Dir::read'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.readdir64_r+0x1fd): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.readdir64_r+0x236): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.readdir64_r+0x24b): undefined reference to `core::slice::::copy_from_slice::len_mismatch_fail'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `closedir':
          c_scape.77e7b1bb-cgu.0:(.text.closedir+0x26): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.closedir+0x39): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `readv':
          c_scape.77e7b1bb-cgu.0:(.text.readv+0xc): undefined reference to `rustix::imp::linux_raw::syscalls::readv'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `poll':
          c_scape.77e7b1bb-cgu.0:(.text.poll+0x67): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `ioctl':
          c_scape.77e7b1bb-cgu.0:(.text.ioctl+0x38c): undefined reference to `<:ffi::valistimpl as core::ops::drop::drop>::drop'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.ioctl+0x3ab): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.ioctl+0x3f3): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pipe2':
          c_scape.77e7b1bb-cgu.0:(.text.pipe2+0x83): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `free':
          c_scape.77e7b1bb-cgu.0:(.text.free+0x59): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `memchr':
          c_scape.77e7b1bb-cgu.0:(.text.memchr+0xc): undefined reference to `memchr::memchr::x86::memchr::FN'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `memrchr':
          c_scape.77e7b1bb-cgu.0:(.text.memrchr+0xc): undefined reference to `memchr::memchr::x86::memrchr::FN'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `mmap':
          c_scape.77e7b1bb-cgu.0:(.text.mmap+0xb3): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `mremap':
          c_scape.77e7b1bb-cgu.0:(.text.mremap+0x128): undefined reference to `<:ffi::valistimpl as core::ops::drop::drop>::drop'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.mremap+0x150): undefined reference to `core::panicking::panic'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.mremap+0x16b): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `mprotect':
          c_scape.77e7b1bb-cgu.0:(.text.mprotect+0x4e): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `getrandom':
          c_scape.77e7b1bb-cgu.0:(.text.getrandom+0x5b): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `sysconf':
          c_scape.77e7b1bb-cgu.0:(.text.sysconf+0x3d): undefined reference to `rustix::imp::linux_raw::process::auxv::AUXV'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.sysconf+0x60): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.sysconf+0xa8): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `getcwd':
          c_scape.77e7b1bb-cgu.0:(.text.getcwd+0x31): undefined reference to `rustix::process::chdir::_getcwd'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.getcwd+0xc5): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `dl_iterate_phdr':
          c_scape.77e7b1bb-cgu.0:(.text.dl_iterate_phdr+0xa): undefined reference to `rustix::imp::linux_raw::process::auxv::AUXV'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.dl_iterate_phdr+0x7b): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.dl_iterate_phdr+0x96): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `__tls_get_addr':
          c_scape.77e7b1bb-cgu.0:(.text.__tls_get_addr+0x21): undefined reference to `origin::threads::STARTUP_TLS_INFO'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `setgid':
          c_scape.77e7b1bb-cgu.0:(.text.setgid+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.setgid+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `setgroups':
          c_scape.77e7b1bb-cgu.0:(.text.setgroups+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.setgroups+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `setuid':
          c_scape.77e7b1bb-cgu.0:(.text.setuid+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.setuid+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `getpwuid_r':
          c_scape.77e7b1bb-cgu.0:(.text.getpwuid_r+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.getpwuid_r+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `abort':
          c_scape.77e7b1bb-cgu.0:(.text.abort+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.abort+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `syscall':
          c_scape.77e7b1bb-cgu.0:(.text.syscall+0x461): undefined reference to `<:ffi::valistimpl as core::ops::drop::drop>::drop'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x4c8): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x522): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x540): undefined reference to `core::panicking::panic'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x556): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x59d): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.syscall+0x5f7): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `posix_spawnp':
          c_scape.77e7b1bb-cgu.0:(.text.posix_spawnp+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.posix_spawnp+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `posix_spawnattr_setflags':
          c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setflags+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setflags+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `posix_spawnattr_setsigdefault':
          c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setsigdefault+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setsigdefault+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `posix_spawnattr_setsigmask':
          c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setsigmask+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.posix_spawnattr_setsigmask+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `posix_spawn_file_actions_adddup2':
          c_scape.77e7b1bb-cgu.0:(.text.posix_spawn_file_actions_adddup2+0x44): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.posix_spawn_file_actions_adddup2+0x8c): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `clock_gettime':
          c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0x1c): undefined reference to `rustix::imp::linux_raw::vdso_wrappers::CLOCK_GETTIME'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0x2a): undefined reference to `rustix::imp::linux_raw::vdso_wrappers::init_clock_gettime'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0x40): undefined reference to `rustix::imp::linux_raw::vdso_wrappers::CLOCK_GETTIME'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0x4e): undefined reference to `rustix::imp::linux_raw::vdso_wrappers::init_clock_gettime'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0xb4): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.clock_gettime+0xfc): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `c_scape::null_terminated_array':
          c_scape.77e7b1bb-cgu.0:(.text._ZN7c_scape21null_terminated_array17h936ca5d9dcb302c6E+0x61): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN7c_scape21null_terminated_array17h936ca5d9dcb302c6E+0x116): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text._ZN7c_scape21null_terminated_array17h936ca5d9dcb302c6E+0x11e): undefined reference to `alloc::raw_vec::capacity_overflow'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `execvp':
          c_scape.77e7b1bb-cgu.0:(.text.execvp+0xce): undefined reference to `core::slice::memchr::memchr_general_case'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x21b): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x31a): undefined reference to `std::ffi::c_str::CString::_new'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x348): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x389): undefined reference to `rustix::imp::linux_raw::fs::syscalls::accessat'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x3ac): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x49f): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x55e): undefined reference to `rustix::runtime::_execve'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x58a): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x5a4): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x607): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x638): undefined reference to `__rust_dealloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.execvp+0x665): undefined reference to `__rust_dealloc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o):c_scape.77e7b1bb-cgu.0:(.text.execvp+0x680): more undefined references to `__rust_dealloc' follow
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `execvp':
          c_scape.77e7b1bb-cgu.0:(.text.execvp+0x789): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `fork':
          c_scape.77e7b1bb-cgu.0:(.text.fork+0x3): undefined reference to `origin::program::fork'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `waitpid':
          c_scape.77e7b1bb-cgu.0:(.text.waitpid+0x166): undefined reference to `core::panicking::panic'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `floor':
          c_scape.77e7b1bb-cgu.0:(.text.floor+0x2): undefined reference to `libm::math::floor::floor'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `ldexp':
          c_scape.77e7b1bb-cgu.0:(.text.ldexp+0x2): undefined reference to `libm::math::ldexp::ldexp'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `trunc':
          c_scape.77e7b1bb-cgu.0:(.text.trunc+0x2): undefined reference to `libm::math::trunc::trunc'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_mutex_destroy':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_destroy+0x65): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_destroy+0xbc): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_destroy+0x103): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_destroy+0x14e): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_mutex_init':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_init+0x86): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_init+0xdd): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_init+0x124): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_init+0x16f): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_mutex_lock':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x70): undefined reference to `parking_lot::raw_mutex::RawMutex::lock_slow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0xae): undefined reference to `parking_lot::raw_mutex::RawMutex::lock_slow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0xfd): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x164): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x17b): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x1c2): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x20d): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_lock+0x228): undefined reference to `core::option::expect_failed'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_mutex_trylock':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0xec): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0x153): undefined reference to `core::result::unwrap_failed'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0x16a): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0x1b1): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0x1fc): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_trylock+0x217): undefined reference to `core::option::expect_failed'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_mutex_unlock':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_unlock+0x4f): undefined reference to `parking_lot::raw_mutex::RawMutex::unlock_slow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_unlock+0xa6): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_unlock+0xfd): undefined reference to `core::fmt::num::imp::::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_unlock+0x144): undefined reference to `<:fmt::arguments as core::fmt::display>::fmt'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_mutex_unlock+0x18f): undefined reference to `core::panicking::panic_fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_rwlock_rdlock':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_rwlock_rdlock+0x41): undefined reference to `parking_lot::raw_rwlock::RawRwLock::lock_shared_slow'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `pthread_rwlock_unlock':
          c_scape.77e7b1bb-cgu.0:(.text.pthread_rwlock_unlock+0x32): undefined reference to `parking_lot::raw_rwlock::RawRwLock::unlock_shared_slow'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.pthread_rwlock_unlock+0x3e): undefined reference to `parking_lot::raw_rwlock::RawRwLock::unlock_exclusive_slow'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `__cxa_thread_atexit_impl':
          c_scape.77e7b1bb-cgu.0:(.text.__cxa_thread_atexit_impl+0x16): undefined reference to `__rust_alloc'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__cxa_thread_atexit_impl+0x32): undefined reference to `origin::threads::at_thread_exit'
          /usr/bin/ld: c_scape.77e7b1bb-cgu.0:(.text.__cxa_thread_atexit_impl+0x4c): undefined reference to `alloc::alloc::handle_alloc_error'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o): in function `exit':
          c_scape.77e7b1bb-cgu.0:(.text.exit+0x3): undefined reference to `origin::program::exit'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o):(.data.rel.ro..Lanon.ff71a27d96c0edfd7325dd87b4ef374e.9+0x18): undefined reference to `<:num::error::tryfrominterror as core::fmt::debug>::fmt'
          /usr/bin/ld: /tmp/bat/target/x86_64-mustang-linux-gnu/release/deps/libc_scape-258bf832e1d66db5.rlib(c_scape-258bf832e1d66db5.c_scape.77e7b1bb-cgu.0.rcgu.o):(.data.rel.ro..Lanon.ff71a27d96c0edfd7325dd87b4ef374e.11+0x18): undefined reference to `<:alloc::layout::layouterror as core::fmt::debug>::fmt'
          collect2: error: ld returned 1 exit status

= help: some extern functions couldn't be found; some native libraries may need to be installed or have their path specified = note: use the -l flag to specify native libraries to link = note: use the cargo:rustc-link-lib directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)

error: could not compile bat due to previous error

The hello example works fine in debug and release mode.

antonok-edm avatar Dec 01 '21 01:12 antonok-edm

Could you try commenting out the lto = true in bat's Cargo.toml? It looks like mustang may not work with lto yet.

sunfishcode avatar Dec 01 '21 02:12 sunfishcode

That did the trick!

antonok-edm avatar Dec 01 '21 02:12 antonok-edm

I also tried cargo-watch. It doesn't appear to need any extra modification for debug mode beyond adding the mustang dependency and can_run_this! macro, but there are some undefined references during linking.

Linker errors:

  = note: /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libpolling-31a2aec96d0b6c5b.rlib(polling-31a2aec96d0b6c5b.polling.a8c404e5-cgu.0.rcgu.o): in function `polling::epoll::Poller::new::{{closure}}':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/polling-2.2.0/src/epoll.rs:38: undefined reference to `epoll_create'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libcommand_group-63ab48226defceab.rlib(command_group-63ab48226defceab.command_group.9645ae60-cgu.12.rcgu.o): in function `nix::unistd::setsid':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.22.0/src/unistd.rs:290: undefined reference to `setsid'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libcommand_group-63ab48226defceab.rlib(command_group-63ab48226defceab.command_group.9645ae60-cgu.14.rcgu.o): in function `nix::sys::signal::killpg':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.22.0/src/sys/signal.rs:775: undefined reference to `killpg'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libnix-31eb011f1835f430.rlib(nix-31eb011f1835f430.nix.d2ab827a-cgu.8.rcgu.o): in function `nix::sys::signal::SigSet::wait':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.22.0/src/sys/signal.rs:491: undefined reference to `sigwait'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libnotify-3436058ff2beca65.rlib(notify-3436058ff2beca65.notify.c722c544-cgu.9.rcgu.o): in function `inotify::inotify::Inotify::add_watch':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/inotify-0.7.1/src/inotify.rs:194: undefined reference to `inotify_add_watch'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libinotify-894edffb26bc103f.rlib(inotify-894edffb26bc103f.inotify.946dde7f-cgu.3.rcgu.o): in function `inotify::inotify::Inotify::init':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/inotify-0.7.1/src/inotify.rs:104: undefined reference to `inotify_init'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libinotify-894edffb26bc103f.rlib(inotify-894edffb26bc103f.inotify.946dde7f-cgu.3.rcgu.o): in function `inotify::inotify::Inotify::rm_watch':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/inotify-0.7.1/src/inotify.rs:266: undefined reference to `inotify_rm_watch'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libmio-972309a7a773b3bb.rlib(mio-972309a7a773b3bb.mio.354b742d-cgu.5.rcgu.o): in function `mio::sys::unix::epoll::Selector::new':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/mio-0.6.23/src/sys/unix/epoll.rs:43: undefined reference to `epoll_create'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libmio-972309a7a773b3bb.rlib(mio-972309a7a773b3bb.mio.354b742d-cgu.7.rcgu.o): in function `mio::sys::unix::pipe':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/mio-0.6.23/src/sys/unix/mod.rs:71: undefined reference to `pipe'
          /usr/bin/ld: /tmp/cargo-watch/target/x86_64-mustang-linux-gnu/debug/deps/libchrono-902c570d135cc492.rlib(chrono-902c570d135cc492.chrono.6d6b6782-cgu.8.rcgu.o): in function `chrono::sys::inner::time_to_local_tm':
          /home/antonok/.config/cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/sys/unix.rs:84: undefined reference to `localtime_r'
          collect2: error: ld returned 1 exit status

Compiling in release mode fails with error[E0463]: can't find crate for panic_abort. This appears to be related to the release profile settings in Cargo.toml:

[profile.release]
lto = true
panic = "abort"
codegen-units = 1

Seems like panic = "abort" is also not supported somehow.

antonok-edm avatar Dec 08 '21 06:12 antonok-edm

@antonok-edm Thanks for the report! I've now filed several mustang bugs for the various undefined symbols there: #85, #86, #87, and #88.

lto = true is known to not work yet; would you be able to try it with that line commented out? panic = "abort" works for me in simple cases, so it's possible the problem you're seeing there is actually coming from the lto issue.

The one symbol I didn't file a bug about yet is localtime_r from within chrono. We have plenty of other work to do before this is the thing that blocks cargo-watch, on one hand. And on the other, because of this issue, it's possible that there will be ecosystem changes in this space, so we'll see what happens there.

sunfishcode avatar Dec 09 '21 00:12 sunfishcode

@sunfishcode I can't get panic = "abort" to work even in simple cases, either. For example I get the same error on my machine with this setup:

Cargo.toml

[package]
name = "testing"
version = "0.1.0"
edition = "2021"

[dependencies]
mustang = { path = "/path/to/latest/mustang" }

[profile.dev]
panic = "abort"

src/main.rs

mustang::can_run_this!();
fn main() {}
cargo run -Z build-std --target=x86_64-mustang-linux-gnu

antonok-edm avatar Dec 09 '21 04:12 antonok-edm

Ah, thanks. It looks like the panic_abort issue might be an issue in -Zbuild-std.

sunfishcode avatar Dec 09 '21 15:12 sunfishcode

Tried compiling one of my own apps with mustang and failed to link splice@@GLIBC_2.5, but that seems to be about it for now =)

  = note: /usr/bin/ld: /home/estrom/coalmine/auto-display/target/x86_64-mustang-linux-gnu/debug/deps/libstd-208577500796eba1.rlib(std-208577500796eba1.std.2946fd32-cgu.8.rcgu.o): undefined reference to symbol 'splice@@GLIBC_2.5'
          /usr/bin/ld: /lib/x86_64-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
          collect2: error: ld returned 1 exit status

edit: I am unsure why I am getting the missing DSO error since I have a build.rs file linking to some libs, it's as if the build.rs is not executed when running RUST_LOG=trace cargo +nightly run -Z build-std --target=../mustang/specs/x86_64-mustang-linux-gnu.json

eHammarstrom avatar Jan 05 '22 15:01 eHammarstrom

I haven't seen DSO errors like that yet, so I don't have any guesses there. Would you be able to provide a link to the source code?

Also, I filed #91 to track splice. Thanks for trying Mustang!

sunfishcode avatar Jan 06 '22 18:01 sunfishcode

Sure, here you go.

Thanks for working towards a libc-free Rust option =)

eHammarstrom avatar Jan 06 '22 19:01 eHammarstrom

Just tried uutils/coreutils (which, compiled with Mustang, would go a long way to a pure-Rust Linux userspace). Failed with a bunch of linker errors:

Full linker output
  = note: /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_date-7e8774767c77ce2e.rlib(uu_date-7e8774767c77ce2e.bilzgeeg2726m8c.rcgu.o): in function `uu_date::set_system_datetime':
          /home/arch/coreutils/src/uu/date/src/date.rs:388: undefined reference to `clock_settime'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_test-131b81c88d300307.rlib(uu_test-131b81c88d300307.15b4g6ud14u6ag85.rcgu.o): in function `uu_test::path::{{closure}}':
          /home/arch/coreutils/src/uu/test/src/test.rs:308: undefined reference to `geteuid'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_test-131b81c88d300307.rlib(uu_test-131b81c88d300307.15b4g6ud14u6ag85.rcgu.o): in function `uu_test::path::{{closure}}':
          /home/arch/coreutils/src/uu/test/src/test.rs:317: undefined reference to `getegid'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_df-af487dc561a0e8ef.rlib(uu_df-af487dc561a0e8ef.1sn6wsjgw9lnip5a.rcgu.o): in function `uu_df::Filesystem::new':
          /home/arch/coreutils/src/uu/df/src/df.rs:147: undefined reference to `statfs'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o): in function `string_cmp_ic':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:2458: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o): in function `backref_match_at_nested_level':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:2595: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o): in function `match_at':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:4433: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o): in function `search_in_range':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:5744: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o): in function `onig_builtin_error':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:6348: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regexec.o):/home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regexec.c:6414: more undefined references to `__stack_chk_fail' follow
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regerror.o): in function `sprint_byte':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regerror.c:209: undefined reference to `snprintf'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regerror.o): in function `sprint_byte_with_x':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regerror.c:214: undefined reference to `snprintf'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regerror.o): in function `onig_error_code_to_str':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regerror.c:348: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regerror.o): in function `onig_snprintf_with_pattern':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regerror.c:361: undefined reference to `vsnprintf'
          /usr/bin/ld: /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regerror.c:412: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regparse.o): in function `onig_st_lookup_strend':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regparse.c:601: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regparse.o): in function `onig_st_lookup_callout_name_table':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regparse.c:697: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regparse.o): in function `name_find':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regparse.c:831: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regparse.o): in function `callout_name_find':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regparse.c:1424: undefined reference to `__stack_chk_fail'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libonig_sys-3fae391231f1fd33.rlib(regparse.o):/home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/onig_sys-69.7.1/oniguruma/src/regparse.c:1724: more undefined references to `__stack_chk_fail' follow
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_cp-e7765213f714af8a.rlib(uu_cp-e7765213f714af8a.ifd3rgonv9fqlg2.rcgu.o): in function `uu_cp::preserve_hardlinks':
          /home/arch/coreutils/src/uu/cp/src/cp.rs:765: undefined reference to `lstat'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuu_cp-e7765213f714af8a.rlib(uu_cp-e7765213f714af8a.16x3thf414piy1gq.rcgu.o): in function `nix::sys::stat::lstat::{{closure}}':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.23.1/src/sys/stat.rs:113: undefined reference to `lstat'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libxattr-8ee1af6778cd2cf0.rlib(xattr-8ee1af6778cd2cf0.xattr.adac5fb6-cgu.0.rcgu.o): in function `xattr::sys::linux_macos::get_path::{{closure}}':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/xattr-0.2.2/src/sys/linux_macos/mod.rs:120: undefined reference to `lgetxattr'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libxattr-8ee1af6778cd2cf0.rlib(xattr-8ee1af6778cd2cf0.xattr.adac5fb6-cgu.0.rcgu.o): in function `xattr::sys::linux_macos::list_path::{{closure}}':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/xattr-0.2.2/src/sys/linux_macos/mod.rs:162: undefined reference to `llistxattr'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libxattr-8ee1af6778cd2cf0.rlib(xattr-8ee1af6778cd2cf0.xattr.adac5fb6-cgu.12.rcgu.o): in function `xattr::sys::linux_macos::linux::lsetxattr':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/xattr-0.2.2/src/sys/linux_macos/linux.rs:51: undefined reference to `lsetxattr'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libchrono-ddb5310879217578.rlib(chrono-ddb5310879217578.chrono.cbe7f02e-cgu.10.rcgu.o): in function `chrono::sys::inner::time_to_local_tm':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/sys/unix.rs:84: undefined reference to `localtime_r'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libchrono-ddb5310879217578.rlib(chrono-ddb5310879217578.chrono.cbe7f02e-cgu.10.rcgu.o): in function `chrono::sys::inner::utc_tm_to_time':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/sys/unix.rs:119: undefined reference to `timegm'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libchrono-ddb5310879217578.rlib(chrono-ddb5310879217578.chrono.cbe7f02e-cgu.10.rcgu.o): in function `chrono::sys::inner::local_tm_to_time':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/chrono-0.4.19/src/sys/unix.rs:125: undefined reference to `mktime'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libfiletime-8d5d1190dfcb6365.rlib(filetime-8d5d1190dfcb6365.filetime.c92c8628-cgu.0.rcgu.o): in function `filetime::imp::utimes::set_times':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/filetime-0.2.15/src/unix/utimes.rs:102: undefined reference to `lutimes'
          /usr/bin/ld: /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/filetime-0.2.15/src/unix/utimes.rs:104: undefined reference to `utimes'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuucore-64f687fcce5938ca.rlib(uucore-64f687fcce5938ca.3gd6fduxq9umd4wk.rcgu.o): in function `<uucore::features::entries::Passwd as uucore::features::entries::Locate<u32>>::locate':
          /home/arch/coreutils/src/uucore/src/lib/features/entries.rs:277: undefined reference to `getpwuid'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuucore-64f687fcce5938ca.rlib(uucore-64f687fcce5938ca.3gd6fduxq9umd4wk.rcgu.o): in function `<uucore::features::entries::Group as uucore::features::entries::Locate<u32>>::locate':
          /home/arch/coreutils/src/uucore/src/lib/features/entries.rs:277: undefined reference to `getgrgid'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libuucore-64f687fcce5938ca.rlib(uucore-64f687fcce5938ca.3s87udrgtxe68yjf.rcgu.o): in function `uucore::features::mode::get_umask':
          /home/arch/coreutils/src/uucore/src/lib/features/mode.rs:153: undefined reference to `umask'
          /usr/bin/ld: /home/arch/coreutils/src/uucore/src/lib/features/mode.rs:154: undefined reference to `umask'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libnix-2e60a8e16ad560ea.rlib(nix-2e60a8e16ad560ea.nix.d207753e-cgu.14.rcgu.o): in function `nix::unistd::pipe':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.23.1/src/unistd.rs:1065: undefined reference to `pipe'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libnix-2e60a8e16ad560ea.rlib(nix-2e60a8e16ad560ea.nix.d207753e-cgu.5.rcgu.o): in function `nix::fcntl::splice':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.23.1/src/fcntl.rs:569: undefined reference to `splice'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libnix-2e60a8e16ad560ea.rlib(nix-2e60a8e16ad560ea.nix.d207753e-cgu.5.rcgu.o): in function `nix::fcntl::vmsplice':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/nix-0.23.1/src/fcntl.rs:582: undefined reference to `vmsplice'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libtime-a0a4fb340b453f8f.rlib(time-a0a4fb340b453f8f.time.f48245f0-cgu.7.rcgu.o): in function `time::sys::inner::time_to_utc_tm':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/time-0.1.43/src/sys.rs:286: undefined reference to `gmtime_r'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libtime-a0a4fb340b453f8f.rlib(time-a0a4fb340b453f8f.time.f48245f0-cgu.7.rcgu.o): in function `time::sys::inner::time_to_local_tm':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/time-0.1.43/src/sys.rs:297: undefined reference to `localtime_r'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libtime-a0a4fb340b453f8f.rlib(time-a0a4fb340b453f8f.time.f48245f0-cgu.7.rcgu.o): in function `time::sys::inner::utc_tm_to_time':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/time-0.1.43/src/sys.rs:332: undefined reference to `timegm'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libtime-a0a4fb340b453f8f.rlib(time-a0a4fb340b453f8f.time.f48245f0-cgu.7.rcgu.o): in function `time::sys::inner::local_tm_to_time':
          /home/arch/.cargo/registry/src/github.com-1ecc6299db9ec823/time-0.1.43/src/sys.rs:338: undefined reference to `mktime'
          /usr/bin/ld: /home/arch/coreutils/target/x86_64-mustang-linux-gnu/debug/deps/libstd-237e1f59287854f6.rlib(std-237e1f59287854f6.std.2a92cf86-cgu.7.rcgu.o): in function `std::sys::unix::kernel_copy::sendfile_splice':
          /home/arch/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/unix/kernel_copy.rs:654: undefined reference to `splice'

The missing symbols:

  • __stack_chk_fail (#132)
  • clock_settime (#176)
  • getegid (#104)
  • geteuid (#104)
  • getgrgid (#171)
  • getpwuid (#171)
  • gmtime_r (#125)
  • lgetxattr (#170)
  • llistxattr (#170)
  • localtime_r (#125)
  • lsetxattr (#170)
  • lstat (#104)
  • lutimes (#168)
  • mktime (#125)
  • pipe (#88)
  • snprintf (#125)
  • splice (#91)
  • statfs (#169)
  • timegm (#125)
  • umask (#176)
  • utimes (#128)
  • vmsplice (#169)
  • vsnprintf (#125)

(Also, c-scape currently doesn't compile because of the signature changes in https://github.com/bytecodealliance/rustix/commit/f02031169989d821cf033e9ef880908adb857715; I've quickly attempted to fix this, although I haven't tested it at all.)

Gaelan avatar Feb 23 '22 18:02 Gaelan

@eHammarstrom Thanks! I haven't investigated it in detail, but my guess of what's going on is that these lines in auto-display's build.rs:

println!("cargo:rustc-link-lib=X11");
println!("cargo:rustc-link-lib=Xrandr");

transitively pull in libc.so.6, which is then not happy about sharing a process with mustang. As a workaround, would it be possible to try statically linking with the X11 and Xrandr libraries?

@Gaelan Cool, thanks for trying coreutils! Several of those functions are in the "top half" of libc, such as snprintf, getpwuid, mktime, and others, which mustang doesn't have much coverage for yet. It's possible that we could look at using relibc for these; I filed #100 to track that.

sunfishcode avatar Feb 23 '22 20:02 sunfishcode

@Gaelan Also, #101 should fix the signature mismatches in c-scape. Sorry for the breakage there!

sunfishcode avatar Feb 24 '22 23:02 sunfishcode

@carbotaniuman added fstat in #104, and now ripgrep appears to be fully working under Mustang!

sunfishcode avatar Jun 23 '22 21:06 sunfishcode

Epoll, eventfd, sched_getaffinity, and more are all implemented now, including patches from @notgull and @nivkner, and Web servers built on tokio and async-std appear to be fully working on Mustang!

sunfishcode avatar Mar 29 '23 22:03 sunfishcode

@Gaelan My coreutils branch at https://github.com/sunfishcode/coreutils/ now passes all the tests in the default feature set under mustang, except test_tmp_files_deleted_on_sigint because that needs a custom signal handler, which isn't supported yet.

sunfishcode avatar Apr 20 '23 13:04 sunfishcode

Custom signal handlers are now implemented and coreutils' test_tmp_files_deleted_on_sigint now passes. Also, more functions are now implemented, and everything in coreutils' default and "unix" feature sets now work.

sunfishcode avatar Apr 26 '23 04:04 sunfishcode

panic = "abort" now works in mustang. To use it, you need to also change the -Z build-std to -Z build-std=panic_abort,std.

Unless I've missed something, everything reported here so far except lto and auto-display is now working: panic = "abort", bat (including git2 support), ripgrep, coreutils (including the "unix" feature set), cargo-watch, tokio, async-std.

sunfishcode avatar Apr 26 '23 20:04 sunfishcode

I'm interested in building a shared library with mustang. I'm sure there are many reasons why this would not work currently but just to verify it does not work out of the box i've built my lib with mustang, extracted the archive then re-linked with lld as a -shared lib. This resulted in the following error on load:

libmustang_test.so: undefined symbol: main

It then occurred to me that I had not seen any examples of using mustang to build a library, perhaps there is some fundamental issue there that I'm missing. (Like maybe the lack of a crt means we need to hook into the main function somehow?)

Also, obviously in the readme you've explicitly stated that mustang does not support dynamic linkage. Thats something I'd be interested in helping out with but would need mentoring.

estk avatar Jun 07 '23 21:06 estk