Skip to content

Conversation

@qmonnet
Copy link
Owner

@qmonnet qmonnet commented Jan 13, 2026

Main features since v0.3.0 include:

  • Support for eBPF-to-eBPF function calls with automatic stack frame management, including:

    • stack frame context preservation during function calls
    • maximum nesting level of 8 function calls
    • customizable StackUsageCalculator for stack size optimization
    • support in both interpreter and JIT modes
    • assembler and disassembler support for eBPF call instructions
  • JIT support in no_std mode - users can now manually provide executable memory areas to use JIT without requiring the standard library.

  • Replacing single-byte address representation with Range type for memory access ranges, to reduce memory overhead for maps storing large amounts of data; and using the hashbrown crate for better HashMap performance in no_std mode.

  • Reduced dependency on libc, obtained by replacing several calls with standard library alternatives:

    • Replaced rand() with a simple Wyrand implementation
    • Replaced libc::memcpy with ptr::copy_nonoverlapping
    • Replaced libc memory allocation with std::alloc
      Only mprotect() remains as a libc dependency.
  • Bumping cargo edition to 2024

  • Dependency updates, including:

    • replacing the deprecated time v0.2 crate with std::time::Instant, providing cross-platform monotonic time functionality using only the standard library
    • cranelift
    • elf (we were stuck with a very old version because newer versions had breaking changes; these changes have now been addressed)
  • Various fixes and clean-ups

(These notes were mostly generated from the Git history by Claude Code.)

Main features since v0.3.0 include:

- Support for eBPF-to-eBPF function calls with automatic stack frame
  management, including:
  - stack frame context preservation during function calls
  - maximum nesting level of 8 function calls
  - customizable StackUsageCalculator for stack size optimization
  - support in both interpreter and JIT modes
  - assembler and disassembler support for eBPF call instructions

- JIT support in no_std mode - users can now manually provide executable
  memory areas to use JIT without requiring the standard library.

- Replacing single-byte address representation with Range type for
  memory access ranges, to reduce memory overhead for maps storing large
  amounts of data; and using the hashbrown crate for better HashMap
  performance in no_std mode.

- Reduced dependency on libc, obtained by replacing several calls with
  standard library alternatives:
  - Replaced rand() with a simple Wyrand implementation
  - Replaced libc::memcpy with ptr::copy_nonoverlapping
  - Replaced libc memory allocation with std::alloc
  Only mprotect() remains as a libc dependency.

- Bumping cargo edition to 2024

- Dependency updates, including:
  - replacing the deprecated time v0.2 crate with std::time::Instant,
    providing cross-platform monotonic time functionality using only the
    standard library
  - cranelift
  - elf (we were stuck with a very old version because newer versions
    had breaking changes; these changes have now been addressed)

- Various fixes and clean-ups

(These notes were mostly generated from the Git history by Claude Code.)

Signed-off-by: Quentin Monnet <[email protected]>
@qmonnet qmonnet merged commit cb0a796 into main Jan 13, 2026
7 of 8 checks passed
@qmonnet qmonnet deleted the pr/bump-version branch January 13, 2026 12:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants