# Changelog

## v0.7.0 **Major Version Bump**

 - Updated syscall lists to Linux 6.16.
 - arm: Fixed thumb-mode build (again). It is now activated by the "thumb-mode"
   crate feature, which is set automatically by `build.rs`.
 - loongarch64 is now supported (#53).
 - Various clippy lint fixes.

⚠️ **Breaking Changes** ⚠️
 - `syscalls::raw::*` now take a `usize` instead of `Sysno` for the syscall
   number. This allows bypassing `Sysno` if you need to invoke a syscall that is
   not in the `Sysno` enum. To migrate existing code, you can cast any `Sysno`
   type to a `usize` (e.g., `Sysno::openat as usize`). (#50)
 - `sync_file_range2` was renamed to `sync_file_range` (#55)

## v0.6.18

 - Fixed build for ARMv4t and ARMv5te thumb mode.

## v0.6.17

 - Updated syscall lists to Linux 6.8.

## v0.6.16

 - ~~Fixed build for ARMv4t and ARMv5te thumb mode.~~ (Actually fixed in v0.6.18)

## v0.6.15

 - Added `SysnoMap::into_iter`.
 - Added `SysnoSet::into_iter`.
 - Removed unnecessary build dependency on `cc`.
 - aarch64: Fixed a doc test

## v0.6.14

 - Updated to syscalls from Linux v6.5.

## v0.6.13

 - armv7: Added support for armv7-linux-androideabi targets.

## v0.6.12

 - riscv: Added the `riscv_flush_icache` syscall
 - powerpc64: Fixed a typo preventing the `asm_experimental_arch` feature from
   being enabled.

## v0.6.11

 - Added riscv32 and riscv64 support.

## v0.6.10

 - Added `SysnoMap::init_all`.
 - Added support for ARM thumb mode. Compilation would fail in this case.
   Requires the use of `build.rs` (or using a nightly compiler).

## v0.6.9

 - Added `SysnoMap` for mapping syscall numbers to a type `T`.

## v0.6.8

 - aarch64: Removed bogus `arch_specific_syscall`.
 - x86: Fixed `int 0x80` syntax for non-LLVM rustc backends.
 - Added `SysnoSet::is_empty`.
 - Minor documentation fixes.

## v0.6.7

 - Fixed missing aarch64 syscalls

## v0.6.6

 - Added aarch64 support.

## v0.6.5

 - Renamed `with-serde` feature to just `serde`. The `with-serde` feature will
   be removed in the next major release.
 - Implemented `Serialize` and `Deserialize` for `SysnoSet`.

## v0.6.4

 - Implemented `Default`, `BitOr`, and `BitOrAssign` for `SysnoSet`.

## v0.6.3

 - Added features to expose the syscall tables of other architectures besides
   the target architecture. There is one feature per architecture and have the
   same name. For example, if the target architecture is `x86-64` and we also
   want the syscall table for `x86`, the `x86` feature can be enabled. Then,
   `syscalls::x86::Sysno` will be exposed.
 - Added the `all` feature, which enables the syscall tables for all
   architectures.
 - Added the `full` feature, which enables all current and future features for
   the crate.
 - Added man page links for all syscalls. Since these are generated, some links
   may be broken.

## v0.6.2

 - Added `SysnoSet` for constructing sets of syscalls. It uses a bitset under
   the hood and provides constant-time lookup and insertion of `Sysno`s.
 - Fixed `Sysno::len()` returning the wrong value for architectures with large
   syscall offsets.
 - Deprecated `Sysno::len()`. Use `Sysno::table_size()` instead. This will be
   removed in the next major version.

## v0.6.1

 - Exposed `syscalls::raw::*` to allow avoidance of the `Result` return type.
   This makes it cleaner to call syscalls like `gettid` that are guaranteed to
   never fail.

## v0.6.0

 - Removed `build.rs` and switched to Rust's inline assembly syntax. This should
   enable better codegen, including the ability to have syscalls get inlined.
 - **Breaking**: Architectures besides `arm`, `x86`, and `x86-64` now require
   nightly.
 - **Breaking**: Removed top-level `SYS_` constants. Just use the `Sysno` enum
   instead.

## v0.5.0

This is a major breaking change from v0.4.

 - Changed all syscalls to take and return `usize` instead of `i64` or `u64`.
   This fixes calling syscalls on 32-bit architectures.
 - Fixed syscall offsets for mips and mips64.
 - Added CI tests for more than just `x86_64`.

## v0.4.2

 - Made `ErrnoSentinel` public.

## v0.4.1

 - Added the ability to invoke syscalls for all architectures except `aarch64`,
   `sparc`, and `sparc64`.
 - Fixed std-dependent Errno trait impls not getting compiled.
 - Made `syscalls::arch::{x86, x86_64, ...}` private.

## v0.4.0

This is a major breaking change from v0.3. You can fix most compilation errors
by simply doing `s/SyscallNo::SYS_/Sysno::/g`.

 - Created this changelog.
 - Renamed `SyscallNo::SYS_*` to `Sysno::*`.
 - Added `Errno` for more Rustic error handling.
 - Changed the `syscalls-gen` script to grab Linux headers from GitHub.
 - Added more architecture support for the syscall table. Issuing syscalls is
   still limited to x86-64, however.
