Skip to content
This repository has been archived by the owner on Jul 20, 2018. It is now read-only.

Commit

Permalink
Added a workaround for iTunes crashes in 10.13 (shikigva=16)
Browse files Browse the repository at this point in the history
  • Loading branch information
vit9696 committed Nov 5, 2017
1 parent da9bffc commit d28761c
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 7 deletions.
3 changes: 3 additions & 0 deletions Changelog.md
@@ -1,6 +1,9 @@
Shiki Changelog
==================

#### v2.1.1
- Added a workaround for iTunes crashes in 10.13 (`shikigva=16`)

#### v2.1.0
- Requires Lilu 1.2.0 or higher
- Added hardware video decoding fix for SKL/KBL & NVIDIA (`shikigva=4`)
Expand Down
31 changes: 31 additions & 0 deletions Resources/Patches.plist
Expand Up @@ -241,6 +241,31 @@
</dict>
</array>
</dict>
<dict>
<key>Path</key>
<string>/System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox</string>
<key>Patches</key>
<array>
<dict>
<key>Comment</key>
<string>AppleGVA.framework -&gt; AppleGVA.donotwork</string>
<key>CPU</key>
<string>CPU_TYPE_X86_64</string>
<key>Find</key>
<data>QXBwbGVHVkEuZnJhbWV3b3Jr</data>
<key>Replace</key>
<data>QXBwbGVHVkEuZG9ub3R3b3Jr</data>
<key>Skip</key>
<integer>0</integer>
<key>Count</key>
<integer>1</integer>
<key>Section</key>
<string>KILLGVA</string>
<key>Segment</key>
<string>TextCstring</string>
</dict>
</array>
</dict>
</array>
<key>Processes</key>
<array>
Expand All @@ -250,6 +275,12 @@
<key>Section</key>
<string>NDRMI</string>
</dict>
<dict>
<key>Path</key>
<string>/Applications/iTunes.app/Contents/MacOS/iTunes</string>
<key>Section</key>
<string>KILLGVA</string>
</dict>
<dict>
<key>Path</key>
<string>/Applications/QuickTime Player.app/Contents/MacOS/QuickTime Player</string>
Expand Down
4 changes: 2 additions & 2 deletions Shiki.xcodeproj/project.pbxproj
Expand Up @@ -486,7 +486,7 @@
MODULE_NAME = as.vit9696.Shiki;
MODULE_START = "$(PRODUCT_NAME)_kern_start";
MODULE_STOP = "$(PRODUCT_NAME)_kern_stop";
MODULE_VERSION = 2.1.0;
MODULE_VERSION = 2.1.1;
OTHER_CFLAGS = (
"-mmmx",
"-msse",
Expand Down Expand Up @@ -530,7 +530,7 @@
MODULE_NAME = as.vit9696.Shiki;
MODULE_START = "$(PRODUCT_NAME)_kern_start";
MODULE_STOP = "$(PRODUCT_NAME)_kern_stop";
MODULE_VERSION = 2.1.0;
MODULE_VERSION = 2.1.1;
OTHER_CFLAGS = (
"-mmmx",
"-msse",
Expand Down
11 changes: 9 additions & 2 deletions Shiki/kern_resources.cpp
Expand Up @@ -49,22 +49,29 @@ static UserPatcher::BinaryModPatch patches2[] {
{ CPU_TYPE_X86_64, patchBuf16, patchBuf17, 7, 0, 2, UserPatcher::FileSegment::SegmentTextCstring, SectionBGRA },
{ CPU_TYPE_X86_64, patchBuf18, patchBuf19, 1, 0, 1, UserPatcher::FileSegment::SegmentTextText, SectionNVDA },
};
alignas(8) static const uint8_t patchBuf20[] { 0x41, 0x70, 0x70, 0x6C, 0x65, 0x47, 0x56, 0x41, 0x2E, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x77, 0x6F, 0x72, 0x6B, };
alignas(8) static const uint8_t patchBuf21[] { 0x41, 0x70, 0x70, 0x6C, 0x65, 0x47, 0x56, 0x41, 0x2E, 0x64, 0x6F, 0x6E, 0x6F, 0x74, 0x77, 0x6F, 0x72, 0x6B, };
static UserPatcher::BinaryModPatch patches3[] {
{ CPU_TYPE_X86_64, patchBuf20, patchBuf21, 18, 0, 1, UserPatcher::FileSegment::SegmentTextCstring, SectionKILLGVA },
};

// Mod section

UserPatcher::BinaryModInfo ADDPR(binaryMod)[] {
{ "/System/Library/Frameworks/VideoToolbox.framework/Versions/A/VideoToolbox", patches0, 6 },
{ "/System/Library/PrivateFrameworks/CoreFP.framework/Versions/A/CoreFP", patches1, 1 },
{ "/System/Library/PrivateFrameworks/AppleGVA.framework/Versions/A/AppleGVA", patches2, 3 },
{ "/System/Library/Frameworks/MediaToolbox.framework/Versions/A/MediaToolbox", patches3, 1 },
};

const size_t ADDPR(binaryModSize) {3};
const size_t ADDPR(binaryModSize) {4};

// Process list
using PF = UserPatcher::ProcInfo::ProcFlags;

UserPatcher::ProcInfo ADDPR(procInfo)[] {
{ "/Applications/iTunes.app/Contents/MacOS/iTunes", 46, SectionNDRMI, PF::MatchExact },
{ "/Applications/iTunes.app/Contents/MacOS/iTunes", 46, SectionKILLGVA, PF::MatchExact },
{ "/Applications/QuickTime Player.app/Contents/MacOS/QuickTime Player", 66, SectionNDRMI, PF::MatchExact },
{ "/Applications/Safari.app/Contents/MacOS/Safari", 46, SectionNSTREAM, PF::MatchExact },
{ "/System/Library/Frameworks/WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.xpc/Contents/MacOS/com.apple.WebKit.WebContent", 141, SectionNSTREAM, PF::MatchExact },
Expand All @@ -83,4 +90,4 @@ UserPatcher::ProcInfo ADDPR(procInfo)[] {
{ "/VDADecoderChecker", 18, SectionNVDA, PF::MatchSuffix },
};

const size_t ADDPR(procInfoSize) {17};
const size_t ADDPR(procInfoSize) {18};
1 change: 1 addition & 0 deletions Shiki/kern_resources.hpp
Expand Up @@ -28,4 +28,5 @@ enum : uint32_t {
SectionOFFLINE = 4,
SectionBGRA = 5,
SectionNVDA = 6,
SectionKILLGVA = 7,
};
12 changes: 9 additions & 3 deletions Shiki/kern_start.cpp
Expand Up @@ -15,7 +15,8 @@ enum ShikiGVAPatches {
ForceOnlineRenderer = 1,
AllowNonBGRA = 2,
ForceCompatibleRenderer = 4,
VDAExecutableWhitelist = 8
VDAExecutableWhitelist = 8,
KillAppleGVA = 16
};

// 32 bytes should be reasonable for a safe comparison
Expand Down Expand Up @@ -162,21 +163,23 @@ static void shikiStart() {
bool leaveBGRASupport = true;
bool leaveNvidiaUnlock = true;
bool leaveExecutableWhiteList = true;
bool leaveAppleGVAAlone = true;

if (PE_parse_boot_argn("shikigva", tmp, sizeof(tmp))) {
leaveForceAccelRenderer = !(tmp[0] & ForceOnlineRenderer);
leaveBGRASupport = !(tmp[0] & AllowNonBGRA);
leaveNvidiaUnlock = !(tmp[0] & ForceCompatibleRenderer);
leaveExecutableWhiteList = !(tmp[0] & VDAExecutableWhitelist);
leaveAppleGVAAlone = !(tmp[0] & KillAppleGVA);
}

if (PE_parse_boot_argn("-shikigva", tmp, sizeof(tmp))) {
SYSLOG("shiki", "-shikigva is deprecated use shikigva=1 instead");
leaveForceAccelRenderer = false;
}

DBGLOG("shiki", "stream %d accel %d bgra %d nvidia %d/%d", patchStreamVideo, !leaveForceAccelRenderer,
!leaveBGRASupport, !leaveNvidiaUnlock, !leaveExecutableWhiteList);
DBGLOG("shiki", "stream %d accel %d bgra %d nvidia %d/%d gva %d", patchStreamVideo, !leaveForceAccelRenderer,
!leaveBGRASupport, !leaveNvidiaUnlock, !leaveExecutableWhiteList, !leaveAppleGVAAlone);

// Disable unused SectionFSTREAM
if (!patchStreamVideo)
Expand All @@ -187,6 +190,9 @@ static void shikiStart() {

if (leaveBGRASupport)
disableSection(SectionBGRA);

if (leaveAppleGVAAlone)
disableSection(SectionKILLGVA);

for (size_t i = 0; i < ADDPR(binaryModSize); i++) {
auto patches = ADDPR(binaryMod)[i].patches;
Expand Down

0 comments on commit d28761c

Please sign in to comment.