[libc-commits] [libc] [libc][darwin] add internal::exit (PR #166357)
Shreeyash Pandey via libc-commits
libc-commits at lists.llvm.org
Tue Nov 4 22:33:59 PST 2025
https://github.com/bojle updated https://github.com/llvm/llvm-project/pull/166357
>From ab85f49f93c777b94648b5c5bf721753950b4308 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Sun, 2 Nov 2025 16:38:36 +0530
Subject: [PATCH 1/7] [libc] allow UnitTest suite to be compiled on darwin
ExecuteFunctionUnix.cpp which is guarded by this check should reliably work
on darwin as it only uses POSIX API - nothing specific to linux.
---
libc/test/UnitTest/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libc/test/UnitTest/CMakeLists.txt b/libc/test/UnitTest/CMakeLists.txt
index 31d1e9dce8204..028e8e3a2ea67 100644
--- a/libc/test/UnitTest/CMakeLists.txt
+++ b/libc/test/UnitTest/CMakeLists.txt
@@ -83,7 +83,7 @@ add_unittest_framework_library(
)
set(libc_death_test_srcs LibcDeathTestExecutors.cpp)
-if(${LIBC_TARGET_OS} STREQUAL "linux")
+if(${LIBC_TARGET_OS} STREQUAL "linux" OR ${LIBC_TARGET_OS} STREQUAL "darwin")
list(APPEND libc_death_test_srcs ExecuteFunctionUnix.cpp)
endif()
>From 9a5455df48b18bd31f425353841f41f54d99ef4a Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Sun, 2 Nov 2025 17:21:01 +0530
Subject: [PATCH 2/7] [libc] fix EXPECT_EXIT suspend/timeout for darwin
Fixes: https://github.com/llvm/llvm-project/issues/166059
Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
libc/test/UnitTest/ExecuteFunctionUnix.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libc/test/UnitTest/ExecuteFunctionUnix.cpp b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
index c0e85c2144005..0b450578adde2 100644
--- a/libc/test/UnitTest/ExecuteFunctionUnix.cpp
+++ b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
@@ -13,6 +13,7 @@
#include <poll.h>
#include <signal.h>
#include <stdio.h>
+#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
@@ -58,7 +59,7 @@ ProcessStatus invoke_in_subprocess(FunctionCaller *func, int timeout_ms) {
::close(pipe_fds[1]);
struct pollfd poll_fd {
- pipe_fds[0], 0, 0
+ pipe_fds[0], POLLIN, 0
};
// No events requested so this call will only return after the timeout or if
// the pipes peer was closed, signaling the process exited.
>From 34f4b8b04f29d57bfc3aced106302ab91a4a1bff Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Sun, 2 Nov 2025 18:50:43 +0530
Subject: [PATCH 3/7] [libc] fix formatting
---
libc/test/UnitTest/ExecuteFunctionUnix.cpp | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/libc/test/UnitTest/ExecuteFunctionUnix.cpp b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
index 0b450578adde2..7c2eb7c6e887c 100644
--- a/libc/test/UnitTest/ExecuteFunctionUnix.cpp
+++ b/libc/test/UnitTest/ExecuteFunctionUnix.cpp
@@ -13,7 +13,6 @@
#include <poll.h>
#include <signal.h>
#include <stdio.h>
-#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
@@ -58,9 +57,7 @@ ProcessStatus invoke_in_subprocess(FunctionCaller *func, int timeout_ms) {
}
::close(pipe_fds[1]);
- struct pollfd poll_fd {
- pipe_fds[0], POLLIN, 0
- };
+ struct pollfd poll_fd{pipe_fds[0], POLLIN, 0};
// No events requested so this call will only return after the timeout or if
// the pipes peer was closed, signaling the process exited.
if (::poll(&poll_fd, 1, timeout_ms) == -1) {
>From 3d60307c8cfd96fb5572abbf59b309008fb0fc1e Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Tue, 4 Nov 2025 16:52:04 +0530
Subject: [PATCH 4/7] [libc][darwin] add syscall numbers from macos sdk
Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
.../__support/OSUtil/darwin/aarch64/syscall.h | 561 ++++++++++++++++++
1 file changed, 561 insertions(+)
diff --git a/libc/src/__support/OSUtil/darwin/aarch64/syscall.h b/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
index dc98c07a8ba33..6cbbd11a79ae3 100644
--- a/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
+++ b/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
@@ -110,4 +110,565 @@ LIBC_INLINE long syscall_impl(long number, long arg1, long arg2, long arg3,
#undef REGISTER_CONSTRAINT_5
#undef REGISTER_CONSTRAINT_6
+#define SYS_syscall 0
+#define SYS_exit 1
+#define SYS_fork 2
+#define SYS_read 3
+#define SYS_write 4
+#define SYS_open 5
+#define SYS_close 6
+#define SYS_wait4 7
+/* 8 old creat */
+#define SYS_link 9
+#define SYS_unlink 10
+/* 11 old execv */
+#define SYS_chdir 12
+#define SYS_fchdir 13
+#define SYS_mknod 14
+#define SYS_chmod 15
+#define SYS_chown 16
+/* 17 old break */
+#define SYS_getfsstat 18
+/* 19 old lseek */
+#define SYS_getpid 20
+/* 21 old mount */
+/* 22 old umount */
+#define SYS_setuid 23
+#define SYS_getuid 24
+#define SYS_geteuid 25
+#define SYS_ptrace 26
+#define SYS_recvmsg 27
+#define SYS_sendmsg 28
+#define SYS_recvfrom 29
+#define SYS_accept 30
+#define SYS_getpeername 31
+#define SYS_getsockname 32
+#define SYS_access 33
+#define SYS_chflags 34
+#define SYS_fchflags 35
+#define SYS_sync 36
+#define SYS_kill 37
+#define SYS_crossarch_trap 38
+#define SYS_getppid 39
+/* 40 old lstat */
+#define SYS_dup 41
+#define SYS_pipe 42
+#define SYS_getegid 43
+/* 44 old profil */
+/* 45 old ktrace */
+#define SYS_sigaction 46
+#define SYS_getgid 47
+#define SYS_sigprocmask 48
+#define SYS_getlogin 49
+#define SYS_setlogin 50
+#define SYS_acct 51
+#define SYS_sigpending 52
+#define SYS_sigaltstack 53
+#define SYS_ioctl 54
+#define SYS_reboot 55
+#define SYS_revoke 56
+#define SYS_symlink 57
+#define SYS_readlink 58
+#define SYS_execve 59
+#define SYS_umask 60
+#define SYS_chroot 61
+/* 62 old fstat */
+/* 63 used internally and reserved */
+/* 64 old getpagesize */
+#define SYS_msync 65
+#define SYS_vfork 66
+#define SYS_oslog_coproc_reg 67
+#define SYS_oslog_coproc 68
+/* 69 old sbrk */
+/* 70 old sstk */
+/* 71 old mmap */
+/* 72 old vadvise */
+#define SYS_munmap 73
+#define SYS_mprotect 74
+#define SYS_madvise 75
+/* 76 old vhangup */
+/* 77 old vlimit */
+#define SYS_mincore 78
+#define SYS_getgroups 79
+#define SYS_setgroups 80
+#define SYS_getpgrp 81
+#define SYS_setpgid 82
+#define SYS_setitimer 83
+/* 84 old wait */
+#define SYS_swapon 85
+#define SYS_getitimer 86
+/* 87 old gethostname */
+/* 88 old sethostname */
+#define SYS_getdtablesize 89
+#define SYS_dup2 90
+/* 91 old getdopt */
+#define SYS_fcntl 92
+#define SYS_select 93
+/* 94 old setdopt */
+#define SYS_fsync 95
+#define SYS_setpriority 96
+#define SYS_socket 97
+#define SYS_connect 98
+/* 99 old accept */
+#define SYS_getpriority 100
+/* 101 old send */
+/* 102 old recv */
+/* 103 old sigreturn */
+#define SYS_bind 104
+#define SYS_setsockopt 105
+#define SYS_listen 106
+/* 107 old vtimes */
+/* 108 old sigvec */
+/* 109 old sigblock */
+/* 110 old sigsetmask */
+#define SYS_sigsuspend 111
+/* 112 old sigstack */
+/* 113 old recvmsg */
+/* 114 old sendmsg */
+/* 115 old vtrace */
+#define SYS_gettimeofday 116
+#define SYS_getrusage 117
+#define SYS_getsockopt 118
+/* 119 old resuba */
+#define SYS_readv 120
+#define SYS_writev 121
+#define SYS_settimeofday 122
+#define SYS_fchown 123
+#define SYS_fchmod 124
+/* 125 old recvfrom */
+#define SYS_setreuid 126
+#define SYS_setregid 127
+#define SYS_rename 128
+/* 129 old truncate */
+/* 130 old ftruncate */
+#define SYS_flock 131
+#define SYS_mkfifo 132
+#define SYS_sendto 133
+#define SYS_shutdown 134
+#define SYS_socketpair 135
+#define SYS_mkdir 136
+#define SYS_rmdir 137
+#define SYS_utimes 138
+#define SYS_futimes 139
+#define SYS_adjtime 140
+/* 141 old getpeername */
+#define SYS_gethostuuid 142
+/* 143 old sethostid */
+/* 144 old getrlimit */
+/* 145 old setrlimit */
+/* 146 old killpg */
+#define SYS_setsid 147
+/* 148 old setquota */
+/* 149 old qquota */
+/* 150 old getsockname */
+#define SYS_getpgid 151
+#define SYS_setprivexec 152
+#define SYS_pread 153
+#define SYS_pwrite 154
+#define SYS_nfssvc 155
+/* 156 old getdirentries */
+#define SYS_statfs 157
+#define SYS_fstatfs 158
+#define SYS_unmount 159
+/* 160 old async_daemon */
+#define SYS_getfh 161
+/* 162 old getdomainname */
+/* 163 old setdomainname */
+/* 164 */
+#define SYS_quotactl 165
+/* 166 old exportfs */
+#define SYS_mount 167
+/* 168 old ustat */
+#define SYS_csops 169
+#define SYS_csops_audittoken 170
+/* 171 old wait3 */
+/* 172 old rpause */
+#define SYS_waitid 173
+/* 174 old getdents */
+/* 175 old gc_control */
+/* 176 old add_profil */
+#define SYS_kdebug_typefilter 177
+#define SYS_kdebug_trace_string 178
+#define SYS_kdebug_trace64 179
+#define SYS_kdebug_trace 180
+#define SYS_setgid 181
+#define SYS_setegid 182
+#define SYS_seteuid 183
+#define SYS_sigreturn 184
+#define SYS_panic_with_data 185
+#define SYS_thread_selfcounts 186
+#define SYS_fdatasync 187
+#define SYS_stat 188
+#define SYS_fstat 189
+#define SYS_lstat 190
+#define SYS_pathconf 191
+#define SYS_fpathconf 192
+/* 193 old getfsstat */
+#define SYS_getrlimit 194
+#define SYS_setrlimit 195
+#define SYS_getdirentries 196
+#define SYS_mmap 197
+/* 198 old __syscall */
+#define SYS_lseek 199
+#define SYS_truncate 200
+#define SYS_ftruncate 201
+#define SYS_sysctl 202
+#define SYS_mlock 203
+#define SYS_munlock 204
+#define SYS_undelete 205
+/* 206 old ATsocket */
+/* 207 old ATgetmsg */
+/* 208 old ATputmsg */
+/* 209 old ATsndreq */
+/* 210 old ATsndrsp */
+/* 211 old ATgetreq */
+/* 212 old ATgetrsp */
+/* 213 Reserved for AppleTalk */
+/* 214 */
+/* 215 */
+#define SYS_open_dprotected_np 216
+#define SYS_fsgetpath_ext 217
+#define SYS_openat_dprotected_np 218
+/* 219 old fstatv */
+#define SYS_getattrlist 220
+#define SYS_setattrlist 221
+#define SYS_getdirentriesattr 222
+#define SYS_exchangedata 223
+/* 224 old checkuseraccess or fsgetpath */
+#define SYS_searchfs 225
+#define SYS_delete 226
+#define SYS_copyfile 227
+#define SYS_fgetattrlist 228
+#define SYS_fsetattrlist 229
+#define SYS_poll 230
+/* 231 old watchevent */
+/* 232 old waitevent */
+/* 233 old modwatch */
+#define SYS_getxattr 234
+#define SYS_fgetxattr 235
+#define SYS_setxattr 236
+#define SYS_fsetxattr 237
+#define SYS_removexattr 238
+#define SYS_fremovexattr 239
+#define SYS_listxattr 240
+#define SYS_flistxattr 241
+#define SYS_fsctl 242
+#define SYS_initgroups 243
+#define SYS_posix_spawn 244
+#define SYS_ffsctl 245
+/* 246 */
+/* 247 old nfsclnt */
+#define SYS_fhopen 248
+/* 249 */
+#define SYS_minherit 250
+#define SYS_semsys 251
+#define SYS_msgsys 252
+#define SYS_shmsys 253
+#define SYS_semctl 254
+#define SYS_semget 255
+#define SYS_semop 256
+/* 257 old semconfig */
+#define SYS_msgctl 258
+#define SYS_msgget 259
+#define SYS_msgsnd 260
+#define SYS_msgrcv 261
+#define SYS_shmat 262
+#define SYS_shmctl 263
+#define SYS_shmdt 264
+#define SYS_shmget 265
+#define SYS_shm_open 266
+#define SYS_shm_unlink 267
+#define SYS_sem_open 268
+#define SYS_sem_close 269
+#define SYS_sem_unlink 270
+#define SYS_sem_wait 271
+#define SYS_sem_trywait 272
+#define SYS_sem_post 273
+#define SYS_sysctlbyname 274
+/* 275 old sem_init */
+/* 276 old sem_destroy */
+#define SYS_open_extended 277
+#define SYS_umask_extended 278
+#define SYS_stat_extended 279
+#define SYS_lstat_extended 280
+#define SYS_fstat_extended 281
+#define SYS_chmod_extended 282
+#define SYS_fchmod_extended 283
+#define SYS_access_extended 284
+#define SYS_settid 285
+#define SYS_gettid 286
+#define SYS_setsgroups 287
+#define SYS_getsgroups 288
+#define SYS_setwgroups 289
+#define SYS_getwgroups 290
+#define SYS_mkfifo_extended 291
+#define SYS_mkdir_extended 292
+#define SYS_identitysvc 293
+#define SYS_shared_region_check_np 294
+/* 295 old shared_region_map_np */
+#define SYS_vm_pressure_monitor 296
+#define SYS_psynch_rw_longrdlock 297
+#define SYS_psynch_rw_yieldwrlock 298
+#define SYS_psynch_rw_downgrade 299
+#define SYS_psynch_rw_upgrade 300
+#define SYS_psynch_mutexwait 301
+#define SYS_psynch_mutexdrop 302
+#define SYS_psynch_cvbroad 303
+#define SYS_psynch_cvsignal 304
+#define SYS_psynch_cvwait 305
+#define SYS_psynch_rw_rdlock 306
+#define SYS_psynch_rw_wrlock 307
+#define SYS_psynch_rw_unlock 308
+#define SYS_psynch_rw_unlock2 309
+#define SYS_getsid 310
+#define SYS_settid_with_pid 311
+#define SYS_psynch_cvclrprepost 312
+#define SYS_aio_fsync 313
+#define SYS_aio_return 314
+#define SYS_aio_suspend 315
+#define SYS_aio_cancel 316
+#define SYS_aio_error 317
+#define SYS_aio_read 318
+#define SYS_aio_write 319
+#define SYS_lio_listio 320
+/* 321 old __pthread_cond_wait */
+#define SYS_iopolicysys 322
+#define SYS_process_policy 323
+#define SYS_mlockall 324
+#define SYS_munlockall 325
+/* 326 */
+#define SYS_issetugid 327
+#define SYS___pthread_kill 328
+#define SYS___pthread_sigmask 329
+#define SYS___sigwait 330
+#define SYS___disable_threadsignal 331
+#define SYS___pthread_markcancel 332
+#define SYS___pthread_canceled 333
+#define SYS___semwait_signal 334
+/* 335 old utrace */
+#define SYS_proc_info 336
+#define SYS_sendfile 337
+#define SYS_stat64 338
+#define SYS_fstat64 339
+#define SYS_lstat64 340
+#define SYS_stat64_extended 341
+#define SYS_lstat64_extended 342
+#define SYS_fstat64_extended 343
+#define SYS_getdirentries64 344
+#define SYS_statfs64 345
+#define SYS_fstatfs64 346
+#define SYS_getfsstat64 347
+#define SYS___pthread_chdir 348
+#define SYS___pthread_fchdir 349
+#define SYS_audit 350
+#define SYS_auditon 351
+/* 352 */
+#define SYS_getauid 353
+#define SYS_setauid 354
+/* 355 old getaudit */
+/* 356 old setaudit */
+#define SYS_getaudit_addr 357
+#define SYS_setaudit_addr 358
+#define SYS_auditctl 359
+#define SYS_bsdthread_create 360
+#define SYS_bsdthread_terminate 361
+#define SYS_kqueue 362
+#define SYS_kevent 363
+#define SYS_lchown 364
+/* 365 old stack_snapshot */
+#define SYS_bsdthread_register 366
+#define SYS_workq_open 367
+#define SYS_workq_kernreturn 368
+#define SYS_kevent64 369
+/* 370 old __semwait_signal */
+/* 371 old __semwait_signal */
+#define SYS_thread_selfid 372
+#define SYS_ledger 373
+#define SYS_kevent_qos 374
+#define SYS_kevent_id 375
+/* 376 */
+/* 377 */
+/* 378 */
+/* 379 */
+#define SYS___mac_execve 380
+#define SYS___mac_syscall 381
+#define SYS___mac_get_file 382
+#define SYS___mac_set_file 383
+#define SYS___mac_get_link 384
+#define SYS___mac_set_link 385
+#define SYS___mac_get_proc 386
+#define SYS___mac_set_proc 387
+#define SYS___mac_get_fd 388
+#define SYS___mac_set_fd 389
+#define SYS___mac_get_pid 390
+/* 391 */
+/* 392 */
+/* 393 */
+#define SYS_pselect 394
+#define SYS_pselect_nocancel 395
+#define SYS_read_nocancel 396
+#define SYS_write_nocancel 397
+#define SYS_open_nocancel 398
+#define SYS_close_nocancel 399
+#define SYS_wait4_nocancel 400
+#define SYS_recvmsg_nocancel 401
+#define SYS_sendmsg_nocancel 402
+#define SYS_recvfrom_nocancel 403
+#define SYS_accept_nocancel 404
+#define SYS_msync_nocancel 405
+#define SYS_fcntl_nocancel 406
+#define SYS_select_nocancel 407
+#define SYS_fsync_nocancel 408
+#define SYS_connect_nocancel 409
+#define SYS_sigsuspend_nocancel 410
+#define SYS_readv_nocancel 411
+#define SYS_writev_nocancel 412
+#define SYS_sendto_nocancel 413
+#define SYS_pread_nocancel 414
+#define SYS_pwrite_nocancel 415
+#define SYS_waitid_nocancel 416
+#define SYS_poll_nocancel 417
+#define SYS_msgsnd_nocancel 418
+#define SYS_msgrcv_nocancel 419
+#define SYS_sem_wait_nocancel 420
+#define SYS_aio_suspend_nocancel 421
+#define SYS___sigwait_nocancel 422
+#define SYS___semwait_signal_nocancel 423
+#define SYS___mac_mount 424
+#define SYS___mac_get_mount 425
+#define SYS___mac_getfsstat 426
+#define SYS_fsgetpath 427
+#define SYS_audit_session_self 428
+#define SYS_audit_session_join 429
+#define SYS_fileport_makeport 430
+#define SYS_fileport_makefd 431
+#define SYS_audit_session_port 432
+#define SYS_pid_suspend 433
+#define SYS_pid_resume 434
+#define SYS_pid_hibernate 435
+#define SYS_pid_shutdown_sockets 436
+/* 437 old shared_region_slide_np */
+/* 438 old shared_region_map_and_slide_np */
+#define SYS_kas_info 439
+#define SYS_memorystatus_control 440
+#define SYS_guarded_open_np 441
+#define SYS_guarded_close_np 442
+#define SYS_guarded_kqueue_np 443
+#define SYS_change_fdguard_np 444
+#define SYS_usrctl 445
+#define SYS_proc_rlimit_control 446
+#define SYS_connectx 447
+#define SYS_disconnectx 448
+#define SYS_peeloff 449
+#define SYS_socket_delegate 450
+#define SYS_telemetry 451
+#define SYS_proc_uuid_policy 452
+#define SYS_memorystatus_get_level 453
+#define SYS_system_override 454
+#define SYS_vfs_purge 455
+#define SYS_sfi_ctl 456
+#define SYS_sfi_pidctl 457
+#define SYS_coalition 458
+#define SYS_coalition_info 459
+#define SYS_necp_match_policy 460
+#define SYS_getattrlistbulk 461
+#define SYS_clonefileat 462
+#define SYS_openat 463
+#define SYS_openat_nocancel 464
+#define SYS_renameat 465
+#define SYS_faccessat 466
+#define SYS_fchmodat 467
+#define SYS_fchownat 468
+#define SYS_fstatat 469
+#define SYS_fstatat64 470
+#define SYS_linkat 471
+#define SYS_unlinkat 472
+#define SYS_readlinkat 473
+#define SYS_symlinkat 474
+#define SYS_mkdirat 475
+#define SYS_getattrlistat 476
+#define SYS_proc_trace_log 477
+#define SYS_bsdthread_ctl 478
+#define SYS_openbyid_np 479
+#define SYS_recvmsg_x 480
+#define SYS_sendmsg_x 481
+#define SYS_thread_selfusage 482
+#define SYS_csrctl 483
+#define SYS_guarded_open_dprotected_np 484
+#define SYS_guarded_write_np 485
+#define SYS_guarded_pwrite_np 486
+#define SYS_guarded_writev_np 487
+#define SYS_renameatx_np 488
+#define SYS_mremap_encrypted 489
+#define SYS_netagent_trigger 490
+#define SYS_stack_snapshot_with_config 491
+#define SYS_microstackshot 492
+#define SYS_grab_pgo_data 493
+#define SYS_persona 494
+/* 495 */
+#define SYS_mach_eventlink_signal 496
+#define SYS_mach_eventlink_wait_until 497
+#define SYS_mach_eventlink_signal_wait_until 498
+#define SYS_work_interval_ctl 499
+#define SYS_getentropy 500
+#define SYS_necp_open 501
+#define SYS_necp_client_action 502
+#define SYS___nexus_open 503
+#define SYS___nexus_register 504
+#define SYS___nexus_deregister 505
+#define SYS___nexus_create 506
+#define SYS___nexus_destroy 507
+#define SYS___nexus_get_opt 508
+#define SYS___nexus_set_opt 509
+#define SYS___channel_open 510
+#define SYS___channel_get_info 511
+#define SYS___channel_sync 512
+#define SYS___channel_get_opt 513
+#define SYS___channel_set_opt 514
+#define SYS_ulock_wait 515
+#define SYS_ulock_wake 516
+#define SYS_fclonefileat 517
+#define SYS_fs_snapshot 518
+#define SYS_register_uexc_handler 519
+#define SYS_terminate_with_payload 520
+#define SYS_abort_with_payload 521
+#define SYS_necp_session_open 522
+#define SYS_necp_session_action 523
+#define SYS_setattrlistat 524
+#define SYS_net_qos_guideline 525
+#define SYS_fmount 526
+#define SYS_ntp_adjtime 527
+#define SYS_ntp_gettime 528
+#define SYS_os_fault_with_payload 529
+#define SYS_kqueue_workloop_ctl 530
+#define SYS___mach_bridge_remote_time 531
+#define SYS_coalition_ledger 532
+#define SYS_log_data 533
+#define SYS_memorystatus_available_memory 534
+#define SYS_objc_bp_assist_cfg_np 535
+#define SYS_shared_region_map_and_slide_2_np 536
+#define SYS_pivot_root 537
+#define SYS_task_inspect_for_pid 538
+#define SYS_task_read_for_pid 539
+#define SYS_preadv 540
+#define SYS_pwritev 541
+#define SYS_preadv_nocancel 542
+#define SYS_pwritev_nocancel 543
+#define SYS_ulock_wait2 544
+#define SYS_proc_info_extended_id 545
+#define SYS_tracker_action 546
+#define SYS_debug_syscall_reject 547
+#define SYS_debug_syscall_reject_config 548
+#define SYS_graftdmg 549
+#define SYS_map_with_linking_np 550
+#define SYS_freadlink 551
+#define SYS_record_system_event 552
+#define SYS_mkfifoat 553
+#define SYS_mknodat 554
+#define SYS_ungraftdmg 555
+#define SYS_coalition_policy_set 556
+#define SYS_coalition_policy_get 557
+#define SYS_MAXSYSCALL 558
+#define SYS_invalid 63
+
#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_DARWIN_ARM_SYSCALL_H
>From 0bba8519a4773a3f2fbb27b02758b3ae3acb614d Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Wed, 5 Nov 2025 12:00:29 +0530
Subject: [PATCH 5/7] [libc] add reference for syscall numbers
Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
libc/src/__support/OSUtil/darwin/aarch64/syscall.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/libc/src/__support/OSUtil/darwin/aarch64/syscall.h b/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
index 6cbbd11a79ae3..3286e006535df 100644
--- a/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
+++ b/libc/src/__support/OSUtil/darwin/aarch64/syscall.h
@@ -110,6 +110,14 @@ LIBC_INLINE long syscall_impl(long number, long arg1, long arg2, long arg3,
#undef REGISTER_CONSTRAINT_5
#undef REGISTER_CONSTRAINT_6
+/* Following has been copied from MacOSX15.5 sdk
+ * This has been referenced from and generated by the syscalls.master file
+ * that can be found
+ * https://github.com/apple-oss-distributions/xnu/blob/f6217f891ac0bb64f3d375211650a4c1ff8ca1ea/bsd/kern/syscalls.master
+ */
+
+/* SYSCALL NUMBERS START */
+
#define SYS_syscall 0
#define SYS_exit 1
#define SYS_fork 2
@@ -671,4 +679,6 @@ LIBC_INLINE long syscall_impl(long number, long arg1, long arg2, long arg3,
#define SYS_MAXSYSCALL 558
#define SYS_invalid 63
+/* SYSCALL NUMBERS END */
+
#endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_DARWIN_ARM_SYSCALL_H
>From 09a866c17932d0cc6882412f85877fc10edc9919 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Tue, 4 Nov 2025 17:08:20 +0530
Subject: [PATCH 6/7] [libc][test] split exit tests into two separate tests
_Exit(3) is a fairly simple syscall wrapper whereas exit(3) calls
atexit-registered functions + whole lot of stuff that require support for sync
primitives.
Splitting the tests allows testing the former easily (especially for new port
projects)
Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
libc/test/src/stdlib/CMakeLists.txt | 13 +++++++++++++
libc/test/src/stdlib/_Exit_test.cpp | 4 ----
libc/test/src/stdlib/exit_test.cpp | 19 +++++++++++++++++++
3 files changed, 32 insertions(+), 4 deletions(-)
create mode 100644 libc/test/src/stdlib/exit_test.cpp
diff --git a/libc/test/src/stdlib/CMakeLists.txt b/libc/test/src/stdlib/CMakeLists.txt
index 0eb373c3fa061..9765e42095aa5 100644
--- a/libc/test/src/stdlib/CMakeLists.txt
+++ b/libc/test/src/stdlib/CMakeLists.txt
@@ -397,6 +397,19 @@ if(LLVM_LIBC_FULL_BUILD)
libc-stdlib-tests
SRCS
_Exit_test.cpp
+ DEPENDS
+ libc.src.__support.OSUtil.osutil
+ libc.src.stdlib._Exit
+ )
+
+ add_libc_test(
+ exit_test
+ # The EXPECT_EXITS test is only availible for unit tests.
+ UNIT_TEST_ONLY
+ SUITE
+ libc-stdlib-tests
+ SRCS
+ exit_test.cpp
DEPENDS
libc.src.stdlib._Exit
libc.src.stdlib.exit
diff --git a/libc/test/src/stdlib/_Exit_test.cpp b/libc/test/src/stdlib/_Exit_test.cpp
index 333277dc01dca..57c432828c2f3 100644
--- a/libc/test/src/stdlib/_Exit_test.cpp
+++ b/libc/test/src/stdlib/_Exit_test.cpp
@@ -7,13 +7,9 @@
//===----------------------------------------------------------------------===//
#include "src/stdlib/_Exit.h"
-#include "src/stdlib/exit.h"
#include "test/UnitTest/Test.h"
TEST(LlvmLibcStdlib, _Exit) {
EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(1); }, 1);
EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(65); }, 65);
-
- EXPECT_EXITS([] { LIBC_NAMESPACE::exit(1); }, 1);
- EXPECT_EXITS([] { LIBC_NAMESPACE::exit(65); }, 65);
}
diff --git a/libc/test/src/stdlib/exit_test.cpp b/libc/test/src/stdlib/exit_test.cpp
new file mode 100644
index 0000000000000..333277dc01dca
--- /dev/null
+++ b/libc/test/src/stdlib/exit_test.cpp
@@ -0,0 +1,19 @@
+//===-- Unittests for _Exit -----------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/stdlib/_Exit.h"
+#include "src/stdlib/exit.h"
+#include "test/UnitTest/Test.h"
+
+TEST(LlvmLibcStdlib, _Exit) {
+ EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(1); }, 1);
+ EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(65); }, 65);
+
+ EXPECT_EXITS([] { LIBC_NAMESPACE::exit(1); }, 1);
+ EXPECT_EXITS([] { LIBC_NAMESPACE::exit(65); }, 65);
+}
>From 0a747bfa27e4005cf204dfbbc146e9d2fec5b375 Mon Sep 17 00:00:00 2001
From: Shreeyash Pandey <shreeyash335 at gmail.com>
Date: Tue, 4 Nov 2025 17:13:50 +0530
Subject: [PATCH 7/7] [libc][darwin] add internal::exit
Signed-off-by: Shreeyash Pandey <shreeyash335 at gmail.com>
---
libc/config/darwin/aarch64/entrypoints.txt | 1 +
libc/include/sys/syscall.h.def | 5 ++--
.../__support/OSUtil/darwin/CMakeLists.txt | 7 ++++--
.../OSUtil/darwin/aarch64/CMakeLists.txt | 2 +-
libc/src/__support/OSUtil/darwin/exit.cpp | 24 +++++++++++++++++++
5 files changed, 33 insertions(+), 6 deletions(-)
create mode 100644 libc/src/__support/OSUtil/darwin/exit.cpp
diff --git a/libc/config/darwin/aarch64/entrypoints.txt b/libc/config/darwin/aarch64/entrypoints.txt
index e3c6c2b30c415..3909417f9730d 100644
--- a/libc/config/darwin/aarch64/entrypoints.txt
+++ b/libc/config/darwin/aarch64/entrypoints.txt
@@ -111,6 +111,7 @@ if(LLVM_LIBC_FULL_BUILD)
libc.src.setjmp.setjmp
libc.src.setjmp.siglongjmp
libc.src.setjmp.sigsetjmp
+ libc.src.stdlib._Exit
)
endif()
diff --git a/libc/include/sys/syscall.h.def b/libc/include/sys/syscall.h.def
index 60e5024e500e3..bb55c4fd1efea 100644
--- a/libc/include/sys/syscall.h.def
+++ b/libc/include/sys/syscall.h.def
@@ -9,8 +9,7 @@
#ifndef LLVM_LIBC_SYS_SYSCALL_H
#define LLVM_LIBC_SYS_SYSCALL_H
-//TODO: Handle non-linux syscalls
-
+#if defined(__linux__)
#include <asm/unistd.h>
#ifdef __NR_FAST_atomic_update
@@ -2361,5 +2360,5 @@
#define SYS_writev __NR_writev
#endif
-
+#endif
#endif // LLVM_LIBC_SYS_SYSCALL_H
diff --git a/libc/src/__support/OSUtil/darwin/CMakeLists.txt b/libc/src/__support/OSUtil/darwin/CMakeLists.txt
index 4241bb37684f7..9e69bf7d0cbab 100644
--- a/libc/src/__support/OSUtil/darwin/CMakeLists.txt
+++ b/libc/src/__support/OSUtil/darwin/CMakeLists.txt
@@ -4,13 +4,16 @@ endif()
add_subdirectory(${LIBC_TARGET_ARCHITECTURE})
-add_header_library(
+add_object_library(
darwin_util
+ SRCS
+ exit.cpp
HDRS
io.h
syscall.h
DEPENDS
- .${LIBC_TARGET_ARCHITECTURE}.darwin_util
+ .${LIBC_TARGET_ARCHITECTURE}.darwin_${LIBC_TARGET_ARCHITECTURE}_util
libc.src.__support.common
libc.src.__support.CPP.string_view
+ libc.include.sys_syscall
)
diff --git a/libc/src/__support/OSUtil/darwin/aarch64/CMakeLists.txt b/libc/src/__support/OSUtil/darwin/aarch64/CMakeLists.txt
index 5ab95b01758c8..b36fe22017f34 100644
--- a/libc/src/__support/OSUtil/darwin/aarch64/CMakeLists.txt
+++ b/libc/src/__support/OSUtil/darwin/aarch64/CMakeLists.txt
@@ -1,5 +1,5 @@
add_header_library(
- darwin_util
+ darwin_aarch64_util
HDRS
syscall.h
DEPENDS
diff --git a/libc/src/__support/OSUtil/darwin/exit.cpp b/libc/src/__support/OSUtil/darwin/exit.cpp
new file mode 100644
index 0000000000000..032000bd7b0cc
--- /dev/null
+++ b/libc/src/__support/OSUtil/darwin/exit.cpp
@@ -0,0 +1,24 @@
+//===------------ MacOS implementation of an exit function ------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/__support/OSUtil/darwin/syscall.h" // syscall_impl
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+#include "sys/syscall.h" // For syscall numbers.
+
+namespace LIBC_NAMESPACE_DECL {
+namespace internal {
+
+__attribute__((noreturn)) void exit(int status) {
+ for (;;) {
+ LIBC_NAMESPACE::syscall_impl<long>(SYS_exit, status);
+ }
+}
+
+} // namespace internal
+} // namespace LIBC_NAMESPACE_DECL
More information about the libc-commits
mailing list