From 1afe5f3e5b504992914362d6c1c0a0af55f3b32b Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 29 Jul 2019 18:03:41 -0400 Subject: extricate bits/sem.h from x32 time_t hack various padding fields in the generic bits/sem.h were defined in terms of time_t as a cheap hack standing in for "kernel long", to allow x32 to use the generic version of the file. this was a really bad idea, as it ended up getting copied into lots of arch-specific versions of the bits file, and is a blocker to changing time_t to 64-bit on 32-bit archs. this commit adds an x32-specific version of the header, and changes padding type back from time_t to long (currently the same type on all archs but x32) in the generic header and all the others the hack got copied into. --- arch/aarch64/bits/sem.h | 8 ++++---- arch/generic/bits/sem.h | 12 ++++++------ arch/mips/bits/sem.h | 8 ++++---- arch/mips64/bits/sem.h | 8 ++++---- arch/mipsn32/bits/sem.h | 8 ++++---- arch/riscv64/bits/sem.h | 6 +++--- arch/x32/bits/sem.h | 11 +++++++++++ 7 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 arch/x32/bits/sem.h (limited to 'arch') diff --git a/arch/aarch64/bits/sem.h b/arch/aarch64/bits/sem.h index e46ced95..5184eb59 100644 --- a/arch/aarch64/bits/sem.h +++ b/arch/aarch64/bits/sem.h @@ -4,11 +4,11 @@ struct semid_ds { time_t sem_ctime; #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; #else - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; unsigned short sem_nsems; #endif - time_t __unused3; - time_t __unused4; + long __unused3; + long __unused4; }; diff --git a/arch/generic/bits/sem.h b/arch/generic/bits/sem.h index c629b81e..d383d4ea 100644 --- a/arch/generic/bits/sem.h +++ b/arch/generic/bits/sem.h @@ -1,16 +1,16 @@ struct semid_ds { struct ipc_perm sem_perm; time_t sem_otime; - time_t __unused1; + long __unused1; time_t sem_ctime; - time_t __unused2; + long __unused2; #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; #else - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; unsigned short sem_nsems; #endif - time_t __unused3; - time_t __unused4; + long __unused3; + long __unused4; }; diff --git a/arch/mips/bits/sem.h b/arch/mips/bits/sem.h index e46ced95..5184eb59 100644 --- a/arch/mips/bits/sem.h +++ b/arch/mips/bits/sem.h @@ -4,11 +4,11 @@ struct semid_ds { time_t sem_ctime; #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; #else - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; unsigned short sem_nsems; #endif - time_t __unused3; - time_t __unused4; + long __unused3; + long __unused4; }; diff --git a/arch/mips64/bits/sem.h b/arch/mips64/bits/sem.h index e46ced95..5184eb59 100644 --- a/arch/mips64/bits/sem.h +++ b/arch/mips64/bits/sem.h @@ -4,11 +4,11 @@ struct semid_ds { time_t sem_ctime; #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; #else - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; unsigned short sem_nsems; #endif - time_t __unused3; - time_t __unused4; + long __unused3; + long __unused4; }; diff --git a/arch/mipsn32/bits/sem.h b/arch/mipsn32/bits/sem.h index e46ced95..5184eb59 100644 --- a/arch/mipsn32/bits/sem.h +++ b/arch/mipsn32/bits/sem.h @@ -4,11 +4,11 @@ struct semid_ds { time_t sem_ctime; #if __BYTE_ORDER == __LITTLE_ENDIAN unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; #else - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; unsigned short sem_nsems; #endif - time_t __unused3; - time_t __unused4; + long __unused3; + long __unused4; }; diff --git a/arch/riscv64/bits/sem.h b/arch/riscv64/bits/sem.h index 5f93c12d..7b434413 100644 --- a/arch/riscv64/bits/sem.h +++ b/arch/riscv64/bits/sem.h @@ -3,7 +3,7 @@ struct semid_ds { time_t sem_otime; time_t sem_ctime; unsigned short sem_nsems; - char __sem_nsems_pad[sizeof(time_t)-sizeof(short)]; - time_t __unused3; - time_t __unused4; + char __sem_nsems_pad[sizeof(long)-sizeof(short)]; + long __unused3; + long __unused4; }; diff --git a/arch/x32/bits/sem.h b/arch/x32/bits/sem.h new file mode 100644 index 00000000..18745f4c --- /dev/null +++ b/arch/x32/bits/sem.h @@ -0,0 +1,11 @@ +struct semid_ds { + struct ipc_perm sem_perm; + time_t sem_otime; + long long __unused1; + time_t sem_ctime; + long long __unused2; + unsigned short sem_nsems; + char __sem_nsems_pad[sizeof(long long)-sizeof(short)]; + long long __unused3; + long long __unused4; +}; -- cgit v1.2.1