Skip to content

arch/sim: Translate Apple clock IDs for macOS sim#18978

Draft
toku-mac wants to merge 1 commit into
apache:masterfrom
toku-mac:translate_apple_clock_id
Draft

arch/sim: Translate Apple clock IDs for macOS sim#18978
toku-mac wants to merge 1 commit into
apache:masterfrom
toku-mac:translate_apple_clock_id

Conversation

@toku-mac
Copy link
Copy Markdown
Contributor

Summary

This PR fixes clock_gettime() compatibility for Rust on the macOS simulator.

On macOS sim, that Darwin clock ID can reach NuttX clock_gettime(), where it is outside the NuttX clockid_t namespace and fails with EINVAL. This causes Tokio-based Rust code to panic.

The fix keeps the common clock implementation using NuttX clock IDs, and adds a small optional architecture hook for translating clock IDs at the public clock_gettime() boundary.

Impact

Running hello_rust_cargo with nsh on macOS should no longer cause a panic.

Testing

I confirm that changes are verified on local setup and works as intended:

  • Build Host(s): OS (macOS 26.5), CPU(Apple M1), compiler(Apple clang version 21.0.0)
  • Target(s): arch(sim)
  • Ensure your PATH environment variable is properly configured to allow execution of: menuconfig, olddefconfig, savedefconfig, and setconfig.
  • Use the Rust toolchain version prior to nightly-2026-04-29 to avoid errors related to lib/rustlib/src/rust/library/std/src/sys/net/connection/socket/unix.rs.
  • This PR is a successor of PR arch/sim: Handle Darwin clock IDs in clock_gettime() #18962.

Configuration and Build:

rm -rf build-debug
make distclean
cmake -S . -B build-debug -DBOARD_CONFIG=sim:nsh -GNinja

printf "CONFIG_SYSTEM_TIME64=y
CONFIG_FS_LARGEFILE=y
CONFIG_TLS_NELEM=16
CONFIG_DEV_URANDOM=y
CONFIG_EXAMPLES_HELLO_RUST_CARGO=y
CONFIG_EXAMPLES_HELLO_RUST_CARGO_STACKSIZE=8192
" >> build-debug/.config

cmake --build build-debug -t olddefconfig
cmake --build build-debug

Testing logs before change:

NuttShell (NSH) NuttX-12.13.0
nsh> hello_rust_cargo
{"name":"John","age":30}
{"name":"Jane","age":25}
Deserialized: Alice is 28 years old
Pretty JSON:
{
  "name": "Alice",
  "age": 28
}

thread '<unnamed>' (1797510) panicked at /Users/toku/.rustup/toolchains/nightly-2026-04-29-aarch64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys/pal/unix/time.rs:107:68:
called `Result::unwrap()` on an `Err` value: Os { code: 0, kind: Uncategorized, message: "Unknown error 0" }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Testing logs after change:

NuttShell (NSH) NuttX-12.13.0
nsh> hello_rust_cargo
{"name":"John","age":30}
{"name":"Jane","age":25}
Deserialized: Alice is 28 years old
Pretty JSON:
{
  "name": "Alice",
  "age": 28
}
Hello world from tokio!

PR verification Self-Check

  • My PR adheres to Contributing Guidelines and Documentation (git commit title and message, coding standard, etc).
  • My PR is ready for review and can be safely merged into a codebase.

On the macOS simulator, that Darwin clock ID can reach NuttX
clock_gettime(), where it is outside the NuttX clockid_t namespace
and causes EINVAL.

Add an optional architecture hook to translate clock IDs at
clock_gettime() boundary. Use it for macOS sim to translate
non-conflicting Apple monotonic clock IDs to NuttX
CLOCK_MONOTONIC.

Signed-off-by: Shoji Tokunaga <toku@mac.com>
@github-actions github-actions Bot added Arch: simulator Issues related to the SIMulator Area: OS Components OS Components issues Size: S The size of the change in this PR is small labels May 27, 2026
int ret;

#ifdef CONFIG_ARCH_HAVE_CLOCKID_TRANSLATE
clock_id = up_translate_clockid(clock_id);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but, why rust tokio pass the macOS(not NuttX) clock id?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. I'll look into the implementation flow of tokio::time, std::time, and clock_gettime().

@toku-mac toku-mac marked this pull request as draft May 27, 2026 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Arch: simulator Issues related to the SIMulator Area: OS Components OS Components issues Size: S The size of the change in this PR is small

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants