A library to compile USDT probes into a Rust library

Overview


sonde

crates.io documentation

sonde is a library to compile USDT probes into a Rust library, and to generate a friendly Rust idiomatic API around it.

Userland Statically Defined Tracing probes (USDT for short) is a technique inherited from DTrace (see OpenDtrace to learn more). It allows user to define statically tracing probes in their own application; while they are traditionally declared in the kernel.

USDT probes can be naturally consumed with DTrace, but also with eBPF (bcc, bpftrace…).

Lightweight probes by design

USDT probes for libraries and executables are defined in an ELF section in the corresponding application binary. A probe is translated into a nop instruction, and its metadata are stored in the ELF's .note.stapstd section. When registering a probe, USDT tool (like dtrace, bcc, bpftrace etc.) will read the ELF section, and instrument the instruction from nop to breakpoint, and after that, the attached tracing event is run. After deregistering the probe, USDT will restore the nop instruction from breakpoint.

The overhead of using USDT probes is almost zero when no tool is listening the probes, otherwise a tiny overhead can be noticed.

The workflow

Everything is automated. dtrace must be present on the system at compile-time though. Let's imagine the following sonde-test fictitious project:

/sonde-test
├── src
│  ├── main.rs
├── build.rs
├── Cargo.toml
├── provider.d

Start with the obvious thing: let's add the following lines to the Cargo.toml file:

[build-dependencies]
sonde = "0.1"

Now, let's see what is in the provider.d file. It's not a sonde specific vendor format, it's the canonical way to declare USDT probes (see Scripting)!

provider hello {
    probe world(); 
    probe you(char*, int);
};

It describes a probe provider, hello, with two probes:

  1. world,
  2. you with 2 arguments: char* and int.

Be careful, D types aren't the same as C types, even if they look like the same.

At this step, one needs to play with dtrace -s to compile the probes into systemtrap headers or an object file, but forget about that, sonde got you covered. Let's see what's in the build.rs script:

fn main() {
    sonde::Builder::new()
        .file("./provider.d")
        .compile();
}

That's all. That's the minimum one needs to write to make it work.

Ultimately, we want to fire this probe from our code. Let's see what's inside src/main.rs then:

// Include the friendly Rust idiomatic API automatically generated by
// `sonde`, inside a dedicated module, e.g. `tracing`.
mod tracing {
    include!(env!("SONDE_RUST_API_FILE"));
}

fn main() {
    tracing::hello::world();

    println!("Hello, World!");
}

What can we see here? The tracing module contains a hello module, corresponding to the hello provider. And this module contains a world function, corresponding to the world probe. Nice!

See what's contained by the file pointed by SONDE_RUST_API_FILE:
/// Bindings from Rust to the C FFI small library that calls the
/// probes.

use std::os::raw::*;

extern "C" {
    #[doc(hidden)]
    fn hello_probe_world();

    #[doc(hidden)]
    fn hello_probe_you(arg0: *mut c_char, arg1: c_int);
}

/// Probes for the `hello` provider.
pub mod r#hello {
    use std::os::raw::*;

    /// Call the `world` probe of the `hello` provider.
    pub fn r#world() {
        unsafe { super::hello_probe_world() };
    }

    /// Call the `you` probe of the `hello` provider.
    pub fn r#you(arg0: *mut c_char, arg1: c_int) {
        unsafe { super::hello_probe_you(arg0, arg1) };
    }
}

Let's see it in action:

$ cargo build --release
$ sudo dtrace -l -c ./target/release/sonde-test | rg sonde-test
123456 hello98765 sonde-test hello_probe_world world

Neat! Our sonde-test binary contains a world probe from the hello provider!

$ # Let's execute `sonde-test` as usual.
$ ./target/release/sonde-test
Hello, World!
$
$ # Now, let's execute it with `dtrace` (or any other tracing tool).
$ # Let's listen the `world` probe and prints `gotcha!` when it's executed.
$ sudo dtrace -n 'hello*:::world { printf("gotcha!\n"); }' -q -c ./target/release/sonde-test
Hello, World!
gotcha!

Eh, it works! Let's try with the you probe now:

fn main() {
    {
        let who = std::ffi::CString::new("Gordon").unwrap();
        tracing::hello::you(who.as_ptr() as *mut _, who.as_bytes().len() as _);
    }

    println!("Hello, World!");
}

Time to show off:

$ cargo build --release
$ sudo dtrace -n 'hello*:::you { printf("who=`%s`\n", stringof(copyin(arg0, arg1))); }' -q -c ./target/release/sonde-test
Hello, World!
who=`Gordon`

Successfully reading a string from Rust inside a USDT probe!

