Skip to content

Implement thread signal support#524

Merged
jstarks merged 12 commits intomicrosoft:mainfrom
jstarks:signals3
Dec 1, 2025
Merged

Implement thread signal support#524
jstarks merged 12 commits intomicrosoft:mainfrom
jstarks:signals3

Conversation

@jstarks
Copy link
Member

@jstarks jstarks commented Nov 25, 2025

Add a first layer of support for Linux signal handling. This includes support for:

  • Signal delivery
  • Signal handler configuration (rt_sigaction)
  • Signal masks (rt_sigprocmask)
  • Alternate signal stacks (sigaltstack)
  • Returning from a signal handler (rt_sigreturn)
  • Sending signals to self (tkill, tgkill)
  • Delivering signals on hardware exceptions

Known to be missing:

  • Cross-thread signaling
  • Process-wide signals
  • FPU/xsave state in signal contexts
  • SIGALRM support (alarm, setitimer)
  • Misc. signal syscalls (e.g., rt_sigtimedwait, rt_sigpending)
  • SIGSTOP support

@jstarks
Copy link
Member Author

jstarks commented Nov 25, 2025

@CvvT, how important is the alarm/setitimer functionality that this removes? Do we need to add that back before this can be merged?

@jstarks jstarks marked this pull request as ready for review November 26, 2025 00:11
@wdcui wdcui requested review from CvvT and wdcui November 26, 2025 01:06
@CvvT
Copy link
Contributor

CvvT commented Nov 26, 2025

@CvvT, how important is the alarm/setitimer functionality that this removes? Do we need to add that back before this can be merged?

Not necessary. They are only needed for running UnixBench, which I haven’t upstreamed yet. It’s fine to remove them.

Add support for Linux signal handling. This includes support for:
* Signal delivery
* Signal handler configuration (`rt_sigaction`)
* Signal masks (`rt_sigprocmask`)
* Alternate signal stacks (`sigaltstack`)
* Returning from a signal handler (`rt_sigreturn`)
* Sending signals to self (`tkill`, `tgkill`)
* Delivering signals on hardware exceptions

Known to be missing:
* Cross-thread signaling
* Process-wide signals
* FPU/xsave state in signal contexts
* SIGALRM support (`alarm`, `setitimer`)
Copy link
Member

@wdcui wdcui left a comment

Choose a reason for hiding this comment

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

Thank you for this substantial change, John. I left some comments. I also requested @CvvT to review this PR.

Copy link
Contributor

@CvvT CvvT left a comment

Choose a reason for hiding this comment

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

LGTM! Thanks!

@github-actions
Copy link

github-actions bot commented Dec 1, 2025

🤖 SemverChecks 🤖 ⚠️ Potential breaking API changes detected ⚠️

Click for details
--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_missing.ron

Failed in:
  enum litebox_common_linux::Signal, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:870
  enum litebox_common_linux::SigmaskHow, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:959

--- failure enum_no_repr_variant_discriminant_changed: enum variant had its discriminant change value ---

Description:
The enum's variant had its discriminant value change. This breaks downstream code that used its value via a numeric cast like `as isize`.
        ref: https://doc.rust-lang.org/reference/items/enumerations.html#assigning-discriminant-values
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_no_repr_variant_discriminant_changed.ron

