rust-lang / rust-lang/libc

Tracking issue: Supporting 64-bit `time_t` on 32-bit platforms

Open
#5,507 11 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
2.6k
Forks
1.3k
Avg merge
1d 22h
Merged PRs (30d)
69

Description

Our 32-bit targets without target_os = "none" are:

aarch64-unknown-linux-gnu_ilp32          os: linux      env: gnu
aarch64_be-unknown-linux-gnu_ilp32       os: linux      env: gnu
arm-linux-androideabi                    os: android    env:
arm-unknown-linux-gnueabi                os: linux      env: gnu
arm-unknown-linux-gnueabihf              os: linux      env: gnu
arm-unknown-linux-musleabi               os: linux      env: musl
arm-unknown-linux-musleabihf             os: linux      env: musl
arm64_32-apple-watchos                   os: watchos    env:
armeb-unknown-linux-gnueabi              os: linux      env: gnu
armv4t-unknown-linux-gnueabi             os: linux      env: gnu
armv5te-unknown-linux-gnueabi            os: linux      env: gnu
armv5te-unknown-linux-musleabi           os: linux      env: musl
armv5te-unknown-linux-uclibceabi         os: linux      env: uclibc
armv6-unknown-freebsd                    os: freebsd    env:
armv6-unknown-netbsd-eabihf              os: netbsd     env:
armv6k-nintendo-3ds                      os: horizon    env: newlib
armv7-linux-androideabi                  os: android    env:
armv7-oe-linux-gnueabihf                 os: linux      env: gnu
armv7-rtems-eabihf                       os: rtems      env: newlib
armv7-sony-vita-newlibeabihf             os: vita       env: newlib
armv7-unknown-freebsd                    os: freebsd    env:
armv7-unknown-linux-gnueabi              os: linux      env: gnu
armv7-unknown-linux-gnueabihf            os: linux      env: gnu
armv7-unknown-linux-musleabi             os: linux      env: musl
armv7-unknown-linux-musleabihf           os: linux      env: musl
armv7-unknown-linux-ohos                 os: linux      env: ohos
armv7-unknown-linux-uclibceabi           os: linux      env: uclibc
armv7-unknown-linux-uclibceabihf         os: linux      env: uclibc
armv7-unknown-netbsd-eabihf              os: netbsd     env:
armv7-unknown-trusty                     os: trusty     env:
armv7-wrs-vxworks-eabihf                 os: vxworks    env: gnu
armv7a-kmc-solid_asp3-eabi               os: solid_asp3 env:
armv7a-kmc-solid_asp3-eabihf             os: solid_asp3 env:
armv7a-nuttx-eabi                        os: nuttx      env:
armv7a-nuttx-eabihf                      os: nuttx      env:
armv7k-apple-watchos                     os: watchos    env:
armv7s-apple-ios                         os: ios        env:
csky-unknown-linux-gnuabiv2              os: linux      env: gnu
csky-unknown-linux-gnuabiv2hf            os: linux      env: gnu
hexagon-unknown-linux-musl               os: linux      env: musl
hexagon-unknown-qurt                     os: qurt       env:
i386-apple-ios                           os: ios        env: sim
i586-unknown-linux-gnu                   os: linux      env: gnu
i586-unknown-linux-musl                  os: linux      env: musl
i586-unknown-netbsd                      os: netbsd     env:
i586-unknown-redox                       os: redox      env: relibc
i686-apple-darwin                        os: macos      env:
i686-linux-android                       os: android    env:
i686-oe-linux-gnu                        os: linux      env: gnu
i686-pc-nto-qnx700                       os: nto        env: nto70
i686-pc-windows-gnu                      os: windows    env: gnu
i686-pc-windows-gnullvm                  os: windows    env: gnu
i686-pc-windows-msvc                     os: windows    env: msvc
i686-unknown-freebsd                     os: freebsd    env:
i686-unknown-haiku                       os: haiku      env:
i686-unknown-helenos                     os: helenos    env:
i686-unknown-hurd-gnu                    os: hurd       env: gnu
i686-unknown-linux-gnu                   os: linux      env: gnu
i686-unknown-linux-musl                  os: linux      env: musl
i686-unknown-netbsd                      os: netbsd     env:
i686-unknown-openbsd                     os: openbsd    env:
i686-unknown-uefi                        os: uefi       env:
i686-uwp-windows-gnu                     os: windows    env: gnu
i686-uwp-windows-msvc                    os: windows    env: msvc
i686-win7-windows-gnu                    os: windows    env: gnu
i686-win7-windows-msvc                   os: windows    env: msvc
i686-wrs-vxworks                         os: vxworks    env: gnu
m68k-unknown-linux-gnu                   os: linux      env: gnu
mips-unknown-linux-gnu                   os: linux      env: gnu
mips-unknown-linux-musl                  os: linux      env: musl
mips-unknown-linux-uclibc                os: linux      env: uclibc
mipsel-sony-psp                          os: psp        env:
mipsel-sony-psx                          os: psx        env:
mipsel-unknown-linux-gnu                 os: linux      env: gnu
mipsel-unknown-linux-musl                os: linux      env: musl
mipsel-unknown-linux-uclibc              os: linux      env: uclibc
mipsel-unknown-netbsd                    os: netbsd     env:
mipsisa32r6-unknown-linux-gnu            os: linux      env: gnu
mipsisa32r6el-unknown-linux-gnu          os: linux      env: gnu
powerpc-unknown-freebsd                  os: freebsd    env:
powerpc-unknown-helenos                  os: helenos    env:
powerpc-unknown-linux-gnu                os: linux      env: gnu
powerpc-unknown-linux-gnuspe             os: linux      env: gnu
powerpc-unknown-linux-musl               os: linux      env: musl
powerpc-unknown-linux-muslspe            os: linux      env: musl
powerpc-unknown-netbsd                   os: netbsd     env:
powerpc-unknown-openbsd                  os: openbsd    env:
powerpc-wrs-vxworks                      os: vxworks    env: gnu
powerpc-wrs-vxworks-spe                  os: vxworks    env: gnu
riscv32-wrs-vxworks                      os: vxworks    env: gnu
riscv32gc-unknown-linux-gnu              os: linux      env: gnu
riscv32gc-unknown-linux-musl             os: linux      env: musl
riscv32im-risc0-zkvm-elf                 os: zkvm       env:
riscv32imac-esp-espidf                   os: espidf     env: newlib
riscv32imac-unknown-nuttx-elf            os: nuttx      env:
riscv32imac-unknown-xous-elf             os: xous       env:
riscv32imafc-esp-espidf                  os: espidf     env: newlib
riscv32imafc-unknown-nuttx-elf           os: nuttx      env:
riscv32imc-esp-espidf                    os: espidf     env: newlib
riscv32imc-unknown-nuttx-elf             os: nuttx      env:
sparc-unknown-linux-gnu                  os: linux      env: gnu
thumbv6m-nuttx-eabi                      os: nuttx      env:
thumbv7a-nuttx-eabi                      os: nuttx      env:
thumbv7a-nuttx-eabihf                    os: nuttx      env:
thumbv7a-pc-windows-msvc                 os: windows    env: msvc
thumbv7a-uwp-windows-msvc                os: windows    env: msvc
thumbv7a-vex-v5                          os: vexos      env: v5
thumbv7em-nuttx-eabi                     os: nuttx      env:
thumbv7em-nuttx-eabihf                   os: nuttx      env:
thumbv7m-nuttx-eabi                      os: nuttx      env:
thumbv7neon-linux-androideabi            os: android    env:
thumbv7neon-unknown-linux-gnueabihf      os: linux      env: gnu
thumbv7neon-unknown-linux-musleabihf     os: linux      env: musl
thumbv8m.base-nuttx-eabi                 os: nuttx      env:
thumbv8m.main-nuttx-eabi                 os: nuttx      env:
thumbv8m.main-nuttx-eabihf               os: nuttx      env:
wasm32-unknown-emscripten                os: emscripten env:
wasm32-unknown-unknown                   os: unknown    env:
wasm32-wali-linux-musl                   os: linux      env: musl
wasm32-wasip1                            os: wasi       env: p1
wasm32-wasip1-threads                    os: wasi       env: p1
wasm32-wasip2                            os: wasi       env: p2
wasm32-wasip3                            os: wasi       env: p3
x86_64-unknown-linux-gnux32              os: linux      env: gnu
xtensa-esp32-espidf                      os: espidf     env: newlib
xtensa-esp32s2-espidf                    os: espidf     env: newlib
xtensa-esp32s3-espidf                    os: espidf     env: newlib