With sonde, you can add as many probes inside your Rust library or binary as you need by simply editing your canonical .d file.

Bonus: sonde generates documentation for your probes automatically. Run cargo doc --open to check.

Possible limitations

Types

DTrace has its own type system (close to C) (see Data Types and Sizes). sonde tries to map it to the Rust system as much as possible, but it's possible that some types could not match. The following types are supported:

Type Name in D Type Name in Rust
char std::os::raw::c_char
short std::os::raw::c_short
int std::os::raw::c_int
long std::os::raw::c_long
long long std::os::raw::c_longlong
int8_t i8
int16_t i16
int32_t i32
int64_t i64
intptr_t isize
uint8_t u8
uint16_t u16
uint32_t u32
uint64_t u64
uintptr_t usize
float std::os::raw::c_float
double std::os::raw::c_double
T* *mut T
T** *mut *mut T (and so on)

Parser

The .d files are parsed by sonde. For the moment, only the provider blocks are parsed, which declare the probes. All the pragma (#pragma) directives are ignored for the moment.

License

BSD-3-Clause, see LICENSE.md.

You might also like...
Some WIP payload in Rust running on M1.

m1saka Some WIP payload in Rust running on M1. Project informations The aim of this payload is to provide exploration capabilities while providing a s

⚙️ Workshop Publishing Utility for Garry's Mod, written in Rust & Svelte and powered by Tauri
⚙️ Workshop Publishing Utility for Garry's Mod, written in Rust & Svelte and powered by Tauri

⚙️ gmpublisher Currently in Beta development. A powerful and feature-packed Workshop publisher for Garry's Mod is finally here! Click for downloads Ar

A neofetch alike program that shows hardware and distro information written in rust.

nyafetch A neofetch alike program that shows hardware and distro information written in rust. installing install $ make install # by default, install

Automated license checking for rust. cargo lichking is a Cargo subcommand that checks licensing information for dependencies.

cargo-lichking Automated license checking for rust. cargo lichking is a Cargo subcommand that checks licensing information for dependencies. Liches ar

Create target folder as a RAMdisk for faster Rust compilation.

cargo-ramdisk This crate is only supported for unix like systems! cargo-ramdisk creates a ramdisk at the target folder of your project for ridiculousl

cargo extension that can generate BitBake recipes utilizing the classes from meta-rust

cargo-bitbake cargo bitbake is a Cargo subcommand that generates a BitBake recipe that uses meta-rust to build a Cargo based project for Yocto Install

A small utility to compare Rust micro-benchmarks.
A small utility to compare Rust micro-benchmarks.

cargo benchcmp A small utility for comparing micro-benchmarks produced by cargo bench. The utility takes as input two sets of micro-benchmarks (one "o

"goto" implementation for Rust

Goto/Label for Rust Tired of using newfangled control flow mechnisms like "loop," "while," and "for"? Well worry no more! Finally, "goto" and "label"

A library to compile USDT probes into a Rust library
A library to compile USDT probes into a Rust library

sonde sonde is a library to compile USDT probes into a Rust library, and to generate a friendly Rust idiomatic API around it. Userland Statically Defi

Scans the Ethereum network for USDT ERC-20 token transfer transactions

ethscan This is a Rust command line program for scanning the Ethereum blockchain for USDT transfers within a time span and amount span. prerequisites

Rust library for build scripts to compile C/C++ code into a Rust library

A library to compile C/C++/assembly into a Rust library/application.

Rust library to convert RGB 24-bit colors into ANSI 256 (8-bit) color codes with zero dependencies and at compile-time.
Rust library to convert RGB 24-bit colors into ANSI 256 (8-bit) color codes with zero dependencies and at compile-time.

rgb2ansi256 rgb2ansi256 is a small Rust library to convert RGB 24-bit colors into ANSI 256 (8-bit) color codes with zero dependencies and const fn. Th

Rust Macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.
Rust Macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev.

Rust Embed Rust Custom Derive Macro which loads files into the rust binary at compile time during release and loads the file from the fs during dev. Y

compile rust code into memes
compile rust code into memes

cargo-memex Besides their size, rust binaries have a significant disadvantage: rust binaries are not memes yet. cargo-memex is a cargo subcommand that

Typify - Compile JSON Schema documents into Rust types.

Typify Compile JSON Schema documents into Rust types. This can be used ... via the macro import_types!("types.json") to generate Rust types directly i

A rollup plugin that compile Rust code into WebAssembly modules

rollup-plugin-rust tl;dr -- see examples This is a rollup plugin that loads Rust code so it can be interop with Javascript base project. Currently, th

Contains the source code to compile the drop'in language into WebAssembly files

drop'in compiler This repository contains the source code to compile the drop'in language into WebAssembly files. This source code is in an experiment

A series of crates that I made to compile images/video into asciinema & play them.

Bad Apple A series of crates that I made to compile images/video into asciinema & play them. The end goal is to make a kernel & legacy bootloader that

Compile your WebAssembly programs into SPIR-V shaders

wasm2spirv - Compile your WebAssembly programs into SPIR-V shaders Warning wasm2spirv is still in early development, and not production ready. This re

Comments
  • Handle semaphore compilation / dtrace on linux

    Handle semaphore compilation / dtrace on linux

    I'm not sure exactly what the differences are between the system where this was tested and mine, I ran into the problem described in issue #1 . The build failed first because of an -arch dtrace argument not available on my system (comes from systemtap 4.5). This was made an optional argument (default off). Then it failed because of the semaphore file not being linked in. This was solved by adding an option to either compile without the semaphore object file (original behaviour, default), or to explicitly generate it (option).

    If this doesn't play well with other systems this library was tested on, I'm happy to put some cfg guards around the functionality.

    Fixes https://github.com/wasmerio/sonde-rs/issues/1

    opened by viraptor 4
  • example fails to compile on ubuntu / rustc 1.53.0

    example fails to compile on ubuntu / rustc 1.53.0

    Hi,

    I tried to run the example code and it fails to compile. I use the dtrace provided by systemtap-sdt-dev on Ubuntu and rust 1.53.0.

    The error is the following:

      = note: /usr/bin/ld: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/libsonde-ffi.a(sonde-ffiU70Emz.o): in function `hello_probe_you':
              /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:9: undefined reference to `HELLO_YOU'
              collect2: error: ld returned 1 exit status
    

    or in full:

    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_world’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:5:5: warning: implicit declaration of function ‘HELLO_WORLD’ [-Wimplicit-function-declaration]
    warning:     5 |     HELLO_WORLD();
    warning:       |     ^~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_you’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:9:5: warning: implicit declaration of function ‘HELLO_YOU’ [-Wimplicit-function-declaration]
    warning:     9 |     HELLO_YOU(arg0, arg1);
    warning:       |     ^~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_me’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:13:5: warning: implicit declaration of function ‘HELLO_ME’ [-Wimplicit-function-declaration]
    warning:    13 |     HELLO_ME();
    warning:       |     ^~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_you_me’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:17:5: warning: implicit declaration of function ‘HELLO_YOU_ME’ [-Wimplicit-function-declaration]
    warning:    17 |     HELLO_YOU_ME();
    warning:       |     ^~~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_le_monde’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:22:5: warning: implicit declaration of function ‘SALUT_LE_MONDE’ [-Wimplicit-function-declaration]
    warning:    22 |     SALUT_LE_MONDE();
    warning:       |     ^~~~~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_toi’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:26:5: warning: implicit declaration of function ‘SALUT_TOI’ [-Wimplicit-function-declaration]
    warning:    26 |     SALUT_TOI();
    warning:       |     ^~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_moi’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:30:5: warning: implicit declaration of function ‘SALUT_MOI’ [-Wimplicit-function-declaration]
    warning:    30 |     SALUT_MOI();
    warning:       |     ^~~~~~~~~
    error: linking with `cc` failed: exit status: 1
      |
      = note: "cc" "-m64" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-Wl,--as-needed" "-L" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.0.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.1.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.10.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.11.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.12.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.13.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.14.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.15.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.2.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.3.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.4.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.5.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.6.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.7.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.8.rcgu.o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.sonde_test.3x2z20gm-cgu.9.rcgu.o" "-o" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps/sonde_test-3dd6d5dc97a09a63.32b8j1duep7cebtu.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/deps" "-L" "/home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out" "-L" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "-Wl,--whole-archive" "-lsonde-ffi" "-Wl,--no-whole-archive" "-Wl,--start-group" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-b6b48477bfa8c673.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-f560ec02638f7ffe.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-9c8eadb7013c9e0b.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-8b0ec8dbdb85d0bf.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-ba5d5ee707c805d2.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-55166126dbdd5e46.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-c327b365eae3b2f3.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-416439b546a0d033.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-2581188d29552e15.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-da7b2635bfcce6ef.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-09200ed1945e7b2b.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-223ac369b29f5000.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-39562fe6600dd936.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-9b411bb7a19f81b3.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-64ea0581d80339f7.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-b2dbda88b377d685.rlib" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-2a8415a96ed1d7dc.rlib" "-Wl,--end-group" "/home/heinz/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-c4d9a5b072ee3191.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc"
      = note: /usr/bin/ld: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/libsonde-ffi.a(sonde-ffiU70Emz.o): in function `hello_probe_you':
              /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:9: undefined reference to `HELLO_YOU'
              collect2: error: ld returned 1 exit status
              
    
    error: aborting due to previous error
    
    The following warnings were emitted during compilation:
    
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_world’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:5:5: warning: implicit declaration of function ‘HELLO_WORLD’ [-Wimplicit-function-declaration]
    warning:     5 |     HELLO_WORLD();
    warning:       |     ^~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_you’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:9:5: warning: implicit declaration of function ‘HELLO_YOU’ [-Wimplicit-function-declaration]
    warning:     9 |     HELLO_YOU(arg0, arg1);
    warning:       |     ^~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_me’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:13:5: warning: implicit declaration of function ‘HELLO_ME’ [-Wimplicit-function-declaration]
    warning:    13 |     HELLO_ME();
    warning:       |     ^~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘hello_probe_you_me’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:17:5: warning: implicit declaration of function ‘HELLO_YOU_ME’ [-Wimplicit-function-declaration]
    warning:    17 |     HELLO_YOU_ME();
    warning:       |     ^~~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_le_monde’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:22:5: warning: implicit declaration of function ‘SALUT_LE_MONDE’ [-Wimplicit-function-declaration]
    warning:    22 |     SALUT_LE_MONDE();
    warning:       |     ^~~~~~~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_toi’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:26:5: warning: implicit declaration of function ‘SALUT_TOI’ [-Wimplicit-function-declaration]
    warning:    26 |     SALUT_TOI();
    warning:       |     ^~~~~~~~~
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c: In function ‘salut_probe_moi’:
    warning: /home/heinz/Projects/Other/sonde-rs/sonde-test/target/debug/build/sonde-test-29186d9285cdc020/out/sonde-ffiU70Emz.c:30:5: warning: implicit declaration of function ‘SALUT_MOI’ [-Wimplicit-function-declaration]
    warning:    30 |     SALUT_MOI();
    warning:       |     ^~~~~~~~~
    
    error: could not compile `sonde-test`
    
    opened by Licenser 5
Owner
Wasmer
Wasmer ❤️ Open Source
Wasmer
Detects usage of unsafe Rust in a Rust crate and its dependencies.

cargo-geiger ☢️ A program that lists statistics related to the usage of unsafe Rust code in a Rust crate and all its dependencies. This cargo plugin w

Rust Secure Code Working Group 1.1k Dec 26, 2022
Powerful database anonymizer with flexible rules. Written in Rust.

[Data]nymizer Powerful database anonymizer with flexible rules. Written in Rust. Datanymizer is created & supported by Evrone. What else we develop wi

[Data]nymizer 381 Dec 26, 2022
⚡️Lightning-fast linter for .env files. Written in Rust 🦀

⚡️ Lightning-fast linter for .env files. Written in Rust ?? Dotenv-linter can check / fix / compare .env files for problems that may cause the applica

null 1.5k Jan 9, 2023
Rust Code Completion utility

Racer - code completion for Rust RACER = Rust Auto-Complete-er. A utility intended to provide Rust code completion for editors and IDEs. Maybe one day

null 3.4k Jan 4, 2023
Format Rust code

rustfmt Quick start On the Stable toolchain On the Nightly toolchain Installing from source Usage Running cargo fmt Running rustfmt directly Verifying

The Rust Programming Language 4.8k Jan 7, 2023
The Rust toolchain installer

rustup: the Rust toolchain installer Master CI Build Status Windows macOS Linux Etc rustup installs The Rust Programming Language from the official re

The Rust Programming Language 5.1k Jan 8, 2023
Repository for the Rust Language Server (aka RLS)

Rust Language Server (RLS) The RLS provides a server that runs in the background, providing IDEs, editors, and other tools with information about Rust

The Rust Programming Language 3.6k Jan 7, 2023
🦀 The ultimate search extension for Rust

Rust Search Extension 简体中文 The ultimate search extension for Rust Search docs, crates, builtin attributes, official books, and error codes, etc in you

Huhu 962 Dec 30, 2022
a freeform Rust build system

tinyrick: a freeform Rust build system .---. ^ o{__ω__ o{ ^0^ -Let me out! ~~ ( // *|* \xx\) xx`|' = =

Andrew 48 Dec 16, 2022
The Curly programming language (now in Rust!)

Curly Curly is a functional programming language that focuses on iterators. Some of its main implementation features include sum types, iterators, lis

Curly Language 30 Jan 6, 2023