From bb67fd4ead6bc6c856712da0d4655bf0833af7f3 Mon Sep 17 00:00:00 2001 From: b00t0x <2325377+b00t0x@users.noreply.github.com> Date: Sat, 7 Nov 2026 00:03:28 +0900 Subject: [PATCH 1/4] Prepare Graphics 0.4.1 with updated common Compat provider --- CHANGELOG.md | 8 ++++++++ docs/SOURCES.md | 4 ++-- docs/payload-provenance.json | 10 ++++++---- .../Contents/Info.plist | 4 ++-- .../Contents/MacOS/AppleIntelTGLCompat | Bin 29408 -> 29456 bytes tools/policy.json | 2 +- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be8ab84..df883a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.4.1 + +Use the latest [WhateverXe](https://github.com/b00t0x/WhateverXe/releases) release with this update. + +### Fixed + +- Update the common graphics compatibility component to recognize compatible macOS kernel updates without requiring an exact build string. + ## 0.4.0 Use the latest [WhateverXe](https://github.com/b00t0x/WhateverXe/releases) release with this update. diff --git a/docs/SOURCES.md b/docs/SOURCES.md index d0e7bb0..b5a5e14 100644 --- a/docs/SOURCES.md +++ b/docs/SOURCES.md @@ -9,8 +9,8 @@ for this repository. Source and its shared headers remain in [WhateverXe](https://github.com/b00t0x/WhateverXe). All supported macOS versions -use one RELEASE build of AppleIntelTGLCompat 0.7.0 from WEX commit -[`2aa06ad`](https://github.com/b00t0x/WhateverXe/tree/2aa06ad013e08f7b79779d446cdd12084b4e3dfd/AppleIntelTGLCompat). +use one RELEASE build of AppleIntelTGLCompat 0.8.0 from WEX commit +[`20b8ae5`](https://github.com/b00t0x/WhateverXe/tree/20b8ae5c705e12a54d418df03d3665efc874dac6/AppleIntelTGLCompat). Build that checkout with `python3 tools/build.py --release`, then sign the resulting kext with the Mod chain before importing the complete bundle into `payloads/Common/Library/Extensions/`. The package contains no per-OS provider diff --git a/docs/payload-provenance.json b/docs/payload-provenance.json index 9f1abbd..016fa2c 100644 --- a/docs/payload-provenance.json +++ b/docs/payload-provenance.json @@ -2,18 +2,20 @@ "provider_source_repository": "https://github.com/b00t0x/WhateverXe", "providers": { "Common": { - "source_commit": "2aa06ad013e08f7b79779d446cdd12084b4e3dfd", + "source_commit": "20b8ae5c705e12a54d418df03d3665efc874dac6", "source_file": "AppleIntelTGLCompat/AppleIntelTGLCompat.cpp", "source_file_sha256": "2a5f7622cbd35e222d1d0b1e3f78f421bd0a9f691fec51a7b18d3725ab61c445", - "version": "0.7.0", + "version": "0.8.0", "configuration": "RELEASE", "build_command": "python3 tools/build.py --release", - "sha256": "ea7d24b13c9554b361f82c714c4acc124cfa1f7155669e1b8663a1827630f1d0", + "sha256": "5f83bc96c73aed10c60b03a6593f6eb3abc04efc672e9564be907d876ef4fba7", "policy_source_file": "AppleIntelTGLCompat/GraphicsPolicy.plist", "policy_source_sha256": "dd9555491052208445abbd9daa96dd0a9dd4e5e71b1e6a14355224199cfb17eb", "compatible_version": "0.5.0", "device_table_source_file": "WhateverXe/kern_xelp_devices.hpp", - "device_table_source_sha256": "7df149488e4a51066ca9953817c7e3529bc4a630e81442da83c116297d5dfad9" + "device_table_source_sha256": "7df149488e4a51066ca9953817c7e3529bc4a630e81442da83c116297d5dfad9", + "os_selector_source_file": "WhateverXe/kern_xelp_os.hpp", + "os_selector_source_sha256": "0a1e96c40f8f4dc3627f64c4699e73a79b041f59c845d2c17649375cbd65371b" } }, "amfipass_sha256": "71f41de42e355d2a83e6f093ef34a5b24d0a9c9a9085830b2317f1b874f56250", diff --git a/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/Info.plist b/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/Info.plist index 882ae65..e6dc144 100644 --- a/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/Info.plist +++ b/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/Info.plist @@ -11,9 +11,9 @@ CFBundlePackageType KEXT CFBundleShortVersionString - 0.7.0 + 0.8.0 CFBundleVersion - 0.7.0 + 0.8.0 IOKitPersonalities WEX Display13 graphics policy diff --git a/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/MacOS/AppleIntelTGLCompat b/payloads/Common/Library/Extensions/AppleIntelTGLCompat.kext/Contents/MacOS/AppleIntelTGLCompat index 485c2b2010554395c6c78168efd3369b6632a4a0..1233e138573ef9e76ea7e1e3b7e66ea37b99df5d 100755 GIT binary patch delta 3964 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 delta 4435 zcma)93s@6Z7M>ZxQ(zEzTObOepoE!(gpjsKB+>AYhax`kg$VUkpsb^*S~3!%0*#>4 zcD3zx(e0|ZT~{`36d#p`MRENoqU}msE%rfOt-30LKs9?Nll04G$=99lyE*6l=bZnX zJNM4yPJKVx_ajjbYk(obbt8u5hZy#|U*=)I_h(-5 z-skrRsKvjo(w?7|zpP!Qf8+Y?T5o0o{sp$)m$`$#g?acIXrE_JnB3c-@$<#7zqlEg zfIif>*$qMD)g2ktrccWhJmhwx8>0)_k9oT>{NTOV7FXuuU_vuLTUF~U3V=x&-A=Pp zsOrS4rl1Hy4yyDoi#-se`Vt;q1r7vJ;6`4OLfS@6z>T>Csxoy{^-y=rDA@xzUiA$` zsq|`8rT1UKrgjy>C9viv%Y>AV%G8D%6I7-P$yI~YJqm;B(jx10%@*XW3J4m z+YtO#0~=SGbB&g+f3x9@1k{IV-ur(Os9=a5c7-0lCR=VpuShk!FmA9g^ss_@M61yP z>StPwl~et++G#V@N2_^jsjq0Ya|v~gR=e=2E?VuHPFy|Q)g(kM+s%5 z)#Hk&Q6H+NYe_ORLBKj(U?;`>v&S(CP`L6iuuB zN^spKlgUJ@{rR|V18BH0J3yb-K@Sh&l}o`^Xo_)3$YQAK^$w zp0gzheFaBh0tz4kj$3AjRKK|cY~Z*8wn|@yDap>%>XsBeuUZ3aCWYQ}jvShjTe~_6 zajE)bRE`_fs6xLGcsu0uh)4OQWZERdbv59Z!(E2yYFNq(Ezq2a-sXbB?n_3gCo1hz z9DlPAd;mU-!*z=|_0c?BHz&( zg@AFKI=lkcA)Gq02-iJ%W+oez;<`JW`ilhDeaorOAod!kJ_oduQ%y7Caowk&Ylnj< zckPG^Ue#c>f^pqpRslr28XL4WQ8Q2(L@AglL9mA z+|m+YE#V8}`2-;oOJpQrWsSFCl@dZiAdDvjq!d^a1!I$D2|3bSs>s|bDdrPW8FVX@ zT1myWqzQ=iN7 z)Ic1fFH5Lt#_i)0eK`E&2?E^9rWDv+`kbICaAWPvp z0%jBY2)Y4n7H15U0Zng z@raO}OMY5*Mm|&2wCMC`b|i7@pGUkVBr!LgE(wQzSg`MtQ-Li%eEwx4wRm91&u=Sr zQ^TX5yxu%ht4_^n_;yp|TcMeIh6Z=?im;oft}czrxwhcMr-#=&l1{Tp-Cx%8*n8cH*Uq-rNDk!3dc;N^ zi+;hWVEI&WOKj>vk9n^SmTjq=H+oee-`3avb=9&retZz}_MdkRumA3z^Yq&O@1+&a z)n1pkdu&@gbIJ5~W^RkDZRiVsdS;+$e6cd7U7T|GmiXt&7|k!PK3NgzO^KiX68i5v zql@W!xctz>-9K*8-KPHNIuy70Y+cq@66J_+U#oy5r=&-BBpD~9oSaxU(R6Bkf^ki6 zt_RaFcq#a=Uaya4d|3TT#hVo`Wg9#)NneeSNDxWM#3e+Wi+jut)s7)A)SX98=J990 zt9df>d`073!B&^mT7Ka@>G}ExGnUe)KN1FqX6M}?@+}F4tKBg&lL&Qjp6>00h4B1( zo#YO^lZ zc@0pzb7CuVm)EyQg^ydAD=Y8L70#DtQo^<3xv##WNJuOxU09r+xv8K;smLgO*~8ua zrMT4v8w-+H&8n1%<0ZN2rA717X9-i{h1s*?GqYb$m1ZWY7BKFsWE$S%oZa`7-%#NP z^0&Jgt~{DaMEX6te{FB$Yqw9gqoVCY6~!HI-3XK%OY0xVn{ux6*=QGb^I%b1{TA8% z;xB|ZdwrkvlzcNUvukk)_rc<6LUqw=GxZPd&EaO<-<;bmz_Xln8@_A>0=;7$w z%S!we2bJGnzI!z%e#80i<|h_urq9~;PRahwO8%btg+BGiqQ(tX=D*O>hCD3yJ9npX zb;kbZQN7K&(^;a;vI}1a2XszWd~{K%=b5aOuRd;Fq<*ib^blEkWSL99+s?q!bD2psLm5X4739gTEbRS9 NhMdB4IO7xP{U7X_o>l+= diff --git a/tools/policy.json b/tools/policy.json index dd68fd8..7660cbf 100644 --- a/tools/policy.json +++ b/tools/policy.json @@ -1,5 +1,5 @@ { - "package_version": "0.4.0", + "package_version": "0.4.1", "systems": [ { "name": "Big Sur", From 9d0144900a1cdfb7c8879aa9b981e11616923a47 Mon Sep 17 00:00:00 2001 From: b00t0x <2325377+b00t0x@users.noreply.github.com> Date: Sat, 7 Nov 2026 01:41:13 +0900 Subject: [PATCH 2/4] Preserve released client matching and Compat dependency contracts --- tools/fixtures/released_clients.json | 645 +++++++++++++++++++++++++++ tools/kext_dependencies.py | 2 + tools/released_contracts.py | 71 +++ tools/test.py | 2 + tools/test_autopkg.py | 2 + tools/test_dependencies.py | 38 ++ 6 files changed, 760 insertions(+) create mode 100644 tools/fixtures/released_clients.json create mode 100644 tools/released_contracts.py diff --git a/tools/fixtures/released_clients.json b/tools/fixtures/released_clients.json new file mode 100644 index 0000000..2e78947 --- /dev/null +++ b/tools/fixtures/released_clients.json @@ -0,0 +1,645 @@ +{ + "schema": 1, + "releases": [ + { + "tag": "v0.1.0", + "commit": "444b348e7ee757ded480ff46d781d5efb0f5fb38", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a788086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a788086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + }, + { + "tag": "v0.2.0", + "commit": "e83018e76c0f39f0f870ff38dcc304fb357c3485", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + }, + { + "tag": "v0.3.0", + "commit": "7aa1a8340c862f764d42a5d7f5d08e9a66b6eab4", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + }, + { + "tag": "v0.3.1", + "commit": "59e4ca9e474781dba80a5b5f60fba1767d0a9c2a", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + }, + { + "tag": "v0.3.2", + "commit": "b4d3889206a609e29e991a833d8d91c2d110a661", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b38086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + }, + { + "tag": "v0.4.0", + "commit": "656eff430df8ff8e55131656324678cd5480347a", + "contracts": [ + { + "identifier": "com.apple.driver.AppleIntelTGLGraphics", + "requires_provider": null, + "matches": [ + "0x46268086", + "0x46288086", + "0x462a8086", + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a08086", + "0x46a18086", + "0x46a28086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b08086", + "0x46b18086", + "0x46b28086", + "0x46b38086", + "0x46c08086", + "0x46c18086", + "0x46c28086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a598086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0x9ac08086", + "0x9ac98086", + "0x9ad98086", + "0x9af88086", + "0xa7208086", + "0xa7218086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + }, + { + "identifier": "com.apple.driver.AppleIntelTGLGraphicsFramebuffer", + "requires_provider": "0.5.0", + "matches": [ + "0x46268086", + "0x46288086", + "0x462a8086", + "0x46808086", + "0x46828086", + "0x46888086", + "0x468a8086", + "0x468b8086", + "0x46908086", + "0x46928086", + "0x46938086", + "0x46a08086", + "0x46a18086", + "0x46a28086", + "0x46a38086", + "0x46a68086", + "0x46a88086", + "0x46aa8086", + "0x46b08086", + "0x46b18086", + "0x46b28086", + "0x46b38086", + "0x46c08086", + "0x46c18086", + "0x46c28086", + "0x46c38086", + "0x46d08086", + "0x46d18086", + "0x46d28086", + "0x46d38086", + "0x46d48086", + "0x9a408086", + "0x9a498086", + "0x9a598086", + "0x9a608086", + "0x9a688086", + "0x9a708086", + "0x9a788086", + "0x9ac08086", + "0x9ac98086", + "0x9ad98086", + "0x9af88086", + "0xa7208086", + "0xa7218086", + "0xa7808086", + "0xa7818086", + "0xa7828086", + "0xa7838086", + "0xa7888086", + "0xa7898086", + "0xa78a8086", + "0xa78b8086", + "0xa7a08086", + "0xa7a18086", + "0xa7a88086", + "0xa7a98086", + "0xa7aa8086", + "0xa7ab8086", + "0xa7ac8086", + "0xa7ad8086" + ], + "components": [ + "Big Sur", + "Monterey", + "Sequoia", + "Sonoma", + "Tahoe", + "Ventura" + ] + } + ] + } + ] +} diff --git a/tools/kext_dependencies.py b/tools/kext_dependencies.py index 7aaf7bd..6694c3f 100644 --- a/tools/kext_dependencies.py +++ b/tools/kext_dependencies.py @@ -52,8 +52,10 @@ def check_dependencies(plists, label, device_ids=None): def check_payload_sets(payloads, systems, device_ids=None): + from released_contracts import check_released_clients common = list((payloads / 'Common/Library/Extensions').rglob('*.kext/Contents/Info.plist')) for system in systems: clients = list((payloads / system['payload'] / 'Library/Extensions').rglob('*.kext/Contents/Info.plist')) if not check_dependencies(common + clients, system['name'], device_ids): raise ValueError(f"{system['name']}: no bundled kext dependencies checked") + check_released_clients(common + clients, system['payload']) diff --git a/tools/released_contracts.py b/tools/released_contracts.py new file mode 100644 index 0000000..6f08882 --- /dev/null +++ b/tools/released_contracts.py @@ -0,0 +1,71 @@ +"""Retain released client dependency and physical-match contracts. + +The fixture is exported from each release's immutable Git tree. It is not +derived from the current package policy. This checks loading/matching metadata, +not native graphics execution or every mixed-version runtime combination. +""" +import argparse, json, plistlib, subprocess +from functools import lru_cache +from pathlib import Path +from kext_dependencies import version + +ROOT=Path(__file__).resolve().parents[1] +FIXTURE=ROOT/'tools/fixtures/released_clients.json' +PROVIDER='org.b00t0x.AppleIntelTGLCompat' + +def matches(info): + return {value.lower() for p in info.get('IOKitPersonalities',{}).values() + for value in p.get('IOPCIPrimaryMatch','').split()} + +@lru_cache(maxsize=1) +def released(): + data=json.loads(FIXTURE.read_text()) + if data.get('schema')!=1 or not data.get('releases'): + raise ValueError('missing released client contract corpus') + return data['releases'] + +def check_released_clients(plists, component): + current={p['CFBundleIdentifier']:p for path in plists for p in [plistlib.loads(path.read_bytes())]} + provider=current.get(PROVIDER) + if provider is None:raise ValueError(component+': missing released client provider') + for release in released(): + for contract in release['contracts']: + if component not in contract['components']:continue + client=current.get(contract['identifier']) + label=component+' / '+release['tag']+' / '+contract['identifier'] + if client is None:raise ValueError(label+': released client missing') + lost=set(contract['matches'])-matches(client) + if lost:raise ValueError(label+': lost released physical matches '+','.join(sorted(lost))) + requested=contract['requires_provider'] + if requested and not version(provider['OSBundleCompatibleVersion'])<=version(requested)<=version(provider['CFBundleVersion']): + raise ValueError(label+': released provider requirement outside current compatibility interval') + +def export(): + def git(*args):return subprocess.check_output(['git','-C',str(ROOT),*args]) + releases=[] + for tag in git('tag','--sort=version:refname').decode().splitlines(): + commit=git('rev-parse',tag+'^{commit}').decode().strip();groups={} + for name in git('ls-tree','-r','--name-only',commit,'payloads').decode().splitlines(): + if not name.endswith('.kext/Contents/Info.plist'):continue + info=plistlib.loads(git('show',commit+':'+name)) + physical=tuple(sorted(matches(info))) + if not physical:continue + key=(info['CFBundleIdentifier'],info.get('OSBundleLibraries',{}).get(PROVIDER),physical) + groups.setdefault(key,[]).append(name.split('/')[1]) + releases.append({'tag':tag,'commit':commit,'contracts':[ + {'identifier':identifier,'requires_provider':requirement,'matches':list(physical),'components':components} + for (identifier,requirement,physical),components in groups.items()]}) + if not releases:raise ValueError('local release history is required to export the corpus') + FIXTURE.parent.mkdir(exist_ok=True) + FIXTURE.write_text(json.dumps({'schema':1,'releases':releases},indent=2)+'\n') + +if __name__=='__main__': + p=argparse.ArgumentParser(description=__doc__);p.add_argument('--export',action='store_true');args=p.parse_args() + if args.export:export() + else: + policy=json.loads((ROOT/'tools/policy.json').read_text()) + common=list((ROOT/'payloads/Common').rglob('*.kext/Contents/Info.plist')) + for system in policy['systems']: + name=system['payload'] + check_released_clients(common+list((ROOT/'payloads'/name).rglob('*.kext/Contents/Info.plist')),name) + print('PASS released client requirements and physical matches') diff --git a/tools/test.py b/tools/test.py index 8ce8f51..bd84ddd 100644 --- a/tools/test.py +++ b/tools/test.py @@ -9,6 +9,7 @@ import xml.etree.ElementTree as ET from pathlib import Path from kext_dependencies import check_dependencies +from released_contracts import check_released_clients from servicing_policy import check_files, test_rejection parser = argparse.ArgumentParser(description=__doc__) @@ -113,6 +114,7 @@ assert actual.keys() == expected.keys() plists = [p for rel, p in actual.items() if rel.startswith('Library/Extensions/') and rel.endswith('.kext/Contents/Info.plist')] assert check_dependencies(plists, build, manifest['policy']['device_ids']) > 0 + check_released_clients(plists, build) for rel, p in actual.items(): data = p.read_bytes() assert hashlib.sha256(data).hexdigest() == expected[rel]['sha256'], rel diff --git a/tools/test_autopkg.py b/tools/test_autopkg.py index 8a1926b..2cd7b47 100644 --- a/tools/test_autopkg.py +++ b/tools/test_autopkg.py @@ -10,6 +10,7 @@ import tempfile import xml.etree.ElementTree as ET from kext_dependencies import check_dependencies +from released_contracts import check_released_clients from servicing_policy import check_files as check_servicing_files @@ -57,6 +58,7 @@ def check_autopkg(expanded, manifest, boundaries): check_files(actual, manifest['systems'][name]) plists = [p for r, p in actual.items() if r.startswith('Library/Extensions/') and r.endswith('.kext/Contents/Info.plist')] assert check_dependencies(plists, name, policy['device_ids']) > 0 + check_released_clients(plists, name) cases = [(v, name, 'success' if name else 'unsupported') for v, name in boundaries.items()] cases += [('15.8.1', 'Sequoia', failure) for failure in ( diff --git a/tools/test_dependencies.py b/tools/test_dependencies.py index a124218..30175ea 100644 --- a/tools/test_dependencies.py +++ b/tools/test_dependencies.py @@ -9,6 +9,7 @@ from pathlib import Path import build from kext_dependencies import check_dependencies, check_payload_sets +from released_contracts import check_released_clients class DependencyTests(unittest.TestCase): @@ -77,6 +78,43 @@ def test_unknown_or_masked_identity(self): self.check('0x46008086&0xff00ffff') +class ReleasedContractTests(unittest.TestCase): + def check_mutation(self, remove_device=False, raise_floor=False): + # Change current policy and clients together. A self-consistency test + # accepts that pair; frozen released contracts must detect the loss. + devices = json.loads((build.HERE / 'policy.json').read_text())['device_ids'] + if remove_device: + devices = [d for d in devices if d.lower() != '9a49'] + floor = '0.6.0' if raise_floor else '0.5.0' + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + infos = [{'CFBundleIdentifier': 'org.b00t0x.AppleIntelTGLCompat', + 'CFBundleVersion': '0.8.0', 'OSBundleCompatibleVersion': floor}] + for name in ['AppleIntelTGLGraphics', 'AppleIntelTGLGraphicsFramebuffer']: + infos.append({'CFBundleIdentifier': 'com.apple.driver.' + name, + 'IOKitPersonalities': {'GPU': {'IOPCIPrimaryMatch': ' '.join('0x' + d + '8086' for d in devices)}}, + 'OSBundleLibraries': {'org.b00t0x.AppleIntelTGLCompat': floor}}) + paths = [] + for i, info in enumerate(infos): + path = root / f'{i}.plist' + path.write_bytes(plistlib.dumps(info)); paths.append(path) + self.assertGreater(check_dependencies(paths, 'Big Sur', devices), 0) + if remove_device or raise_floor: + with self.assertRaisesRegex(ValueError, 'lost released physical matches|released provider requirement'): + check_released_clients(paths, 'Big Sur') + else: + check_released_clients(paths, 'Big Sur') + + def test_preserved_contracts(self): + self.check_mutation() + + def test_coordinated_device_removal_is_detected(self): + self.check_mutation(remove_device=True) + + def test_coordinated_abi_floor_raise_is_detected(self): + self.check_mutation(raise_floor=True) + + class BuildPreflightTests(unittest.TestCase): def setUp(self): temporary = tempfile.TemporaryDirectory() From 6580e2faf440e6214fa8704f2d6625cf41f061aa Mon Sep 17 00:00:00 2001 From: b00t0x <2325377+b00t0x@users.noreply.github.com> Date: Sat, 7 Nov 2026 02:15:05 +0900 Subject: [PATCH 3/4] test: preserve released native dispatch and GL URB behavior --- README.md | 1 + README_ja.md | 1 + tools/fixtures/released_dispatch.json | 1403 +++++++++++++++++++++++++ tools/native_dispatch.cpp | 92 ++ tools/test.py | 8 + tools/test_released_dispatch.py | 145 +++ 6 files changed, 1650 insertions(+) create mode 100644 tools/fixtures/released_dispatch.json create mode 100644 tools/native_dispatch.cpp create mode 100644 tools/test_released_dispatch.py diff --git a/README.md b/README.md index 14960e3..c0863ce 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ python3 tools/test.py dist/WhateverXe-Graphics-0.4.0.pkg ``` For AutoPkg, add `--autopkg` to the build command and test `dist/autopkg/AutoPkg-Assets.pkg`. +Add `--native-history` to the test command to replay released PCI dispatch and GL URB regressions on the extracted payloads; this requires x86_64 execution, either native or through Rosetta. The builder uses the checked-in signed payloads; it does not fetch Apple originals or require signing keys. [Source and signing information](docs/SOURCES.md) · [Third-party notices](THIRD_PARTY.md) diff --git a/README_ja.md b/README_ja.md index b0796f9..5be0756 100644 --- a/README_ja.md +++ b/README_ja.md @@ -66,6 +66,7 @@ python3 tools/test.py dist/WhateverXe-Graphics-0.4.0.pkg ``` AutoPkgはビルド時に`--autopkg`を追加し、`dist/autopkg/AutoPkg-Assets.pkg`を検査します。 +検査コマンドに`--native-history`を追加すると、展開したpayloadで過去版のPCI dispatchとGL URB補正を再生します。ネイティブまたはRosetta経由のx86_64実行環境が必要です。 Git内の署名済み資材を使用するため、Apple原本の取得や署名鍵は不要です。 [ソース・署名情報](docs/SOURCES.md) · [第三者の権利表記](THIRD_PARTY.md) diff --git a/tools/fixtures/released_dispatch.json b/tools/fixtures/released_dispatch.json new file mode 100644 index 0000000..8e3c74a --- /dev/null +++ b/tools/fixtures/released_dispatch.json @@ -0,0 +1,1403 @@ +{ + "schema": 1, + "releases": { + "v0.1.0": "444b348e7ee757ded480ff46d781d5efb0f5fb38", + "v0.2.0": "e83018e76c0f39f0f870ff38dcc304fb357c3485", + "v0.3.0": "7aa1a8340c862f764d42a5d7f5d08e9a66b6eab4", + "v0.3.1": "59e4ca9e474781dba80a5b5f60fba1767d0a9c2a", + "v0.3.2": "b4d3889206a609e29e991a833d8d91c2d110a661", + "v0.4.0": "656eff430df8ff8e55131656324678cd5480347a" + }, + "admission_sets": [ + [ + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a40", + "9a49", + "9a78" + ], + [ + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a49", + "9a78" + ], + [ + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a40", + "9a49", + "9a60", + "9a68", + "9a70", + "9a78", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b" + ], + [ + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a49", + "9a60", + "9a68", + "9a70", + "9a78", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b" + ], + [ + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46a3", + "46a6", + "46a8", + "46aa", + "46b3", + "46c3", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a40", + "9a49", + "9a60", + "9a68", + "9a70", + "9a78", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b", + "a7a0", + "a7a1", + "a7a8", + "a7a9", + "a7aa", + "a7ab", + "a7ac", + "a7ad" + ], + [ + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46a3", + "46a6", + "46a8", + "46aa", + "46b3", + "46c3", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a49", + "9a60", + "9a68", + "9a70", + "9a78", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b", + "a7a0", + "a7a1", + "a7a8", + "a7a9", + "a7aa", + "a7ab", + "a7ac", + "a7ad" + ], + [ + "4626", + "4628", + "462a", + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46a0", + "46a1", + "46a2", + "46a3", + "46a6", + "46a8", + "46aa", + "46b0", + "46b1", + "46b2", + "46b3", + "46c0", + "46c1", + "46c2", + "46c3", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a40", + "9a49", + "9a59", + "9a60", + "9a68", + "9a70", + "9a78", + "9ac0", + "9ac9", + "9ad9", + "9af8", + "a720", + "a721", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b", + "a7a0", + "a7a1", + "a7a8", + "a7a9", + "a7aa", + "a7ab", + "a7ac", + "a7ad" + ], + [ + "4626", + "4628", + "462a", + "4680", + "4682", + "4688", + "468a", + "468b", + "4690", + "4692", + "4693", + "46a0", + "46a1", + "46a2", + "46a3", + "46a6", + "46a8", + "46aa", + "46b0", + "46b1", + "46b2", + "46b3", + "46c0", + "46c1", + "46c2", + "46c3", + "46d0", + "46d1", + "46d2", + "46d3", + "46d4", + "9a49", + "9a59", + "9a60", + "9a68", + "9a70", + "9a78", + "9ac0", + "9ac9", + "9ad9", + "9af8", + "a720", + "a721", + "a780", + "a781", + "a782", + "a783", + "a788", + "a789", + "a78a", + "a78b", + "a7a0", + "a7a1", + "a7a8", + "a7a9", + "a7aa", + "a7ab", + "a7ac", + "a7ad" + ] + ], + "urb_inputs": [ + [ + "0803078078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + [ + "0803038078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + [ + "0803058078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03036078330000" + ] + ], + "contracts": [ + { + "kind": "GL", + "system": "Common", + "offsets": [ + 1650591, + 1651727, + 1650597 + ], + "urb": { + "0": [ + "0803052078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + "1": [ + "0803020078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + "2": [ + "0803058078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + "3": [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03036078330000" + ] + }, + "sources": [ + { + "tag": "v0.1.0", + "sha256": "a27707cdfe5c5cadb623d2ea14b51e3a0bc714cde9e3b03ce9f792ff0e8d17da" + } + ], + "admission_set": 0 + }, + { + "kind": "VA", + "system": "Big Sur", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "1fda0b4049178b5c91c2db1fd2acd4c9b06bb49c37e72583c263252c43ce3ab5" + } + ], + "admission_set": 1 + }, + { + "kind": "VA", + "system": "Monterey", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "643517de95079559837068f0692ffad89bdc9d3ba242906061f8e9c36ea4d4fe" + } + ], + "admission_set": 1 + }, + { + "kind": "VA", + "system": "Ventura", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "42849edc360ce8785fcb7c88bbfae6d5bfac3e7941777c1a56fbc736201fe6dc" + } + ], + "admission_set": 1 + }, + { + "kind": "VA", + "system": "Sonoma", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "c4b49bb994bf77d695696515e5df0fef1b71b9a423978b90c4b9e96972c13337" + } + ], + "admission_set": 1 + }, + { + "kind": "VA", + "system": "Sequoia", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "6a3825a41dc29f041ef92b6abcf0838768832f8c3a88c6e9c9adbe9857403d4a" + } + ], + "admission_set": 1 + }, + { + "kind": "VA", + "system": "Tahoe", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "9ced9e7ccb262c7dc2fe445029919a955c414c20f585ff326fa2d7a029d4f0ff" + } + ], + "admission_set": 1 + }, + { + "kind": "CL", + "system": "Big Sur", + "offsets": [ + 34975, + 34662, + 34982 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "a86e6daed21d42f6a5f3c80f2f198634b9c9f95132003b9d51a8750998b8f2fc" + } + ], + "admission_set": 0 + }, + { + "kind": "CL", + "system": "Monterey", + "offsets": [ + 38248, + 36872, + 38255 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "fb949904f6fb0b59731fddc76bdfb56e50c9905e74886d9bcc914644d09d504e" + } + ], + "admission_set": 0 + }, + { + "kind": "CL", + "system": "Ventura", + "offsets": [ + 38669, + 37759, + 38676 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "328334cd4c7e4becbef7cb5b1d4767bdee00716304f1c6173ee26d2453461fc0" + } + ], + "admission_set": 0 + }, + { + "kind": "CL", + "system": "Sonoma", + "offsets": [ + 26795, + 25878, + 26802 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "67e7c533c44d84a7ddfc4ca08102c196739895e8c9ffafddc17c5c427ae10df5" + } + ], + "admission_set": 0 + }, + { + "kind": "CL", + "system": "Sequoia", + "offsets": [ + 25876, + 25029, + 25883 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "25499f21ab681a54064c699de16eaa5f6dd78b26c6cbf866a67484d0ac8a0600" + } + ], + "admission_set": 0 + }, + { + "kind": "CL", + "system": "Tahoe", + "offsets": [ + 25455, + 24593, + 25462 + ], + "sources": [ + { + "tag": "v0.1.0", + "sha256": "33cdf73786922bb6e19ff98d96b9b58f160f72c5f46ab09f50b0474206628d7e" + } + ], + "admission_set": 0 + }, + { + "kind": "GL", + "system": "Common", + "offsets": [ + 1650591, + 1651727, + 1650597 + ], + "urb": { + "0": [ + "0803052078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + "1": [ + "0803020078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + "2": [ + "0803058078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + "3": [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03036078330000" + ] + }, + "sources": [ + { + "tag": "v0.2.0", + "sha256": "f57b9bc678b7e23f9ed6ffeb5bf1547a5d6eee888d581aa7260a27f2fff4ca3b" + } + ], + "admission_set": 2 + }, + { + "kind": "VA", + "system": "Big Sur", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "8111b29a894db07ac9de4b4b013b0f73e122c69cc18b394a6b8bc72667251ade" + } + ], + "admission_set": 3 + }, + { + "kind": "VA", + "system": "Monterey", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "f7b223cba8857411dc5787d97739a49b348956624f54ef9ad119e9bba9f63965" + } + ], + "admission_set": 3 + }, + { + "kind": "VA", + "system": "Ventura", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "301ae82cda5c491422d96721332526deec576efe9fd608aaedf15be6be0f6179" + } + ], + "admission_set": 3 + }, + { + "kind": "VA", + "system": "Sonoma", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "e89ca7f9886cb335cdfd2937da2a5b645f928f84752ba65ef280734280456ff9" + } + ], + "admission_set": 3 + }, + { + "kind": "VA", + "system": "Sequoia", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "7485af024822fdc3ad47cec7b71a055c1cffe92a7d0c0391f143f51b57ee904f" + } + ], + "admission_set": 3 + }, + { + "kind": "VA", + "system": "Tahoe", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "2e27de2f72b0098e08b5e608da3a10810ef8cfd2b8a9d50944286d704d082f19" + } + ], + "admission_set": 3 + }, + { + "kind": "CL", + "system": "Big Sur", + "offsets": [ + 34975, + 34662, + 34982 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "d9fdea8dce50a471f803046f78a0d73b4692aa32ffc2171f6cea549f09efbcaa" + } + ], + "admission_set": 2 + }, + { + "kind": "CL", + "system": "Monterey", + "offsets": [ + 38248, + 36872, + 38255 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "04c39b1662f171ccba815966fb11184af6e2dff0fd38ff71f2eff60276619edd" + } + ], + "admission_set": 2 + }, + { + "kind": "CL", + "system": "Ventura", + "offsets": [ + 38669, + 37759, + 38676 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "4912d9a2347a0ce8f45c0fd25e072c4c5cec6a38df5910b98e832479a2659c58" + } + ], + "admission_set": 2 + }, + { + "kind": "CL", + "system": "Sonoma", + "offsets": [ + 26795, + 25878, + 26802 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "5ce9ecee0ab92997a001aec8db06daecf682838c785425bbdc1cb384ff268fd4" + } + ], + "admission_set": 2 + }, + { + "kind": "CL", + "system": "Sequoia", + "offsets": [ + 25876, + 25029, + 25883 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "abbe3d2d0a601708a98c9dda4431a67403def5436ce831608bdbb151226178de" + } + ], + "admission_set": 2 + }, + { + "kind": "CL", + "system": "Tahoe", + "offsets": [ + 25455, + 24593, + 25462 + ], + "sources": [ + { + "tag": "v0.2.0", + "sha256": "70dbf7fca174d2b68417e0a4c18396408e2348705da8b4f61f4025c2c1e88f87" + } + ], + "admission_set": 2 + }, + { + "kind": "GL", + "system": "Common", + "offsets": [ + 1650591, + 1651727, + 1650597 + ], + "urb": { + "0": [ + "0803052078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + "1": [ + "0803020078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + "2": [ + "0803058078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + "3": [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03036078330000" + ] + }, + "sources": [ + { + "tag": "v0.3.0", + "sha256": "a1d8cc1863a2813ab54f5db84c197a9a1c3bc80796d2402563b6aa3e159da5f6" + }, + { + "tag": "v0.3.1", + "sha256": "a1d8cc1863a2813ab54f5db84c197a9a1c3bc80796d2402563b6aa3e159da5f6" + } + ], + "admission_set": 4 + }, + { + "kind": "VA", + "system": "Big Sur", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "9120758fd22a6c009647e919221e2bd1635215ba8eb2c7104dd7af3e79931803" + }, + { + "tag": "v0.3.1", + "sha256": "9120758fd22a6c009647e919221e2bd1635215ba8eb2c7104dd7af3e79931803" + }, + { + "tag": "v0.3.2", + "sha256": "9120758fd22a6c009647e919221e2bd1635215ba8eb2c7104dd7af3e79931803" + } + ], + "admission_set": 5 + }, + { + "kind": "VA", + "system": "Monterey", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "5460ca60a59567c1f4e31b7c48f26e9438b9110e82aaec98e5a4d1d90270f4b1" + }, + { + "tag": "v0.3.1", + "sha256": "5460ca60a59567c1f4e31b7c48f26e9438b9110e82aaec98e5a4d1d90270f4b1" + }, + { + "tag": "v0.3.2", + "sha256": "5460ca60a59567c1f4e31b7c48f26e9438b9110e82aaec98e5a4d1d90270f4b1" + } + ], + "admission_set": 5 + }, + { + "kind": "VA", + "system": "Ventura", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "08fe84f361c5f5070d5142e1193c940801d7943d1987b56729351f1b69fe83c4" + }, + { + "tag": "v0.3.1", + "sha256": "08fe84f361c5f5070d5142e1193c940801d7943d1987b56729351f1b69fe83c4" + }, + { + "tag": "v0.3.2", + "sha256": "08fe84f361c5f5070d5142e1193c940801d7943d1987b56729351f1b69fe83c4" + } + ], + "admission_set": 5 + }, + { + "kind": "VA", + "system": "Sonoma", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "01403035e1c7737b63d059d4367a2d74f37d240a461f28883c6113108cd4338d" + }, + { + "tag": "v0.3.1", + "sha256": "01403035e1c7737b63d059d4367a2d74f37d240a461f28883c6113108cd4338d" + }, + { + "tag": "v0.3.2", + "sha256": "01403035e1c7737b63d059d4367a2d74f37d240a461f28883c6113108cd4338d" + } + ], + "admission_set": 5 + }, + { + "kind": "VA", + "system": "Sequoia", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "58edb45d28a133cecc42b5e1ea2e3e25f3501bc89481c256b2edfb7ee463738b" + }, + { + "tag": "v0.3.1", + "sha256": "58edb45d28a133cecc42b5e1ea2e3e25f3501bc89481c256b2edfb7ee463738b" + }, + { + "tag": "v0.3.2", + "sha256": "58edb45d28a133cecc42b5e1ea2e3e25f3501bc89481c256b2edfb7ee463738b" + } + ], + "admission_set": 5 + }, + { + "kind": "VA", + "system": "Tahoe", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "b41dfb6f3efeb4279d8b29f66cc5dec240942f10397cd2d06c51f34a37ee48a3" + }, + { + "tag": "v0.3.1", + "sha256": "b41dfb6f3efeb4279d8b29f66cc5dec240942f10397cd2d06c51f34a37ee48a3" + }, + { + "tag": "v0.3.2", + "sha256": "b41dfb6f3efeb4279d8b29f66cc5dec240942f10397cd2d06c51f34a37ee48a3" + } + ], + "admission_set": 5 + }, + { + "kind": "CL", + "system": "Big Sur", + "offsets": [ + 34975, + 34662, + 34982 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "74b07b1b6ceacf75c37857518e7362ec93f266dc1190b7dba424e96d8a6382ef" + }, + { + "tag": "v0.3.1", + "sha256": "74b07b1b6ceacf75c37857518e7362ec93f266dc1190b7dba424e96d8a6382ef" + }, + { + "tag": "v0.3.2", + "sha256": "74b07b1b6ceacf75c37857518e7362ec93f266dc1190b7dba424e96d8a6382ef" + } + ], + "admission_set": 4 + }, + { + "kind": "CL", + "system": "Monterey", + "offsets": [ + 38248, + 36872, + 38255 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "0ce8ae385844304e5dbfbb3edc91eb95b5a026c45290052521099802a71d51fc" + }, + { + "tag": "v0.3.1", + "sha256": "0ce8ae385844304e5dbfbb3edc91eb95b5a026c45290052521099802a71d51fc" + }, + { + "tag": "v0.3.2", + "sha256": "0ce8ae385844304e5dbfbb3edc91eb95b5a026c45290052521099802a71d51fc" + } + ], + "admission_set": 4 + }, + { + "kind": "CL", + "system": "Ventura", + "offsets": [ + 38669, + 37759, + 38676 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "042bef027e5a18ed27b686ad8caa2799b3e269dfda8f24e2106c3749b510067d" + }, + { + "tag": "v0.3.1", + "sha256": "042bef027e5a18ed27b686ad8caa2799b3e269dfda8f24e2106c3749b510067d" + }, + { + "tag": "v0.3.2", + "sha256": "042bef027e5a18ed27b686ad8caa2799b3e269dfda8f24e2106c3749b510067d" + } + ], + "admission_set": 4 + }, + { + "kind": "CL", + "system": "Sonoma", + "offsets": [ + 26795, + 25878, + 26802 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "e3254097ec5341459828a86eaa4b26166fb67b9bd82a9ad4eca45fc1c0397be7" + }, + { + "tag": "v0.3.1", + "sha256": "e3254097ec5341459828a86eaa4b26166fb67b9bd82a9ad4eca45fc1c0397be7" + }, + { + "tag": "v0.3.2", + "sha256": "e3254097ec5341459828a86eaa4b26166fb67b9bd82a9ad4eca45fc1c0397be7" + } + ], + "admission_set": 4 + }, + { + "kind": "CL", + "system": "Sequoia", + "offsets": [ + 25876, + 25029, + 25883 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "5cc9cde75992ce3bc38741f50a64a1483308078713b273d040a74753d680fea8" + }, + { + "tag": "v0.3.1", + "sha256": "5cc9cde75992ce3bc38741f50a64a1483308078713b273d040a74753d680fea8" + }, + { + "tag": "v0.3.2", + "sha256": "5cc9cde75992ce3bc38741f50a64a1483308078713b273d040a74753d680fea8" + } + ], + "admission_set": 4 + }, + { + "kind": "CL", + "system": "Tahoe", + "offsets": [ + 25455, + 24593, + 25462 + ], + "sources": [ + { + "tag": "v0.3.0", + "sha256": "e9ca7997a8c0b505ffe73244347a55d941c4f4c6ac3e00696c157d8794f005ca" + }, + { + "tag": "v0.3.1", + "sha256": "e9ca7997a8c0b505ffe73244347a55d941c4f4c6ac3e00696c157d8794f005ca" + }, + { + "tag": "v0.3.2", + "sha256": "e9ca7997a8c0b505ffe73244347a55d941c4f4c6ac3e00696c157d8794f005ca" + } + ], + "admission_set": 4 + }, + { + "kind": "GL", + "system": "Common", + "offsets": [ + 1650591, + 1651727, + 1650597 + ], + "urb": { + "0": [ + "0803052078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + "1": [ + "0803020078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + "2": [ + "0803052078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + "3": [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03030078330000" + ] + }, + "sources": [ + { + "tag": "v0.3.2", + "sha256": "404b85e5b547fd9486bf8f10e8f55244708bff06d21d0a3091a0e159c74e63bb" + } + ], + "admission_set": 4 + }, + { + "kind": "GL", + "system": "Common", + "offsets": [ + 1650591, + 1651727, + 1650597 + ], + "urb": { + "0": [ + "0803052078300000", + "8000000078310000", + "8000000078320000", + "8000000078330000" + ], + "1": [ + "0803020078300000", + "4000000078310000", + "4000000078320000", + "4000000078330000" + ], + "2": [ + "0803052078300000", + "6000000078310000", + "6000000078320000", + "6000000078330000" + ], + "3": [ + "0800088078300000", + "2a00000078310000", + "2a00000078320000", + "2a03030078330000" + ] + }, + "sources": [ + { + "tag": "v0.4.0", + "sha256": "b0791039b77df44784b63ba36d37c266055092acbcc3b0c29ad1f9a5e8fb6008" + } + ], + "admission_set": 6 + }, + { + "kind": "VA", + "system": "Big Sur", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "5cbddcb193e9780fc3d482023ca0c3cbf5d80fc4c03e8146e13f15560cbdbc0e" + } + ], + "admission_set": 7 + }, + { + "kind": "VA", + "system": "Monterey", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "447574f51c0e2c2ffc1022b556effac81bb2325b5c5d6b2b53c483d5c790a049" + } + ], + "admission_set": 7 + }, + { + "kind": "VA", + "system": "Ventura", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "e69a79553a3f91e51359ff0e0f7850c91959c90461c158ea4c73e8207909717a" + } + ], + "admission_set": 7 + }, + { + "kind": "VA", + "system": "Sonoma", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "cff913f6bc113217ebeccba602ba4a54d8434919a6490aa24986c23afc9592c2" + } + ], + "admission_set": 7 + }, + { + "kind": "VA", + "system": "Sequoia", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "1c860fc8aee1ad690f7bf7551132bae631f5bd563ccd8204acbdb2a949ac5dc9" + } + ], + "admission_set": 7 + }, + { + "kind": "VA", + "system": "Tahoe", + "offsets": [ + 77974, + 78017, + 77980 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "a972cdb7ddd56bcf38c3ab71e874b73efc34bc683d30e49f0a1a1919625a726d" + } + ], + "admission_set": 7 + }, + { + "kind": "CL", + "system": "Big Sur", + "offsets": [ + 34975, + 34662, + 34982 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "6a4b9aaa34742ac8033b4ecce305825de01647e928464a3501c0b54455371347" + } + ], + "admission_set": 6 + }, + { + "kind": "CL", + "system": "Monterey", + "offsets": [ + 38248, + 36872, + 38255 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "2f39439620f8ef81fd5dda7277e669f72b8597bc3ad41004fbea6a569ae92d7d" + } + ], + "admission_set": 6 + }, + { + "kind": "CL", + "system": "Ventura", + "offsets": [ + 38669, + 37759, + 38676 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "912322c44c269db8a93db7a194e97215550b210f3a389f43a83765db66d72a48" + } + ], + "admission_set": 6 + }, + { + "kind": "CL", + "system": "Sonoma", + "offsets": [ + 26795, + 25878, + 26802 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "8d06b528b454b6cb90295541650a7b3cd6be28a3ee54b2526588773b3df6fdcc" + } + ], + "admission_set": 6 + }, + { + "kind": "CL", + "system": "Sequoia", + "offsets": [ + 25876, + 25029, + 25883 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "02da3606ae5419abe474eee1a348c1f19e6baa568d3851342554ca18367e4ae0" + } + ], + "admission_set": 6 + }, + { + "kind": "CL", + "system": "Tahoe", + "offsets": [ + 25455, + 24593, + 25462 + ], + "sources": [ + { + "tag": "v0.4.0", + "sha256": "88cdf5bbc18137dc2f03e414aa3ca3a6d3e91e0cacdc162582d04de91808f9eb" + } + ], + "admission_set": 6 + } + ] +} diff --git a/tools/native_dispatch.cpp b/tools/native_dispatch.cpp new file mode 100644 index 0000000..f8eb622 --- /dev/null +++ b/tools/native_dispatch.cpp @@ -0,0 +1,92 @@ +// Execute private copies of released dispatch/URB code, never load the driver. +// Only native continuation blocks become markers. Enter through the real site. +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern "C" unsigned runGL(void *, unsigned), runVA(void *, void *), runCL(void *, unsigned); +extern "C" uint64_t runURB(void *, void *, unsigned); +asm(".text\n" + ".globl _runGL\n_runGL:\nmov %rdi,%rax\nmov %esi,%edx\ncall *%rax\nret\n" + ".globl _runVA\n_runVA:\npush %rbx\nmov %rsi,%rbx\ncall *%rdi\npop %rbx\nret\n" + ".globl _runCL\n_runCL:\npush %rbp\nmov %rsp,%rbp\n" + "push %rbx\npush %r12\npush %r13\npush %r14\nsub $0x200,%rsp\n" + "mov %rdi,%r11\nmov %esi,%eax\nmov %esi,-0x1e8(%rbp)\n" + "lea -0x1f0(%rbp),%r13\nmov %r13,%r14\ncall *%r11\n" + "add $0x200,%rsp\npop %r14\npop %r13\npop %r12\npop %rbx\npop %rbp\nret\n" + ".globl _runURB\n_runURB:\npush %rbx\npush %r15\nmov %edx,%ebx\n" + "lea -0x3978(%rsi),%r15\nmovabs $0x123456789abcdef0,%rdx\ncall *%rdi\n" + "mov %rdx,%rax\npop %r15\npop %rbx\nret\n"); + +static uint8_t *load(const char *path, size_t &size) { + std::ifstream f(path, std::ios::binary); + std::vector data((std::istreambuf_iterator(f)), {}); + assert(data.size() >= 32); + uint32_t magic, cpu; + memcpy(&magic, data.data(), 4); memcpy(&cpu, data.data()+4, 4); + assert(magic == 0xfeedfacf && cpu == 0x1000007); + size = data.size(); + auto p = static_cast(mmap(nullptr, size, 7, MAP_PRIVATE|MAP_ANON, -1, 0)); + assert(p != MAP_FAILED); memcpy(p, data.data(), size); return p; +} + +static void marker(uint8_t *p, size_t size, unsigned offset, unsigned value) { + assert(offset + 6 <= size); + const uint8_t code[] = {0xb8, uint8_t(value), 0, 0, 0, 0xc3}; + memcpy(p+offset, code, sizeof(code)); +} + +static unsigned number(const char *s) { + char *end; auto n = strtoul(s, &end, 0); assert(*s && !*end && n <= UINT32_MAX); + return unsigned(n); +} + +int main(int argc, char **argv) { + assert(argc == 7); + size_t size; auto p = load(argv[2], size); + if (!strcmp(argv[1], "urb")) { + assert(size > 0xa0c2); + p[0xa0c2] = 0xc3; + uint64_t words[4]; + for (unsigned i=0; i<4; ++i) { + char *end; words[i]=strtoull(argv[3+i], &end, 16); assert(*argv[3+i] && !*end); + } + for (unsigned bank=0; bank<3; ++bank) { + std::vector state(4*0xa70+64, 0xa5); + for (unsigned j=0; j<4; ++j) memcpy(state.data()+j*0xa70+bank*8, words+j, 8); + auto untouched = state; + assert(runURB(p+0xa0b8, state.data(), bank) == 0x123456789abcdef0ULL); + printf("%u", bank); + for (unsigned j=0; j<4; ++j) { + uint64_t word; memcpy(&word, state.data()+j*0xa70+bank*8, 8); + printf(" %016llx", (unsigned long long)word); + memcpy(untouched.data()+j*0xa70+bank*8, &word, 8); + } + puts(""); assert(state == untouched); // Every other byte must survive. + } + } else { + assert(argc == 7); + unsigned entry=number(argv[3]), yes=number(argv[4]), no=number(argv[5]); + unsigned vendor=number(argv[6]); assert(entry object(0xa880); bool first=true; + for (unsigned device=0; device<65536; ++device) { + const unsigned identity=(device<<16)|vendor; + memcpy(object.data()+0xa878, &identity, 4); + unsigned result; + if (!strcmp(argv[1], "GL")) result=runGL(p+entry, device); + else if (!strcmp(argv[1], "VA")) result=runVA(p+entry, object.data()); + else { assert(!strcmp(argv[1], "CL")); result=runCL(p+entry, identity); } + assert(result<=1); + if (result) { printf("%s%04x", first?"":" ", device); first=false; } + } + puts(""); + } + assert(munmap(p,size)==0); +} diff --git a/tools/test.py b/tools/test.py index bd84ddd..928cb04 100644 --- a/tools/test.py +++ b/tools/test.py @@ -15,6 +15,8 @@ parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('package', type=Path) parser.add_argument('--rcodesign', default='rcodesign') +parser.add_argument('--native-history', action='store_true', + help='execute historical x86_64 dispatch/URB regressions; requires clang and native x86_64 or Rosetta') args = parser.parse_args() test_rejection() subprocess.run([sys.executable, str(Path(__file__).with_name('test_uninstall.py'))], check=True) @@ -47,6 +49,9 @@ assert args.package.name == 'AutoPkg-Assets.pkg' from test_autopkg import check_autopkg check_autopkg(root, manifest, cases) + if args.native_history: + from test_released_dispatch import check_payloads + check_payloads(root / 'AutoGraphics.pkg/Scripts/Assets') action = subprocess.check_output(['installer', '-query', 'RestartAction', '-pkg', str(args.package.resolve()), '-target', '/'], text=True) assert 'RequireRestart' in action, action print('PASS: universal AutoPkg resources, OS selection, script execution and native restart') @@ -121,5 +126,8 @@ assert len(data) == expected[rel]['size'] assert p.stat().st_mode & 0o777 == expected[rel]['mode'], rel total += len(actual) + if args.native_history: + from test_released_dispatch import check_payloads + check_payloads(root, package_layout=True) subprocess.run(['bash', '-n', str(Path(__file__).resolve().parents[1] / 'uninstall.sh')], check=True) print(f'PASS: {len(cases)} version boundaries, {len(payload_choices)} standard payloads/BOMs, {total} reconstructed files, script syntax; autopkg={autopkg}') diff --git a/tools/test_released_dispatch.py b/tools/test_released_dispatch.py new file mode 100644 index 0000000..7627bcc --- /dev/null +++ b/tools/test_released_dispatch.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +"""Preserve released native PCI routes and GL URB corrections, without a GPU. + +The frozen corpus comes from each immutable release binary, independently of +current device tables and patch emitters. Native continuation blocks are markers; +this does not exercise shader compilation, codecs, a GPU or physical output. +Requires macOS, clang and x86_64 execution (native or Rosetta). +""" +import argparse +import hashlib +import json +import subprocess +import tempfile +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +FIXTURE = ROOT / 'tools/fixtures/released_dispatch.json' +SYSTEMS = ('Big Sur', 'Monterey', 'Ventura', 'Sonoma', 'Sequoia', 'Tahoe') +# Entry and continuation offsets describe the fixed bundled donors, not host OS. +CL = {'Big Sur': (0x889f,0x8766,0x88a6), 'Monterey': (0x9568,0x9008,0x956f), + 'Ventura': (0x970d,0x937f,0x9714), 'Sonoma': (0x68ab,0x6516,0x68b2), + 'Sequoia': (0x6514,0x61c5,0x651b), 'Tahoe': (0x636f,0x6011,0x6376)} +ROUTES = [('GL', 'Common', (0x192f9f,0x19340f,0x192fa5))] + [ + (kind, system, (0x13096,0x130c1,0x1309c) if kind=='VA' else CL[system]) + for kind in ('VA','CL') for system in SYSTEMS] + + +def relative(kind): + if kind == 'CL': return 'Library/GPUBundles/XeOpenCL/libCLVMIGCPlugin.dylib' + return f'Library/GPUBundles/AppleIntelTGLGraphics{kind}Driver.bundle/Contents/MacOS/AppleIntelTGLGraphics{kind}Driver' + + +def build(directory): + executable = directory / 'native-dispatch' + subprocess.run(['clang++', '-std=c++17', '-arch', 'x86_64', '-O1', + str(ROOT/'tools/native_dispatch.cpp'), '-o', str(executable)], check=True) + return executable + + +def routes(executable, path, kind, offsets, vendor=0x8086): + output = subprocess.check_output([str(executable), kind, str(path), + *(hex(n) for n in offsets), hex(vendor)], text=True) + return output.split() + + +def urb(executable, path, inputs): + result = {} + for shape, quartet in enumerate(inputs): + output=subprocess.check_output([str(executable),'urb',str(path),*quartet],text=True) + for line in output.splitlines(): + bank, *words=line.split();assert len(words)==4 + result[f'{shape}:{bank}']=words + assert len(result)==len(inputs)*3 + return result + + +def export(executable, directory, destination): + # Use the same immutable release identities as the client-history corpus. + releases=json.loads((ROOT/'tools/fixtures/released_clients.json').read_text())['releases'] + groups={} + for release in releases: + tag, commit = release['tag'], release['commit'] + for kind, system, offsets in ROUTES: + data=subprocess.check_output(['git','-C',str(ROOT),'show',commit+':payloads/'+system+'/'+relative(kind)]) + path=directory/'input';path.write_bytes(data) + admitted=routes(executable,path,kind,offsets) + assert admitted, (tag,kind,system,'empty historical route') + if kind!='GL': + for vendor in (0,0x1234,0xffff): + assert not routes(executable,path,kind,offsets,vendor), (tag,kind,system,vendor) + corrections=None + if kind=='GL': + observed=urb(executable,path,SHAPES) + corrections={str(shape):observed[f'{shape}:0'] for shape in range(4)} + assert all(observed[f'{shape}:{bank}']==corrections[str(shape)] + for shape in range(4) for bank in range(3)) + key=(kind,system,tuple(admitted),json.dumps(corrections,sort_keys=True)) + record=groups.setdefault(key,dict(kind=kind,system=system,offsets=list(offsets), + admitted=admitted,**({'urb':corrections} if corrections else {}),sources=[])) + record['sources'].append(dict(tag=tag,sha256=hashlib.sha256(data).hexdigest())) + print('CAPTURE',tag,flush=True) + inventories=[] + for contract in groups.values(): + admitted=contract.pop('admitted') + if admitted not in inventories:inventories.append(admitted) + contract['admission_set']=inventories.index(admitted) + destination.write_text(json.dumps({'schema':1, + 'releases':{r['tag']:r['commit'] for r in releases}, + 'admission_sets':inventories,'urb_inputs':SHAPES, + 'contracts':list(groups.values())},indent=2)+'\n') + + +def check(executable, fixture, payloads, package_layout=False): + corpus=json.loads(fixture.read_text());assert corpus['schema']==1 and corpus['contracts'] + cache={};count=0 + for contract in corpus['contracts']: + kind, system=contract['kind'],contract['system'] + path=payloads/(system.replace(' ','')+'.pkg')/'Payload'/relative(kind) if package_layout else payloads/system/relative(kind) + key=(kind,system) + if key not in cache: + admitted=routes(executable,path,kind,contract['offsets']) + if kind!='GL': + for vendor in (0,0x1234,0xffff): + assert not routes(executable,path,kind,contract['offsets'],vendor), (kind,system,'foreign vendor route',vendor) + cache[key]=(set(admitted),urb(executable,path,corpus['urb_inputs']) if kind=='GL' else None) + admitted, corrections=cache[key] + label='/'.join(source['tag'] for source in contract['sources'])+' / '+kind+' / '+system + lost=set(corpus['admission_sets'][contract['admission_set']])-admitted + assert not lost, (label,'lost released native routes',sorted(lost)) + if corrections: + # Old passthrough layouts may gain a new correction. Preserve every + # correction actually made by an old release, including peer words. + for shape, expected in contract['urb'].items(): + original=corpus['urb_inputs'][int(shape)] + if expected!=original: + for bank in range(3): + case=f'{shape}:{bank}' + assert corrections[case]==expected,(label,'lost URB correction',case,expected,corrections[case]) + count+=len(contract['sources']) + print(f'PASS: {count} released binary contracts; {len(cache)} actual-entry dispatches, all 16-bit IDs, vendor rejection and historical URB corrections') + + +SHAPES = [ + ['0803078078300000','8000000078310000','8000000078320000','8000000078330000'], + ['0803038078300000','4000000078310000','4000000078320000','4000000078330000'], + ['0803058078300000','6000000078310000','6000000078320000','6000000078330000'], + ['0800088078300000','2a00000078310000','2a00000078320000','2a03036078330000'], +] + + +def check_payloads(payloads, package_layout=False): + with tempfile.TemporaryDirectory(prefix='xe-native-history-') as tmp: + check(build(Path(tmp)),FIXTURE,payloads,package_layout) + +if __name__=='__main__': + p=argparse.ArgumentParser(description=__doc__) + p.add_argument('--payloads',type=Path,default=ROOT/'payloads') + p.add_argument('--fixture',type=Path,default=FIXTURE) + p.add_argument('--package-layout',action='store_true') + p.add_argument('--export',action='store_true',help='explicitly regenerate the corpus from immutable release commits') + args=p.parse_args() + with tempfile.TemporaryDirectory(prefix='xe-native-history-') as tmp: + directory=Path(tmp);executable=build(directory) + if args.export:export(executable,directory,args.fixture) + else:check(executable,args.fixture,args.payloads,args.package_layout) From ebf3759a879f24b67af4fa3f18be50f93e9ed05d Mon Sep 17 00:00:00 2001 From: b00t0x <2325377+b00t0x@users.noreply.github.com> Date: Sat, 7 Nov 2026 23:30:05 +0900 Subject: [PATCH 4/4] Use the current package version in build examples --- README.md | 2 +- README_ja.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c0863ce..bf9650d 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Requires macOS, Xcode command-line tools and Python 3.10+. Verification also nee ```sh python3 tools/build.py -python3 tools/test.py dist/WhateverXe-Graphics-0.4.0.pkg +python3 tools/test.py dist/WhateverXe-Graphics-0.4.1.pkg ``` For AutoPkg, add `--autopkg` to the build command and test `dist/autopkg/AutoPkg-Assets.pkg`. diff --git a/README_ja.md b/README_ja.md index 5be0756..0b5eb9a 100644 --- a/README_ja.md +++ b/README_ja.md @@ -62,7 +62,7 @@ macOS、Xcode Command Line Tools、Python 3.10以上が必要です。検査に ```sh python3 tools/build.py -python3 tools/test.py dist/WhateverXe-Graphics-0.4.0.pkg +python3 tools/test.py dist/WhateverXe-Graphics-0.4.1.pkg ``` AutoPkgはビルド時に`--autopkg`を追加し、`dist/autopkg/AutoPkg-Assets.pkg`を検査します。