Skip to content
Closed
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
289 commits
Select commit Hold shift + click to select a range
64c5595
fix(macos): move the AGC driver block, macOS reserves its address
iamthehimansh Oct 19, 2026
acc8280
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
aa92455
fix(macos): load libvulkan.1.dylib in three driver tests
iamthehimansh Oct 19, 2026
3c56fd1
fix(macos): correctly rounded acosf under Rosetta
iamthehimansh Oct 19, 2026
61ae9b1
fix(macos): keep errno across a successful nanosleep
iamthehimansh Oct 19, 2026
dcf3191
fix(macos): sceNetInetPton rejects leading zeros like the console
iamthehimansh Oct 19, 2026
301073a
fix(macos): unbound datagram shutdown, IPv6 lookups and interface cou…
iamthehimansh Oct 19, 2026
4434ad2
fix(macos): sendto on connected UDP sockets and datagram FIONREAD
iamthehimansh Oct 19, 2026
d3ad6d8
fix(macos): stream send after the peer closes reports EPIPE
iamthehimansh Oct 19, 2026
0db9333
fix(macos): allow SHUT_RD after the peer stops sending
iamthehimansh Oct 19, 2026
73b7b9f
fix(macos): SOCK_SEQPACKET socket pairs use datagram pairs
iamthehimansh Oct 19, 2026
7dfd8b8
fix(macos): poll reports pending TCP urgent data
iamthehimansh Oct 19, 2026
53b818d
fix(macos): PreciseSleep absorbs macOS nanosleep lateness
iamthehimansh Oct 19, 2026
5a48d6c
fix(macos): CLOCK_THREAD_CPUTIME_ID reads the Mach thread counter
iamthehimansh Oct 19, 2026
48cc7b0
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
3adbae3
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
e28a885
fix(macos): keep DWARF unwind tables for the guest unwinder
iamthehimansh Oct 19, 2026
ca7fa24
fix(macos): sceKernelVirtualQuery reads host regions with mach_vm_region
iamthehimansh Oct 19, 2026
e40dc1a
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
0456585
fix(macos): keep guest_pthread_stack's 4 KiB probe frame out of Worker
iamthehimansh Oct 19, 2026
c3c0d57
fix(macos): guest_kernel_stack_protect runs on macOS
iamthehimansh Oct 19, 2026
a1bfdac
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
e521f16
fix(macos): fflush leaves a reading stream's input alone
iamthehimansh Oct 19, 2026
c11a7ca
fix(macos): zero-count readv/writev transfer nothing
iamthehimansh Oct 19, 2026
581b7dd
fix(macos): application_heap tests install process parameters on macOS
iamthehimansh Oct 19, 2026
8fcb270
fix(macos): guest mmap of shared-memory objects and regular files
iamthehimansh Oct 19, 2026
8ee0d4a
fix(macos): executable views of JIT shared memory
iamthehimansh Oct 19, 2026
f639d6d
fix(macos): thread-stack registry survives static destruction
iamthehimansh Oct 19, 2026
a471a09
fix(macos): ProcessParametersFixture installs parameters on macOS
iamthehimansh Oct 19, 2026
37ecb9b
fix(macos): build libusb without pipe2
iamthehimansh Oct 19, 2026
b1feafa
fix(macos): report the guest module's eh_frame in module info
iamthehimansh Oct 19, 2026
578096c
fix(macos): guest_path_case on case-insensitive volumes
iamthehimansh Oct 19, 2026
71978c7
fix(macos): alarm expiry error reaches the guest terminate handler
iamthehimansh Oct 19, 2026
a4d8863
fix(macos): archived-file mmap refusal reaches the guest terminate ha…
iamthehimansh Oct 19, 2026
5ec5634
fix(macos): guest_host_standard_error throws through the guest runtime
iamthehimansh Oct 19, 2026
96677a4
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
794661f
fix(macos): nid_patcher_dynamic_strings reads the Mach-O fixture
iamthehimansh Oct 19, 2026
43e4d7b
fix(macos): guest_filesystem — O_CREAT on a directory and rename onto…
iamthehimansh Oct 19, 2026
8a4bd1e
fix(macos): keep libSceSsl's mbedtls copy private
iamthehimansh Oct 19, 2026
18d1bce
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
6086c7d
test(macos): give patched_libraries time for Rosetta's first translation
iamthehimansh Oct 19, 2026
97d6d4f
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
e268d78
Merge origin/main into feat/macos-port
iamthehimansh Oct 19, 2026
dfb7180
fix(macos): performance overlay reads the process's private memory
iamthehimansh Oct 19, 2026
1083959
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
055b7b1
fix(macos): descriptor pool reset failure test catches the host termi…
iamthehimansh Oct 20, 2026
976ae45
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
aa7ceef
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
e262c24
fix(macos): keep sRGB storage images in their UNORM form on MoltenVK
iamthehimansh Oct 20, 2026
8c27dbb
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
809b506
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
547acab
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d1c8497
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
c79e144
fix(macos): guest arena protection changes update the write watch
iamthehimansh Oct 20, 2026
5485473
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
bfe20a4
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
7560f4c
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
162784f
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
64a939e
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
a732e87
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
560574f
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
195aca5
fix(macos): stop pipeline journal replay before VulkanDevice state goes
iamthehimansh Oct 20, 2026
ded4b9a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9432739
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
3b6fa92
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
0bc519b
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
dce396b
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
6868c9b
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
ef38c21
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
25fca64
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
c7681a8
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9642449
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
44124cd
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
1cf4458
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
a2d0c12
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d8e04ae
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
0bef627
fix(macos): uint4 pixel output for unsigned integer targets fed raw d…
iamthehimansh Oct 20, 2026
5d1f882
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
c753907
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d2e12d1
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
eeb3dfe
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
7a31d37
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
695bdf0
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
6b72c90
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
f0b3b94
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d8c2f60
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9a22482
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
0130849
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
63091a6
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
bc0e81f
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
88a13ba
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
091e4de
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
3ddddb5
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
65bebf9
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d439789
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
f3a593a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
8d21742
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
13532a5
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
e7df82a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
8b9d464
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
671f750
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
7bd8684
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
5239356
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
c4e7187
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
cc7c2af
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9d6a747
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
145368e
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
806f97a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9c60d13
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
bdc4765
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d9e53d9
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
8b9404c
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
af28519
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
7fe7b8b
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
e60b6e8
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
c573411
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
810e7f5
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
ae09b1c
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
9be74c1
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
61c2c17
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
f920b6e
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
12b2e2a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
be38e16
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
5798cd8
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
3e14d58
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
98e2bc6
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
62f26af
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
e8f3d86
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
ac7519c
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
92e0f1b
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
02f2d76
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
0cb1d10
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
bb8809f
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
aa9e232
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
2dd4d41
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d5312ed
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
34a4ba7
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
17363ec
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
75c3dc2
test(libkernel): avoid __attribute__ in the macOS pthread stack check
iamthehimansh Oct 20, 2026
45730e4
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
a532445
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
e4ab00d
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
d3f19bc
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
4cffa3a
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
2bbb1c6
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
ed853b2
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
fc7d307
Merge origin/main into feat/macos-port
iamthehimansh Oct 20, 2026
5fbf315
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
a401655
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
0334105
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
4ae5a9f
fix(libSceNet): keep DONTWAIT and interrupted stream sends correct on…
iamthehimansh Oct 21, 2026
ee33dd1
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
ea9da4f
fix(recompiler): fence image stores before same-thread reads on macOS
iamthehimansh Oct 21, 2026
4bd09db
test(agc): keep the rtkit priority-refusal tests off macOS
iamthehimansh Oct 21, 2026
c4af8f6
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
c932f10
test(agc): keep the import-probe hook one-shot on macOS
iamthehimansh Oct 21, 2026
e1df8ca
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
abed86a
test(np): include <initializer_list> for the WebApi2 test on macOS
iamthehimansh Oct 21, 2026
e673a82
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
f991f04
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
50f545c
fix(agc): order wave LDS accesses with memory barriers under MoltenVK
iamthehimansh Oct 21, 2026
55f6390
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
9281bb6
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
0a5e88b
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
b77f324
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
d26b6f7
fix(recompiler): keep the sign of a -0 product on macOS
iamthehimansh Oct 21, 2026
8dba57f
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
bec2888
fix(recompiler): read the sample mask through a private copy on macOS
iamthehimansh Oct 21, 2026
6e9ceda
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
6fc059b
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
efdc57b
fix(libkernel): keep two macOS socket behaviours after #7850
iamthehimansh Oct 21, 2026
eaea2fe
fix(libkernel): report pending TCP urgent data in poll on macOS
iamthehimansh Oct 21, 2026
4a7efd2
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
fbbe900
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
4a07e77
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
1f687d6
test(agc): read the static table at the macOS driver block
iamthehimansh Oct 21, 2026
0a6c0fd
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
f5cfb84
fix(recompiler): write the stencil reference through a private copy o…
iamthehimansh Oct 21, 2026
cf1b059
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
c8a1d75
fix(libkernel): make guest modules visible to later modules' imports …
ycarogabriel-lgtm Oct 18, 2026
ef373f9
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
7379d72
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
e0a3cce
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
e6deb55
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
1047f27
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
3d649b8
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
460ffcf
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
6e2a24a
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
4ebe71f
fix(libkernel): stat guest paths near 1024 bytes on macOS
iamthehimansh Oct 21, 2026
a52719c
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 21, 2026
a1fb8e3
test(contentsearch): include <initializer_list> for the ContentSearch…
iamthehimansh Oct 21, 2026
ab3c69d
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
348c64c
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
3116387
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
130b269
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
150d9e0
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
ee0a438
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
f48446a
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
1688e5a
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
adea9db
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
fbb251c
fix(json2): parse underflowing reals on macOS
iamthehimansh Oct 22, 2026
0c74e5e
test(relinker): guard the macOS load-command reserve against codesign
iamthehimansh Oct 22, 2026
7679b59
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
7a8dfb6
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
a036c56
fix(agc): keep the GPU mutex alive through exit on macOS
iamthehimansh Oct 22, 2026
f3bc025
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
51a06b1
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
4f53e21
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
71c3aae
fix(libkernel): report a stream whose peer closed as readable and wri…
iamthehimansh Oct 22, 2026
e5b248f
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
de21548
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
4d3d9ce
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
f762e3a
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
04d942d
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
a99c976
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
91bffd3
fix(libSceNetCtl): read 64-bit interface byte counters on macOS
iamthehimansh Oct 22, 2026
26d6b11
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
10e796f
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 22, 2026
c5fa396
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
91adbf7
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
facca2e
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
dc0c8db
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
bab5f62
fix(libkernel): retry a loopback connect that XNU resets on a full ba…
ycarogabriel-lgtm Oct 19, 2026
8149084
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
4e04687
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
fa063d8
fix(libSceNet): keep sceNetConnect's branches whole so the progress r…
iamthehimansh Oct 23, 2026
ac0b295
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
46673ed
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
1f50696
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
37a9a6b
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
2ae25cc
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
2dbfb0a
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
1aa37a2
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
b2c0e64
fix(libSceNet): count one datagram in sceNetIoctl FIONREAD on macOS
iamthehimansh Oct 23, 2026
ae64abc
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
f07439e
fix(libkernel): append positioned writes on an O_APPEND file on macOS
iamthehimansh Oct 23, 2026
0d54f83
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
771424a
fix(libkernel): keep the whole dlopen failure message on macOS
iamthehimansh Oct 23, 2026
52813c8
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
b3bce15
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
837e708
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
c2401b6
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
5546b23
fix(libc): raise invalid from fmodf's NaN cases on macOS
iamthehimansh Oct 23, 2026
bb3a634
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
83463c6
test(agc): run only the copied heap mirror checks on macOS without sp…
iamthehimansh Oct 23, 2026
e1b9724
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
f910b36
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
7af0130
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
6ee81b9
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
564e005
Merge remote-tracking branch 'origin/main' into feat/macos-port
iamthehimansh Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,10 @@ set(LIBUSB_INSTALL_TARGETS OFF CACHE BOOL "" FORCE)
set(LIBUSB_BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(LIBUSB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(LIBUSB_ENABLE_UDEV OFF CACHE BOOL "" FORCE)
if(APPLE)
# Newer SDKs declare pipe2 as macOS 27+, so on older systems the weak symbol is null and libusb_init crashes; use pipe+fcntl.
set(HAVE_PIPE2 "" CACHE INTERNAL "")
endif()
add_subdirectory(3rdparty/libusb-cmake EXCLUDE_FROM_ALL)
set_target_properties(usb-1.0 PROPERTIES POSITION_INDEPENDENT_CODE ON)

Expand Down
9 changes: 9 additions & 0 deletions core/libs/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ function(configure_windows_unwind target)
COMMAND "${CMAKE_OBJCOPY}" --rename-section .eh_frame=.ehfram --rename-section .eh_fram=.ehfram "$<TARGET_FILE:${target}>"
VERBATIM
)
elseif(APPLE)
# The guest unwinder (prx/libc/src/exception/Unwind.cpp) reads __eh_frame, but Apple clang emits compact
# unwind and ld64 keeps only __unwind_info, so a guest throw could not step out of these images' frames.
target_compile_options(${target} PRIVATE -femit-dwarf-unwind=always)
target_link_options(${target} PRIVATE LINKER:-no_compact_unwind)
endif()
endfunction()

Expand Down Expand Up @@ -310,6 +315,10 @@ if(BUILD_TESTING)
target_link_options(patched_libraries_tests PRIVATE -static -static-libgcc -static-libstdc++)
endif()
add_test(NAME patched_libraries COMMAND patched_libraries_tests ${PATCHED_DIR})
if(APPLE)
# The first run after a rebuild waits for Rosetta to translate every patched library (minutes under a parallel suite); later runs take seconds.
set_tests_properties(patched_libraries PROPERTIES TIMEOUT 900)
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
add_library(host_libstdcxx_exception_module SHARED tests/HostLibstdcxxExceptionModule.cpp)
target_link_libraries(host_libstdcxx_exception_module PRIVATE ${PATCHED_DIR}/libc.prx)
Expand Down
31 changes: 29 additions & 2 deletions core/libs/nid/tests/test_dynamic_strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,32 @@
DT_RPATH = 15
DT_RUNPATH = 29
SHT_DYNAMIC = 6
MH_MAGIC_64 = 0xFEEDFACF
LC_LOAD_DYLIB = 0x0C
LC_RPATH = 0x8000001C


def load_command_strings(image):
# macOS builds the fixture as Mach-O: LC_LOAD_DYLIB and LC_RPATH hold what DT_NEEDED and DT_RUNPATH hold in ELF.
commands, = struct.unpack_from("<I", image, 0x10)
entries = []
position = 0x20
for _ in range(commands):
command, size = struct.unpack_from("<II", image, position)
if command in (LC_LOAD_DYLIB, LC_RPATH):
offset, = struct.unpack_from("<I", image, position + 8)
assert offset < size, (command, offset, size)
start = position + offset
end = image.index(0, start)
assert end < position + size, (command, start, end)
entries.append((DT_NEEDED if command == LC_LOAD_DYLIB else DT_RUNPATH, image[start:end].decode()))
position += size
return entries


def dynamic_strings(image):
if struct.unpack_from("<I", image, 0)[0] == MH_MAGIC_64:
return load_command_strings(image)
shoff, = struct.unpack_from("<Q", image, 0x28)
shentsize, shnum = struct.unpack_from("<HH", image, 0x3A)
sections = [struct.unpack_from("<IIQQQQIIQQ", image, shoff + index * shentsize) for index in range(shnum)]
Expand All @@ -30,11 +53,15 @@ def dynamic_strings(image):


def main():
entries = dynamic_strings(Path(sys.argv[1]).read_bytes())
image = Path(sys.argv[1]).read_bytes()
entries = dynamic_strings(image)
runpaths = [value for tag, value in entries if tag in (DT_RPATH, DT_RUNPATH)]
assert runpaths == ["$ORIGIN"], entries
needed = [value for tag, value in entries if tag == DT_NEEDED]
assert needed and all(re.fullmatch(r"[\w.+-]+\.so(\.\d+)*", name) for name in needed), entries
if struct.unpack_from("<I", image, 0)[0] == MH_MAGIC_64:
assert needed and all(re.fullmatch(r"(/[\w.+-]+)+\.dylib", name) for name in needed), entries
else:
assert needed and all(re.fullmatch(r"[\w.+-]+\.so(\.\d+)*", name) for name in needed), entries
print("NID patcher dynamic string tests passed")


Expand Down
8 changes: 8 additions & 0 deletions core/libs/prx/libSceAgc/tests/StaticBuffer.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#include "prx/libSceAgc/Misc/include/StaticBuffer.hpp"
#include "prx/libc/include/GuestArena.hpp"
#ifdef __APPLE__
#include "prx/libSceAgcDriver/Execution/include/Driver/DriverMemory.hpp"
#endif

#include <array>
#include <cstdint>
Expand All @@ -9,7 +12,12 @@

namespace {

#ifdef __APPLE__
// macOS owns the console's 0xfe0040000; the driver keeps its block lower in the guest range (DriverMemory.hpp).
constexpr std::uintptr_t StaticTable = AgcDriver::DriverDetail::RetargetPs5DriverMemory(0xfe0040000ull) + GuestArena::GuestAddressOffset;
#else
constexpr std::uintptr_t StaticTable = 0xfe0040000ull + GuestArena::GuestAddressOffset;
#endif
constexpr int InvalidStaticBuffer = static_cast<int>(0x8a6c000bu);

void check(bool condition, const char* message) {
Expand Down
5 changes: 3 additions & 2 deletions core/libs/prx/libSceAgcDriver/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,8 @@ if(BUILD_TESTING)
if(WIN32)
set_tests_properties(agc_thread_priority PROPERTIES ENVIRONMENT_MODIFICATION
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libc>")
else()
elseif(NOT APPLE)
# The refusal is provoked by pointing rtkit's D-Bus at nothing; macOS has no rtkit to refuse.
foreach(mode rt high)
add_test(NAME agc_thread_priority_refused_${mode} COMMAND agc_thread_priority_tests refused)
set_tests_properties(agc_thread_priority_refused_${mode} PROPERTIES ENVIRONMENT
Expand Down Expand Up @@ -2885,7 +2886,7 @@ if(BUILD_TESTING)
set_tests_properties(agc_driver_pm4_failure agc_driver_pm4_failure_inline agc_descriptor_pool_reset_failure agc_descriptor_cache agc_driver_address_space_teardown PROPERTIES ENVIRONMENT_MODIFICATION
"PATH=path_list_prepend:$<TARGET_FILE_DIR:libc>")
endif()
if(NOT WIN32)
if(NOT WIN32 AND NOT APPLE)
add_test(NAME agc_driver_pm4_priority_refused COMMAND agc_driver_pm4_tests priority-refused)
set_tests_properties(agc_driver_pm4_priority_refused PROPERTIES ENVIRONMENT
"ANYPS5_NO_SHADER_CACHE=1;APS5_THREAD_PRIORITY=high;DBUS_SYSTEM_BUS_ADDRESS=unix:path=/nonexistent/aps5-no-rtkit" SKIP_RETURN_CODE 77)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#ifndef CORE_LIBS_PRX_LIBSCEAGCDRIVER_EXECUTION_INCLUDE_DRIVER_DRIVERMEMORY_HPP
#define CORE_LIBS_PRX_LIBSCEAGCDRIVER_EXECUTION_INCLUDE_DRIVER_DRIVERMEMORY_HPP

#ifdef __APPLE__

#include <cstdint>

namespace AgcDriver::DriverDetail {

// The AGC driver's own guest block (the FS table, its routine table and routine; Lifecycle.cpp) is at
// 0xfe0000000 on the console. macOS itself owns 0xfc0000000-0x1000000000 with maximum protection none, so on macOS
// the block sits lower in the same system-reserved guest range, and guest shaders that build an address inside the
// console block are retargeted to it (ShaderRegistry.cpp).
constexpr std::uint64_t Ps5DriverMemoryBase = 0xfe0000000ull;
constexpr std::uint64_t MacOsDriverMemoryBase = 0xee0000000ull;
constexpr std::uint64_t DriverMemorySpan = 2u << 20u;

constexpr std::uint64_t RetargetPs5DriverMemory(std::uint64_t address) {
return address >= Ps5DriverMemoryBase && address - Ps5DriverMemoryBase < DriverMemorySpan ? address - Ps5DriverMemoryBase + MacOsDriverMemoryBase : address;
}

}

#endif

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
namespace AgcDriver {

inline bool SubgroupControlBarrierUsable(VkDriverId driver) {
#ifdef __APPLE__
// MoltenVK lowers a subgroup-scope control barrier to threadgroup_barrier, which waves skipping a branch never meet.
if (driver == VK_DRIVER_ID_MOLTENVK) return false;
#endif
return driver != VK_DRIVER_ID_AMD_PROPRIETARY;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,12 @@ std::shared_ptr<DrawDecode> Driver::decodeDraw(const QueueState& queue, const Su
Graphics::NormalizeUnusedViewportDepth(product->state, product->pixel);
Graphics::ApplyDepthRemap(context, product->state);
product->pixel.targetExportPacking = Graphics::ExportPackings(product->state);
#ifdef __APPLE__
// Graphics::DecodeState marks unsigned integer targets fed by 32-bit exports; their pixel shader output becomes uint4.
for (const auto& color : product->state.colors) {
if (color.metalUintOutput && color.exportIndex < product->pixel.metalTargetOutputMode.size()) product->pixel.metalTargetOutputMode[color.exportIndex] = 7u;
}
#endif
product->pixel.dualSourceBlend = product->state.dualSourceBlend;
product->pixel.reversedBlend = product->state.reversedBlend;
product->pixel.alphaToCoverage = product->state.alphaToCoverage;
Expand Down
32 changes: 32 additions & 0 deletions core/libs/prx/libSceAgcDriver/Execution/src/Driver/Lifecycle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@
#include <pthread.h>
#include <sys/mman.h>
#endif
#ifdef __APPLE__
#include "prx/libSceAgcDriver/Execution/include/Driver/DriverMemory.hpp"
#include <mach/mach.h>
#include <mach/mach_vm.h>
#endif

namespace AgcDriver::DriverDetail {

Expand All @@ -53,9 +58,15 @@ void PrintFailure(std::exception_ptr error) {
std::fflush(stderr);
}

#ifdef __APPLE__
constexpr std::uint64_t DriverMemoryAddress = MacOsDriverMemoryBase;
constexpr std::size_t DriverMemoryBytes = DriverMemorySpan;
constexpr std::uint64_t FsTableAddress = RetargetPs5DriverMemory(0xfe0040000ull);
#else
constexpr std::uint64_t DriverMemoryAddress = 0xfe0000000ull + GuestArena::GuestAddressOffset;
constexpr std::size_t DriverMemoryBytes = 2u << 20u;
constexpr std::uint64_t FsTableAddress = DriverMemoryAddress + 0x40000ull;
#endif
constexpr std::uint64_t FsTableSlotBytes = 16u;
constexpr std::uint64_t FsTableSlots = 6u;
constexpr std::uint64_t FsRoutineRecords = 8u;
Expand All @@ -72,6 +83,21 @@ void MapDriverMemory() {
#ifdef _WIN32
mapped = reinterpret_cast<void*>(DriverMemoryAddress);
GuestArena::GuestArenaCommit_nid_postfix(mapped, DriverMemoryBytes, PAGE_READWRITE, DriverMemoryBytes);
#elif defined(__APPLE__)
// The block is in the guest arena's system-reserved range. When the arena holds it as an inaccessible
// reservation, only that reservation is replaced; otherwise the range must be free, and a hint the kernel honours
// exactly stands in for MAP_FIXED_NOREPLACE, which macOS lacks.
mach_vm_address_t region = DriverMemoryAddress;
mach_vm_size_t regionBytes = 0;
vm_region_basic_info_data_64_t info{};
mach_msg_type_number_t count = VM_REGION_BASIC_INFO_COUNT_64;
mach_port_t object = MACH_PORT_NULL;
const bool reservation = mach_vm_region(mach_task_self(), &region, &regionBytes, VM_REGION_BASIC_INFO_64, reinterpret_cast<vm_region_info_t>(&info), &count, &object) == KERN_SUCCESS &&
region <= DriverMemoryAddress && DriverMemoryAddress + DriverMemoryBytes <= region + regionBytes && info.protection == VM_PROT_NONE &&
(info.max_protection & (VM_PROT_READ | VM_PROT_WRITE)) == (VM_PROT_READ | VM_PROT_WRITE);
mapped = mmap(reinterpret_cast<void*>(DriverMemoryAddress), DriverMemoryBytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | (reservation ? MAP_FIXED : 0), -1, 0);
if (mapped == MAP_FAILED) throw std::system_error(errno, std::generic_category(), "map the AGC driver memory");
if (!reservation && reinterpret_cast<std::uint64_t>(mapped) != DriverMemoryAddress) munmap(mapped, DriverMemoryBytes);
#else
mapped = mmap(reinterpret_cast<void*>(DriverMemoryAddress), DriverMemoryBytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED_NOREPLACE, -1, 0);
if (mapped == MAP_FAILED) throw std::system_error(errno, std::generic_category(), "map the AGC driver memory");
Expand Down Expand Up @@ -105,6 +131,11 @@ bool StackHoldsImport() {
std::uintptr_t low = 0;
std::uintptr_t high = 0;
Bounds() {
#ifdef __APPLE__
const auto self = pthread_self();
high = reinterpret_cast<std::uintptr_t>(pthread_get_stackaddr_np(self));
low = high - pthread_get_stacksize_np(self);
#else
pthread_attr_t attributes;
if (pthread_getattr_np(pthread_self(), &attributes) != 0) return;
void* base = nullptr;
Expand All @@ -114,6 +145,7 @@ bool StackHoldsImport() {
high = low + size;
}
pthread_attr_destroy(&attributes);
#endif
}
};
thread_local const Bounds bounds;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
#include "prx/libSceAgcDriver/Execution/include/PerformanceTimer.hpp"
#include "prx/libSceAgcDriver/Execution/include/ProfileOutput.hpp"
#include "prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp"
#ifdef __APPLE__
#include "prx/libSceAgcDriver/Execution/include/Driver/DriverMemory.hpp"
#endif
#include "prx/libSceAgcDriver/Execution/include/Driver/Draw/DrawPipeline.hpp"
#include "prx/libSceAgcDriver/Execution/include/Driver/Shaders/ShaderRegistry.hpp"
#include "prx/libSceAgcDriver/Graphics/include/PipelineLibrary.hpp"
Expand Down Expand Up @@ -1004,6 +1007,22 @@ std::vector<ShaderRecompiler::TableCallee> ReadTableCallees(const ShaderRecompil
for (const auto target : targets) callees.push_back({target, ReadUserDataCallee(target, call.linkRegister)});
return callees;
}
#ifdef __APPLE__

// Rewrites one s_mov_b32 that builds half of a driver-block pointer: its literal word, or its inline integer.
void RetargetPointerMove(std::vector<std::uint32_t>& code, std::uint32_t programCounter, std::uint32_t value) {
const auto word = programCounter / 4u;
if (word >= code.size()) throw std::logic_error("a retargeted driver-memory pointer move is outside the linked code");
const auto source = code[word] & 0xffu;
if (source == 0xffu && word + 1u < code.size()) {
code[word + 1u] = value;
} else if (source >= 0x80u && source <= 0xc0u && value <= 64u) {
code[word] = (code[word] & ~0xffu) | (0x80u + value);
} else {
throw std::runtime_error("a driver-memory pointer move at program counter " + hexText(programCounter) + " cannot hold its macOS address " + hexText(value));
}
}
#endif

ShaderRecompiler::LinkedCalls LinkUserDataCallees(const ShaderRecompiler::RecompileRequest& request) {
if (request.shader.stage != ShaderRecompiler::ShaderStage::Compute) return {};
Expand All @@ -1012,7 +1031,22 @@ ShaderRecompiler::LinkedCalls LinkUserDataCallees(const ShaderRecompiler::Recomp
const auto program = ShaderRecompiler::RdnaInstructionDecoder{}.Decode(code);
const ShaderRecompiler::SwappcInfo swappc{false, request.context.userDataBaseRegister, static_cast<std::uint32_t>(request.context.userData.size()), request.context.waveSize};
const auto calls = ShaderRecompiler::FindUserDataCalls(program, swappc);
#ifdef __APPLE__
// The driver block is not at its console address on macOS (DriverMemory.hpp): a table pointer the shader builds
// inside it is moved, both for the callee lookup here and in the code the GPU runs.
auto tableCalls = ShaderRecompiler::FindTableCalls(program, swappc);
std::vector<std::pair<std::uint32_t, std::uint32_t>> pointerMoves;
for (auto& call : tableCalls) {
if (!call.constantPointer) continue;
const auto moved = RetargetPs5DriverMemory(*call.constantPointer);
if (moved == *call.constantPointer) continue;
if (static_cast<std::uint32_t>(moved) != static_cast<std::uint32_t>(*call.constantPointer)) pointerMoves.push_back({call.pointerLowWriter, static_cast<std::uint32_t>(moved)});
pointerMoves.push_back({call.pointerHighWriter, static_cast<std::uint32_t>(moved >> 32u)});
call.constantPointer = moved;
}
#else
const auto tableCalls = ShaderRecompiler::FindTableCalls(program, swappc);
#endif
if (calls.empty() && tableCalls.empty()) return {};
std::vector<std::vector<std::uint32_t>> callees;
for (const auto& call : calls) {
Expand All @@ -1033,7 +1067,13 @@ ShaderRecompiler::LinkedCalls LinkUserDataCallees(const ShaderRecompiler::Recomp
throw std::runtime_error("AGC driver: compute shader " + hexText(request.shader.codeAddress) + " calls a target loaded from a table at program counter " + hexText(call.programCounter) + ", but " + error.what());
}
}
#ifdef __APPLE__
auto linked = ShaderRecompiler::LinkCalls(program, calls, callees, tableCalls, tableCallees);
for (const auto& [programCounter, value] : pointerMoves) RetargetPointerMove(linked.code, programCounter, value);
return linked;
#else
return ShaderRecompiler::LinkCalls(program, calls, callees, tableCalls, tableCallees);
#endif
}

}
Expand Down Expand Up @@ -1489,8 +1529,14 @@ class RegistrationPreparePool {

private:
static std::mutex& Lifecycle() {
#ifdef __APPLE__
// Driver shutdown can run after static destruction; Darwin fails to lock a destroyed mutex, so keep it alive.
static auto* lifecycle = new std::mutex;
return *lifecycle;
#else
static std::mutex lifecycle;
return lifecycle;
#endif
}

static bool& Closing() {
Expand Down
Loading
Loading