• R
    move IPC_64 from public bits/ipc.h to syscall_arch.h · f56d57f8
    Rich Felker 提交于
    the definition of the IPC_64 macro controls the interface between libc
    and the kernel through syscalls; it's not a public API. the meaning is
    rather obscure. long ago, Linux's sysvipc *id_ds structures used
    16-bit uids/gids and wrong types for a few other fields. this was in
    the libc5 era, before glibc. the IPC_64 flag (64 is a misnomer; it's
    more like 32) tells the kernel to use the modern[-ish] versions of the
    structures.
    
    the definition of IPC_64 has nothing to do with whether the arch is
    32- or 64-bit. rather, due to either historical accident or
    intentional obnoxiousness, the kernel only accepts and masks off the
    0x100 IPC_64 flag conditional on CONFIG_ARCH_WANT_IPC_PARSE_VERSION,
    i.e. for archs that want to provide, or that accidentally provided,
    both. for archs which don't define this option, no masking is
    performed and commands with the 0x100 bit set will fail as invalid. so
    ultimately, the definition is just a matter of matching an arbitrary
    switch defined per-arch in the kernel.
    f56d57f8
syscall_arch.h 3.0 KB