xnu_system_call_numbers.odin 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. package darwin
  2. // IMPORTANT NOTE: direct syscall usage is not allowed by Apple's review process of apps and should
  3. // be entirely avoided in the builtin Odin collections, these are here for users if they don't
  4. // care about the Apple review process.
  5. unix_offset_syscall :: proc "contextless" (number: System_Call_Number) -> uintptr {
  6. return uintptr(number) + uintptr(0x2000000)
  7. }
  8. System_Call_Number :: enum uintptr {
  9. /* 0 syscall */
  10. exit = 1,
  11. fork = 2,
  12. read = 3,
  13. write = 4,
  14. open = 5,
  15. close = 6,
  16. wait4 = 7,
  17. /* 8 old creat */
  18. link = 9,
  19. unlink = 10,
  20. /* 11 old execv */
  21. chdir = 12,
  22. fchdir = 13,
  23. mknod = 14,
  24. chmod = 15,
  25. chown = 16,
  26. /* 17 old break */
  27. getfsstat = 18,
  28. /* 19 old lseek */
  29. getpid = 20,
  30. /* 21 old mount */
  31. /* 22 old umount */
  32. setuid = 23,
  33. getuid = 24,
  34. geteuid = 25,
  35. ptrace = 26,
  36. recvmsg = 27,
  37. sendmsg = 28,
  38. recvfrom = 29,
  39. accept = 30,
  40. getpeername = 31,
  41. getsockname = 32,
  42. access = 33,
  43. chflags = 34,
  44. fchflags = 35,
  45. sync = 36,
  46. kill = 37,
  47. /* 38 old stat */
  48. getppid = 39,
  49. /* 40 old lstat */
  50. dup = 41,
  51. pipe = 42,
  52. getegid = 43,
  53. /* 44 old profil */
  54. /* 45 old ktrace */
  55. sigaction = 46,
  56. getgid = 47,
  57. sigprocmask = 48,
  58. getlogin = 49,
  59. setlogin = 50,
  60. acct = 51,
  61. sigpending = 52,
  62. sigaltstack = 53,
  63. ioctl = 54,
  64. reboot = 55,
  65. revoke = 56,
  66. symlink = 57,
  67. readlink = 58,
  68. execve = 59,
  69. umask = 60,
  70. chroot = 61,
  71. /* 62 old fstat */
  72. /* 63 used internally and reserved */
  73. /* getpagesize = 64, invalid */
  74. msync = 65,
  75. vfork = 66,
  76. /* 67 old vread */
  77. /* 68 old vwrite */
  78. /* 69 old sbrk */
  79. /* 70 old sstk */
  80. /* 71 old mmap */
  81. /* 72 old vadvise */
  82. munmap = 73,
  83. mprotect = 74,
  84. madvise = 75,
  85. /* 76 old vhangup */
  86. /* 77 old vlimit */
  87. mincore = 78,
  88. getgroups = 79,
  89. setgroups = 80,
  90. getpgrp = 81,
  91. setpgid = 82,
  92. setitimer = 83,
  93. /* 84 old wait */
  94. swapon = 85,
  95. getitimer = 86,
  96. /* 87 old gethostname */
  97. /* 88 old sethostname */
  98. getdtablesize = 89,
  99. dup2 = 90,
  100. /* 91 old getdopt */
  101. fcntl = 92,
  102. select = 93,
  103. /* 94 old setdopt */
  104. fsync = 95,
  105. setpriority = 96,
  106. socket = 97,
  107. connect = 98,
  108. /* 99 old accept */
  109. getpriority = 100,
  110. /* 101 old send */
  111. /* 102 old recv */
  112. /* 103 old sigreturn */
  113. bind = 104,
  114. setsockopt = 105,
  115. listen = 106,
  116. /* 107 old vtimes */
  117. /* 108 old sigvec */
  118. /* 109 old sigblock */
  119. /* 110 old sigsetmask */
  120. sigsuspend = 111,
  121. /* 112 old sigstack */
  122. /* 113 old recvmsg */
  123. /* 114 old sendmsg */
  124. /* 115 old vtrace */
  125. gettimeofday = 116,
  126. getrusage = 117,
  127. getsockopt = 118,
  128. /* 119 old resuba */
  129. readv = 120,
  130. writev = 121,
  131. settimeofday = 122,
  132. fchown = 123,
  133. fchmod = 124,
  134. /* 125 old recvfrom */
  135. setreuid = 126,
  136. setregid = 127,
  137. rename = 128,
  138. /* 129 old truncate */
  139. /* 130 old ftruncate */
  140. flock = 131,
  141. mkfifo = 132,
  142. sendto = 133,
  143. shutdown = 134,
  144. socketpair = 135,
  145. mkdir = 136,
  146. rmdir = 137,
  147. utimes = 138,
  148. futimes = 139,
  149. adjtime = 140,
  150. /* 141 old getpeername */
  151. gethostuuid = 142,
  152. /* 143 old sethostid */
  153. /* 144 old getrlimit */
  154. /* 145 old setrlimit */
  155. /* 146 old killpg */
  156. setsid = 147,
  157. /* 148 old setquota */
  158. /* 149 old qquota */
  159. /* 150 old getsockname */
  160. getpgid = 151,
  161. setprivexec = 152,
  162. pread = 153,
  163. pwrite = 154,
  164. nfssvc = 155,
  165. /* 156 old getdirentries */
  166. statfs = 157,
  167. fstatfs = 158,
  168. unmount = 159,
  169. /* 160 old async_daemon */
  170. getfh = 161,
  171. /* 162 old getdomainname */
  172. /* 163 old setdomainname */
  173. /* 164 */
  174. quotactl = 165,
  175. /* 166 old exportfs */
  176. mount = 167,
  177. /* 168 old ustat */
  178. csops = 169,
  179. csops_audittoken = 170,
  180. /* 171 old wait3 */
  181. /* 172 old rpause */
  182. waitid = 173,
  183. /* 174 old getdents */
  184. /* 175 old gc_control */
  185. /* 176 old add_profil */
  186. kdebug_typefilter = 177,
  187. kdebug_trace_string = 178,
  188. kdebug_trace64 = 179,
  189. kdebug_trace = 180,
  190. setgid = 181,
  191. setegid = 182,
  192. seteuid = 183,
  193. sigreturn = 184,
  194. /* 185 old chud */
  195. thread_selfcounts = 186,
  196. fdatasync = 187,
  197. stat = 188,
  198. fstat = 189,
  199. lstat = 190,
  200. pathconf = 191,
  201. fpathconf = 192,
  202. /* 193 old getfsstat */
  203. getrlimit = 194,
  204. setrlimit = 195,
  205. getdirentries = 196,
  206. mmap = 197,
  207. /* 198 old __syscall */
  208. lseek = 199,
  209. truncate = 200,
  210. ftruncate = 201,
  211. sysctl = 202,
  212. mlock = 203,
  213. munlock = 204,
  214. undelete = 205,
  215. /* 206 old ATsocket */
  216. /* 207 old ATgetmsg */
  217. /* 208 old ATputmsg */
  218. /* 209 old ATsndreq */
  219. /* 210 old ATsndrsp */
  220. /* 211 old ATgetreq */
  221. /* 212 old ATgetrsp */
  222. /* 213 Reserved for AppleTalk */
  223. /* 214 */
  224. /* 215 */
  225. open_dprotected_np = 216,
  226. fsgetpath_ext = 217,
  227. /* 218 old lstatv */
  228. /* 219 old fstatv */
  229. getattrlist = 220,
  230. setattrlist = 221,
  231. getdirentriesattr = 222,
  232. exchangedata = 223,
  233. /* 224 old checkuseraccess or fsgetpath */
  234. searchfs = 225,
  235. delete = 226,
  236. copyfile = 227,
  237. fgetattrlist = 228,
  238. fsetattrlist = 229,
  239. poll = 230,
  240. /* 231 old watchevent */
  241. /* 232 old waitevent */
  242. /* 233 old modwatch */
  243. getxattr = 234,
  244. fgetxattr = 235,
  245. setxattr = 236,
  246. fsetxattr = 237,
  247. removexattr = 238,
  248. fremovexattr = 239,
  249. listxattr = 240,
  250. flistxattr = 241,
  251. fsctl = 242,
  252. initgroups = 243,
  253. posix_spawn = 244,
  254. ffsctl = 245,
  255. /* 246 */
  256. nfsclnt = 247,
  257. fhopen = 248,
  258. /* 249 */
  259. minherit = 250,
  260. semsys = 251,
  261. msgsys = 252,
  262. shmsys = 253,
  263. semctl = 254,
  264. semget = 255,
  265. semop = 256,
  266. /* 257 old semconfig */
  267. msgctl = 258,
  268. msgget = 259,
  269. msgsnd = 260,
  270. msgrcv = 261,
  271. shmat = 262,
  272. shmctl = 263,
  273. shmdt = 264,
  274. shmget = 265,
  275. shm_open = 266,
  276. shm_unlink = 267,
  277. sem_open = 268,
  278. sem_close = 269,
  279. sem_unlink = 270,
  280. sem_wait = 271,
  281. sem_trywait = 272,
  282. sem_post = 273,
  283. sysctlbyname = 274,
  284. /* 275 old sem_init */
  285. /* 276 old sem_destroy */
  286. open_extended = 277,
  287. umask_extended = 278,
  288. stat_extended = 279,
  289. lstat_extended = 280,
  290. fstat_extended = 281,
  291. chmod_extended = 282,
  292. fchmod_extended = 283,
  293. access_extended = 284,
  294. settid = 285,
  295. gettid = 286,
  296. setsgroups = 287,
  297. getsgroups = 288,
  298. setwgroups = 289,
  299. getwgroups = 290,
  300. mkfifo_extended = 291,
  301. mkdir_extended = 292,
  302. identitysvc = 293,
  303. shared_region_check_np = 294,
  304. /* 295 old shared_region_map_np */
  305. vm_pressure_monitor = 296,
  306. psynch_rw_longrdlock = 297,
  307. psynch_rw_yieldwrlock = 298,
  308. psynch_rw_downgrade = 299,
  309. psynch_rw_upgrade = 300,
  310. psynch_mutexwait = 301,
  311. psynch_mutexdrop = 302,
  312. psynch_cvbroad = 303,
  313. psynch_cvsignal = 304,
  314. psynch_cvwait = 305,
  315. psynch_rw_rdlock = 306,
  316. psynch_rw_wrlock = 307,
  317. psynch_rw_unlock = 308,
  318. psynch_rw_unlock2 = 309,
  319. getsid = 310,
  320. settid_with_pid = 311,
  321. psynch_cvclrprepost = 312,
  322. aio_fsync = 313,
  323. aio_return = 314,
  324. aio_suspend = 315,
  325. aio_cancel = 316,
  326. aio_error = 317,
  327. aio_read = 318,
  328. aio_write = 319,
  329. lio_listio = 320,
  330. /* 321 old __pthread_cond_wait */
  331. iopolicysys = 322,
  332. process_policy = 323,
  333. mlockall = 324,
  334. munlockall = 325,
  335. /* 326 */
  336. issetugid = 327,
  337. __pthread_kill = 328,
  338. __pthread_sigmask = 329,
  339. __sigwait = 330,
  340. __disable_threadsignal = 331,
  341. __pthread_markcancel = 332,
  342. __pthread_canceled = 333,
  343. __semwait_signal = 334,
  344. /* 335 old utrace */
  345. proc_info = 336,
  346. sendfile = 337,
  347. stat64 = 338,
  348. fstat64 = 339,
  349. lstat64 = 340,
  350. stat64_extended = 341,
  351. lstat64_extended = 342,
  352. fstat64_extended = 343,
  353. getdirentries64 = 344,
  354. statfs64 = 345,
  355. fstatfs64 = 346,
  356. getfsstat64 = 347,
  357. __pthread_chdir = 348,
  358. __pthread_fchdir = 349,
  359. audit = 350,
  360. auditon = 351,
  361. /* 352 */
  362. getauid = 353,
  363. setauid = 354,
  364. /* 355 old getaudit */
  365. /* 356 old setaudit */
  366. getaudit_addr = 357,
  367. setaudit_addr = 358,
  368. auditctl = 359,
  369. bsdthread_create = 360,
  370. bsdthread_terminate = 361,
  371. kqueue = 362,
  372. kevent = 363,
  373. lchown = 364,
  374. /* 365 old stack_snapshot */
  375. bsdthread_register = 366,
  376. workq_open = 367,
  377. workq_kernreturn = 368,
  378. kevent64 = 369,
  379. __old_semwait_signal = 370,
  380. __old_semwait_signal_nocancel = 371,
  381. thread_selfid = 372,
  382. ledger = 373,
  383. kevent_qos = 374,
  384. kevent_id = 375,
  385. /* 376 */
  386. /* 377 */
  387. /* 378 */
  388. /* 379 */
  389. __mac_execve = 380,
  390. __mac_syscall = 381,
  391. __mac_get_file = 382,
  392. __mac_set_file = 383,
  393. __mac_get_link = 384,
  394. __mac_set_link = 385,
  395. __mac_get_proc = 386,
  396. __mac_set_proc = 387,
  397. __mac_get_fd = 388,
  398. __mac_set_fd = 389,
  399. __mac_get_pid = 390,
  400. /* 391 */
  401. /* 392 */
  402. /* 393 */
  403. pselect = 394,
  404. pselect_nocancel = 395,
  405. read_nocancel = 396,
  406. write_nocancel = 397,
  407. open_nocancel = 398,
  408. close_nocancel = 399,
  409. wait4_nocancel = 400,
  410. recvmsg_nocancel = 401,
  411. sendmsg_nocancel = 402,
  412. recvfrom_nocancel = 403,
  413. accept_nocancel = 404,
  414. msync_nocancel = 405,
  415. fcntl_nocancel = 406,
  416. select_nocancel = 407,
  417. fsync_nocancel = 408,
  418. connect_nocancel = 409,
  419. sigsuspend_nocancel = 410,
  420. readv_nocancel = 411,
  421. writev_nocancel = 412,
  422. sendto_nocancel = 413,
  423. pread_nocancel = 414,
  424. pwrite_nocancel = 415,
  425. waitid_nocancel = 416,
  426. poll_nocancel = 417,
  427. msgsnd_nocancel = 418,
  428. msgrcv_nocancel = 419,
  429. sem_wait_nocancel = 420,
  430. aio_suspend_nocancel = 421,
  431. __sigwait_nocancel = 422,
  432. __semwait_signal_nocancel = 423,
  433. __mac_mount = 424,
  434. __mac_get_mount = 425,
  435. __mac_getfsstat = 426,
  436. fsgetpath = 427,
  437. audit_session_self = 428,
  438. audit_session_join = 429,
  439. fileport_makeport = 430,
  440. fileport_makefd = 431,
  441. audit_session_port = 432,
  442. pid_suspend = 433,
  443. pid_resume = 434,
  444. pid_hibernate = 435,
  445. pid_shutdown_sockets = 436,
  446. /* 437 old shared_region_slide_np */
  447. shared_region_map_and_slide_np = 438,
  448. kas_info = 439,
  449. memorystatus_control = 440,
  450. guarded_open_np = 441,
  451. guarded_close_np = 442,
  452. guarded_kqueue_np = 443,
  453. change_fdguard_np = 444,
  454. usrctl = 445,
  455. proc_rlimit_control = 446,
  456. connectx = 447,
  457. disconnectx = 448,
  458. peeloff = 449,
  459. socket_delegate = 450,
  460. telemetry = 451,
  461. proc_uuid_policy = 452,
  462. memorystatus_get_level = 453,
  463. system_override = 454,
  464. vfs_purge = 455,
  465. sfi_ctl = 456,
  466. sfi_pidctl = 457,
  467. coalition = 458,
  468. coalition_info = 459,
  469. necp_match_policy = 460,
  470. getattrlistbulk = 461,
  471. clonefileat = 462,
  472. openat = 463,
  473. openat_nocancel = 464,
  474. renameat = 465,
  475. faccessat = 466,
  476. fchmodat = 467,
  477. fchownat = 468,
  478. fstatat = 469,
  479. fstatat64 = 470,
  480. linkat = 471,
  481. unlinkat = 472,
  482. readlinkat = 473,
  483. symlinkat = 474,
  484. mkdirat = 475,
  485. getattrlistat = 476,
  486. proc_trace_log = 477,
  487. bsdthread_ctl = 478,
  488. openbyid_np = 479,
  489. recvmsg_x = 480,
  490. sendmsg_x = 481,
  491. thread_selfusage = 482,
  492. csrctl = 483,
  493. guarded_open_dprotected_np = 484,
  494. guarded_write_np = 485,
  495. guarded_pwrite_np = 486,
  496. guarded_writev_np = 487,
  497. renameatx_np = 488,
  498. mremap_encrypted = 489,
  499. netagent_trigger = 490,
  500. stack_snapshot_with_config = 491,
  501. microstackshot = 492,
  502. grab_pgo_data = 493,
  503. persona = 494,
  504. /* 495 */
  505. mach_eventlink_signal = 496,
  506. mach_eventlink_wait_until = 497,
  507. mach_eventlink_signal_wait_until = 498,
  508. work_interval_ctl = 499,
  509. getentropy = 500,
  510. necp_open = 501,
  511. necp_client_action = 502,
  512. nexus_open = 503, // for those who are intressted http://newosxbook.com/bonus/vol1ch16.html
  513. nexus_register = 504,
  514. nexus_deregister = 505,
  515. nexus_create = 506,
  516. nexus_destroy = 507,
  517. nexus_get_opt = 508,
  518. nexus_set_opt = 509,
  519. channel_open = 510,
  520. channel_get_info = 511,
  521. channel_sync = 512,
  522. channel_get_opt = 513,
  523. channel_set_opt = 514,
  524. ulock_wait = 515,
  525. ulock_wake = 516,
  526. fclonefileat = 517,
  527. fs_snapshot = 518,
  528. register_uexc_handler = 519,
  529. terminate_with_payload = 520,
  530. abort_with_payload = 521,
  531. necp_session_open = 522,
  532. necp_session_action = 523,
  533. setattrlistat = 524,
  534. net_qos_guideline = 525,
  535. fmount = 526,
  536. ntp_adjtime = 527,
  537. ntp_gettime = 528,
  538. os_fault_with_payload = 529,
  539. kqueue_workloop_ctl = 530,
  540. mach_bridge_remote_time = 531,
  541. coalition_ledger = 532,
  542. log_data = 533,
  543. memorystatus_available_memory = 534,
  544. objc_bp_assist_cfg_np = 535,
  545. shared_region_map_and_slide_2_np = 536,
  546. pivot_root = 537,
  547. task_inspect_for_pid = 538,
  548. task_read_for_pid = 539,
  549. preadv = 540,
  550. pwritev = 541,
  551. preadv_nocancel = 542,
  552. pwritev_nocancel = 543,
  553. ulock_wait2 = 544,
  554. proc_info_extended_id = 545,
  555. tracker_action = 546,
  556. debug_syscall_reject = 547,
  557. MAXSYSCALL = 548,
  558. /* invalid = 63, */
  559. }