47a57144af
Summary: BITSET uses long as its basic underlying type, which is dependent on the compile type, meaning on 32-bit builds the basic type is 32 bits, but on 64-bit builds it's 64 bits. On little endian architectures this doesn't matter, because the LSB is always at the low bit, so the words get effectively concatenated moving between 32-bit and 64-bit, but on big-endian architectures it throws a wrench in, as setting bit 0 in 32-bit mode is equivalent to setting bit 32 in 64-bit mode. To demonstrate: 32-bit mode: BIT_SET(foo, 0): 0x00000001 64-bit sees: 0x0000000100000000 cpuset is the only system interface that uses bitsets, so solve this by swapping the integer sub-components at the copyin/copyout points. Reviewed by: kib MFC after: 3 days Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D35225 |
||
---|---|---|
.. | ||
freebsd32_abort2.c | ||
freebsd32_capability.c | ||
freebsd32_ioctl.c | ||
freebsd32_ioctl.h | ||
freebsd32_ipc.h | ||
freebsd32_misc.c | ||
freebsd32_misc.h | ||
freebsd32_proto.h | ||
freebsd32_signal.h | ||
freebsd32_syscall.h | ||
freebsd32_syscalls.c | ||
freebsd32_sysent.c | ||
freebsd32_systrace_args.c | ||
freebsd32_util.h | ||
freebsd32.h | ||
Makefile | ||
syscalls.conf |