(from $cmap | jq 'pick(.[].name, .[].target_env, .[].target_pointer_width, .[].target_os) | map(select(.target_pointer_width == "32")) | map(select(.target_os != "none")) | map(del(.target_pointer_width)) | .[] | .name + (" " * (40 - (.name | length))) + " os: " + .target_os + (" " * (10 - (.target_os | length))) + " env: " + .target_env ' -r)

We have:

  • Unstable support for linux glibc and windows-gnu
  • Unstable support for musl, which covers ohos
  • Unstable support for espidf
  • Unstable support for linux uclibc
  • Wasi is long long
  • Emscripten is always i64
  • NetBSD and OpenBSD always i64
  • HelenOS is long long
  • VxWorks is long long
  • Redox is long long
  • NuttX is always i64
  • solid is i64
  • I guess 3ds is i64
  • QNX NTO is i64
  • MSVC is i64
  • RTEMS is always i64
  • freebsd arm and ppc use i64
  • Vex doesn't use libc
  • UEFI doesn't use libc
  • xous doesn't use libc
  • risc0-zkvm doesn't use libc
  • PSP is no longer supported by libc but doesn't have a time_t
  • PSX doesn't use libc

That leaves, with some grouping:

# Tier 2

arm-linux-androideabi                    os: android    env:
armv7-linux-androideabi                  os: android    env:
i686-linux-android                       os: android    env:
thumbv7neon-linux-androideabi            os: android    env:

i686-unknown-freebsd                     os: freebsd    env:


# Tier 3

arm64_32-apple-watchos                   os: watchos    env:
armv7k-apple-watchos                     os: watchos    env:
armv7s-apple-ios                         os: ios        env:
i386-apple-ios                           os: ios        env: sim
i686-apple-darwin                        os: macos      env:

armv7-sony-vita-newlibeabihf             os: vita       env: 

armv7-unknown-trusty                     os: trusty     env:

hexagon-unknown-qurt                     os: qurt       

i686-unknown-haiku                       os: haiku      env:

i686-unknown-hurd-gnu                    os: hurd       env: 

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the target list and the existing unstable support categories in the issue, then compare the remaining Android, Apple, FreeBSD, Vita, Trusty, Qurt, Haiku, and Hurd targets with their platform time_t definitions. Determine the required support for each target and verify that all listed 32-bit platforms are correctly covered.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
operating-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.