Failed in:
  variant SyscallRequest::Ioctl 18 -> 22 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1844
  variant SyscallRequest::Pread64 19 -> 23 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1848
  variant SyscallRequest::Pwrite64 20 -> 24 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1854
  variant SyscallRequest::Readv 21 -> 25 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1860
  variant SyscallRequest::Writev 22 -> 26 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1865
  variant SyscallRequest::Access 23 -> 27 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1870
  variant SyscallRequest::Madvise 24 -> 28 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1874
  variant SyscallRequest::Dup 25 -> 29 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1879
  variant SyscallRequest::Socket 26 -> 30 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1884
  variant SyscallRequest::Connect 27 -> 31 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1894
  variant SyscallRequest::Accept 28 -> 32 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1899
  variant SyscallRequest::Sendto 29 -> 33 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1905
  variant SyscallRequest::Sendmsg 30 -> 34 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1913
  variant SyscallRequest::Recvfrom 31 -> 35 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1918
  variant SyscallRequest::Bind 32 -> 36 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1926
  variant SyscallRequest::Listen 33 -> 37 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1931
  variant SyscallRequest::Setsockopt 34 -> 38 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1935
  variant SyscallRequest::Getsockopt 35 -> 39 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1941
  variant SyscallRequest::Getsockname 36 -> 40 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1947
  variant SyscallRequest::Getpeername 37 -> 41 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1952
  variant SyscallRequest::Uname 38 -> 42 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1957
  variant SyscallRequest::Fcntl 39 -> 43 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1960
  variant SyscallRequest::Getcwd 40 -> 44 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1964
  variant SyscallRequest::EpollCtl 41 -> 45 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1968
  variant SyscallRequest::EpollPwait 42 -> 46 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1974
  variant SyscallRequest::EpollCreate 43 -> 47 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1982
  variant SyscallRequest::Ppoll 44 -> 48 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1985
  variant SyscallRequest::Pselect 45 -> 49 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:1992
  variant SyscallRequest::ArchPrctl 46 -> 50 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2000
  variant SyscallRequest::Readlink 47 -> 51 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2003
  variant SyscallRequest::Readlinkat 48 -> 52 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2008
  variant SyscallRequest::Openat 49 -> 53 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2014
  variant SyscallRequest::Ftruncate 50 -> 54 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2020
  variant SyscallRequest::Unlinkat 51 -> 55 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2024
  variant SyscallRequest::Newfstatat 52 -> 56 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2030
  variant SyscallRequest::Eventfd2 53 -> 57 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2043
  variant SyscallRequest::Pipe2 54 -> 58 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2047
  variant SyscallRequest::Clone 55 -> 59 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2051
  variant SyscallRequest::Clone3 56 -> 60 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2054
  variant SyscallRequest::SetThreadArea 57 -> 61 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2059
  variant SyscallRequest::ClockGettime 58 -> 62 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2062
  variant SyscallRequest::ClockGetres 59 -> 63 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2066
  variant SyscallRequest::ClockNanosleep 60 -> 64 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2070
  variant SyscallRequest::Gettimeofday 61 -> 65 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2076
  variant SyscallRequest::Time 62 -> 66 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2080
  variant SyscallRequest::Getrlimit 63 -> 67 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2083
  variant SyscallRequest::Setrlimit 64 -> 68 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2087
  variant SyscallRequest::Prlimit 65 -> 69 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2091
  variant SyscallRequest::SetTidAddress 66 -> 70 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2102
  variant SyscallRequest::Gettid 67 -> 71 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2105
  variant SyscallRequest::SetRobustList 68 -> 72 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2106
  variant SyscallRequest::GetRobustList 69 -> 73 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2109
  variant SyscallRequest::GetRandom 70 -> 74 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2114
  variant SyscallRequest::Getpid 71 -> 75 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2119
  variant SyscallRequest::Getppid 72 -> 76 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2120
  variant SyscallRequest::Getuid 73 -> 77 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2121
  variant SyscallRequest::Geteuid 74 -> 78 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2122
  variant SyscallRequest::Getgid 75 -> 79 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2123
  variant SyscallRequest::Getegid 76 -> 80 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2124
  variant SyscallRequest::Sysinfo 77 -> 81 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2125
  variant SyscallRequest::CapGet 78 -> 82 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2128
  variant SyscallRequest::GetDirent64 79 -> 83 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2132
  variant SyscallRequest::SchedGetAffinity 80 -> 84 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2137
  variant SyscallRequest::SchedYield 81 -> 85 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2142
  variant SyscallRequest::Futex 82 -> 86 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2143
  variant SyscallRequest::Execve 83 -> 87 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2146
  variant SyscallRequest::Umask 84 -> 88 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2151
  variant SyscallRequest::Prctl 85 -> 89 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2154
  variant SyscallRequest::Alarm 86 -> 90 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2157
  variant SyscallRequest::SetITimer 88 -> 91 in /home/runner/work/litebox/litebox/litebox_common_linux/src/lib.rs:2160

--- failure enum_variant_missing: pub enum variant removed or renamed ---

Description:
A publicly-visible enum has at least one variant that is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/enum_variant_missing.ron

Failed in:
  variant SyscallRequest::ThreadKill, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2236
  variant PunchthroughSyscall::RtSigprocmask, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2925
  variant PunchthroughSyscall::RtSigaction, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2943
  variant PunchthroughSyscall::RtSigreturn, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2952
  variant PunchthroughSyscall::Alarm, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2959
  variant PunchthroughSyscall::ThreadKill, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2961
  variant PunchthroughSyscall::SetITimer, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:2966

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/struct_missing.ron

Failed in:
  struct litebox_common_linux::SigSet, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:914
  struct litebox_common_linux::SaFlags, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:934
  struct litebox_common_linux::SigAction, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_common_linux/src/lib.rs:950

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_missing.ron

Failed in:
  method rt_sigprocmask of trait HostInterface, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_platform_linux_kernel/src/lib.rs:368

--- failure trait_method_missing: pub trait method removed or renamed ---

Description:
A trait method is no longer callable, and may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#major-any-change-to-trait-item-signatures
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.45.0/src/lints/trait_method_missing.ron

Failed in:
  method rt_sigprocmask of trait HostInterface, previously in file /home/runner/work/litebox/litebox/target/semver-checks/git-main/6ae9741a9c8ee766ae681e5369a29bb06040e3f5/litebox_platform_lvbs/src/lib.rs:614

@jstarks jstarks enabled auto-merge December 1, 2025 20:18
@jstarks jstarks added this pull request to the merge queue Dec 1, 2025
Merged via the queue into microsoft:main with commit 43cdf82 Dec 1, 2025
8 checks passed
@jstarks jstarks deleted the signals3 branch December 1, 2025 20:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants