mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-04 10:50:07 +00:00
3283f71113
To provide a y2038 safe interface a new symbol __msgctl64 is added and __msgctl is change to call it instead (it adds some extra buffer coping for the 32 bit time_t implementation). Two new structures are added: 1. kernel_msqid64_ds: used internally only on 32-bit architectures to issue the syscall. A handful of architectures (hppa, i386, mips, powerpc32, and sparc32) require specific implementations due to their kernel ABI. 2. msqid_ds64: this is only for __TIMESIZE != 64 to use along with the 64-bit msgctl. It is different than the kernel struct because the exported 64-bit time_t might require different alignment depending on the architecture ABI. So the resulting implementation does: 1. For 64-bit architectures it assumes msqid_ds already contains 64-bit time_t fields and will result in just the __msgctl symbol using the __msgctl64 code. The msgid_ds argument is passed as-is to the syscall. 2. For 32-bit architectures with default 64-bit time_t (newer ABIs such riscv32 or arc), it will also result in only one exported symbol but with the required high/low time handling. 3. Finally for 32-bit architecture with both 32-bit and 64-bit time_t support we follow the already set way to provide one symbol with 64-bit time_t support and implement the 32-bit time_t support using the 64-bit time_t. The default 32-bit symbol will allocate and copy the msqid_ds over multiple buffers, but this should be deprecated in favor of the __msgctl64 anyway. Checked on i686-linux-gnu and x86_64-linux-gnu. I also did some sniff tests on powerpc, powerpc64, mips, mips64, armhf, sparcv9, and sparc64. Tested-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Tested-by: Alistair Francis <alistair.francis@wdc.com> |
||
---|---|---|
.. | ||
bits | ||
fpu | ||
sparcv9/fpu | ||
____longjmp_chk.S | ||
alphasort64.c | ||
arch-syscall.h | ||
brk.c | ||
c++-types.data | ||
clone.S | ||
fxstat.c | ||
fxstatat.c | ||
getcontext.S | ||
Implies | ||
jmp_buf-macros.h | ||
kernel_stat.h | ||
ld.abilist | ||
libanl.abilist | ||
libBrokenLocale.abilist | ||
libc.abilist | ||
libcrypt.abilist | ||
libdl.abilist | ||
libm.abilist | ||
libnsl.abilist | ||
libpthread.abilist | ||
libresolv.abilist | ||
librt.abilist | ||
libthread_db.abilist | ||
libutil.abilist | ||
localplt.data | ||
lxstat.c | ||
makecontext.c | ||
Makefile | ||
nldbl-abi.h | ||
pipe.S | ||
register-dump.h | ||
setcontext.S | ||
shlib-versions | ||
sigaction.c | ||
sigcontextinfo.h | ||
sigreturn_stub.S | ||
struct_kernel_msqid64_ds.h | ||
struct_kernel_semid64_ds.h | ||
swapcontext.S | ||
syscall.S | ||
syscalls.list | ||
sysdep.h | ||
ucontext_i.sym | ||
Versions | ||
versionsort64.c | ||
vfork.S | ||
xstat.c |