Use libc specific type for architecture specific ioctl defines on Linux.
This PR should fix the type change of some ioctl constants on Linux introduced by #2530.
It does this by adding a `#[doc(hidden)]` type called `Ioctl`, which is defined in libc specific modules and used in arch specific modules.
However, when doing this I noticed that when I added `TCGETS2`, `TCSETS2`, ... in #2508, I unconditionally used `c_ulong`. This is inconsistent with the other ioctl constants for `musl` and `uclibc`. This PR also changes those to use the libc specific types. However, PR #2508 has already been released in 0.2.107, so technically that is also a semver incompatible change. The impact is limited to new constants introduced in the last release, and only on `musl` and `uclibc` targets.
So what is more important here? Consistency in the type of ioctl constants, or being very strict with backwards compatibility? If it is the latter, I'll revert `TCGETS2` etc to `c_ulong` for this PR.
Add TCGETS2 and TCSETS2 (and variants) ioctl constants for Linux.
I noticed that the `termios2` struct is already exposed, but the ioctl constants to use it are not. This PR adds the `TCGETS2`, `TCSETS2`, `TCSETSW2` and `TCSETSF2` on Linux so that you can actually do something with the `termios2` struct.
The `powerpc` architecture is notably missing, because it does not seem to support the `TCGETS2`/`TCSETS2` ioctls.
I *think* the constants are correct for all platforms, but I'm also not 100% sure. Do the unit tests verify the values for all supported platforms, by any chance?
The UAPI version of sched.h contains the newest flags that may not have
been added to the libc's sched.h yet (for example CLONE_PIDFD). It was
alreaded included by test_android(), but was missing from test_linux().
Add fexecve() to DragonFly
DragonFly 6.0 added support for `fexecve(2)`.
Implementing it with a mismatched signature from what C exposes, as outlined in #1272, for consistency with other platforms.
Tested with https://github.com/nix-rust/nix/pull/1577