In the Overview of cross-architecture portability problems, I have dedicated a section to the problems resulting from use of 32-bit time_t type. This design decision, still affecting Gentoo systems…
Your argument is to have 2 subtly incompatible abis and one day binaries magically break.
You’re right it breaks c stdlib, but that’s literally the point, libc is broken by design, this is the fix.
No program with time32_t will ever work after 2038, so any compiled that way are broken from compilation.
You’re right that the length isn’t specified though, the issue is changing types for triplets silently has unfortunate side effects.
If you really want to be clever, mangle the symbols for the functions that handle time so they encode time64 as appropriate, but doing it silently is begging for trouble.
Your argument is to have 2 subtly incompatible abis and one day binaries magically break.
Whereas your argument seems to be to have a special C variant for 32bit Linux - there’s no reason to have a special time64_t anywhere else.
No program with time32_t will ever work after 2038, so any compiled that way are broken from compilation.
Yeah, so what will breaking the ABI do? Break it a bit more?
If you really want to be clever, mangle the symbols for the functions that handle time so they encode time64 as appropriate
That’s what MUSL libc does, and the result is two subtly incompatible ABIs - statically linked programs are fine, but if a dynamically linked library exports any function with time_t parameter or return value, it will use whatever size was configured at build time and it becomes a part of its ABI. So fixing this properly would require every library that wants to pass time_t values in its API to implement its own name mangling. That’s not a reasonable request for a barely used platform (remember, this is just 32bit userland, 64bit was always unaffected).
Your argument is to have 2 subtly incompatible abis and one day binaries magically break.
You’re right it breaks c stdlib, but that’s literally the point, libc is broken by design, this is the fix.
No program with time32_t will ever work after 2038, so any compiled that way are broken from compilation.
You’re right that the length isn’t specified though, the issue is changing types for triplets silently has unfortunate side effects.
If you really want to be clever, mangle the symbols for the functions that handle time so they encode time64 as appropriate, but doing it silently is begging for trouble.
Whereas your argument seems to be to have a special C variant for 32bit Linux - there’s no reason to have a special time64_t anywhere else.
Yeah, so what will breaking the ABI do? Break it a bit more?
That’s what MUSL libc does, and the result is two subtly incompatible ABIs - statically linked programs are fine, but if a dynamically linked library exports any function with time_t parameter or return value, it will use whatever size was configured at build time and it becomes a part of its ABI. So fixing this properly would require every library that wants to pass time_t values in its API to implement its own name mangling. That’s not a reasonable request for a barely used platform (remember, this is just 32bit userland, 64bit was always unaffected).