├── .gitignore ├── AzulPatcher4600.xcodeproj └── project.pbxproj ├── LICENSE.txt ├── README.md └── genericPatcher ├── Info.plist ├── kern_patchset.cpp ├── kern_patchset.hpp └── kern_start.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /AzulPatcher4600.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1C748C2D1C21952C0024EED2 /* kern_start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1C748C2C1C21952C0024EED2 /* kern_start.cpp */; }; 11 | A0DB59A71ED4C9A300BE2727 /* kern_patchset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A0DB59A51ED4C9A300BE2727 /* kern_patchset.hpp */; }; 12 | A0DB59A81ED4C9A300BE2727 /* kern_patchset.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0DB59A61ED4C9A300BE2727 /* kern_patchset.cpp */; }; 13 | CE405EC91E49DD9700AA0B3D /* libkmod.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE405EC71E49DD7100AA0B3D /* libkmod.a */; }; 14 | CE405ED91E4A080700AA0B3D /* plugin_start.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CE405ED81E4A080700AA0B3D /* plugin_start.cpp */; }; 15 | /* End PBXBuildFile section */ 16 | 17 | /* Begin PBXCopyFilesBuildPhase section */ 18 | 1C642F521C8F157A006B4C51 /* CopyFiles */ = { 19 | isa = PBXCopyFilesBuildPhase; 20 | buildActionMask = 2147483647; 21 | dstPath = ""; 22 | dstSubfolderSpec = 13; 23 | files = ( 24 | ); 25 | runOnlyForDeploymentPostprocessing = 0; 26 | }; 27 | /* End PBXCopyFilesBuildPhase section */ 28 | 29 | /* Begin PBXFileReference section */ 30 | 1C748C271C21952C0024EED2 /* AzulPatcher4600.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AzulPatcher4600.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | 1C748C2C1C21952C0024EED2 /* kern_start.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = kern_start.cpp; sourceTree = ""; }; 32 | 1C748C2E1C21952C0024EED2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 1CF01C901C8CF97F002DCEA3 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 34 | 1CF01C921C8CF997002DCEA3 /* Changelog.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = Changelog.md; sourceTree = ""; }; 35 | 1CF01C931C8DF02E002DCEA3 /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; 36 | A0DB59A51ED4C9A300BE2727 /* kern_patchset.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = kern_patchset.hpp; sourceTree = ""; }; 37 | A0DB59A61ED4C9A300BE2727 /* kern_patchset.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kern_patchset.cpp; sourceTree = ""; }; 38 | CE405EBA1E49DD7100AA0B3D /* kern_compression.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_compression.hpp; sourceTree = ""; }; 39 | CE405EBB1E49DD7100AA0B3D /* kern_disasm.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_disasm.hpp; sourceTree = ""; }; 40 | CE405EBC1E49DD7100AA0B3D /* kern_file.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_file.hpp; sourceTree = ""; }; 41 | CE405EBD1E49DD7100AA0B3D /* kern_iokit.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_iokit.hpp; sourceTree = ""; }; 42 | CE405EBE1E49DD7100AA0B3D /* kern_mach.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_mach.hpp; sourceTree = ""; }; 43 | CE405EBF1E49DD7100AA0B3D /* kern_patcher.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_patcher.hpp; sourceTree = ""; }; 44 | CE405EC01E49DD7100AA0B3D /* kern_policy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_policy.hpp; sourceTree = ""; }; 45 | CE405EC31E49DD7100AA0B3D /* kern_user.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_user.hpp; sourceTree = ""; }; 46 | CE405EC41E49DD7100AA0B3D /* kern_util.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_util.hpp; sourceTree = ""; }; 47 | CE405EC61E49DD7100AA0B3D /* LegacyIOService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LegacyIOService.h; sourceTree = ""; }; 48 | CE405EC71E49DD7100AA0B3D /* libkmod.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libkmod.a; sourceTree = ""; }; 49 | CE405ECF1E49EC9100AA0B3D /* kern_config.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = kern_config.hpp; sourceTree = ""; }; 50 | CE405ED21E49F9FC00AA0B3D /* kern_api.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = kern_api.hpp; sourceTree = ""; }; 51 | CE405ED81E4A080700AA0B3D /* plugin_start.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = plugin_start.cpp; sourceTree = ""; }; 52 | CE405EDA1E4A080F00AA0B3D /* plugin_start.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = plugin_start.hpp; sourceTree = ""; }; 53 | /* End PBXFileReference section */ 54 | 55 | /* Begin PBXFrameworksBuildPhase section */ 56 | 1C748C231C21952C0024EED2 /* Frameworks */ = { 57 | isa = PBXFrameworksBuildPhase; 58 | buildActionMask = 2147483647; 59 | files = ( 60 | CE405EC91E49DD9700AA0B3D /* libkmod.a in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXFrameworksBuildPhase section */ 65 | 66 | /* Begin PBXGroup section */ 67 | 1C748C1D1C21952C0024EED2 = { 68 | isa = PBXGroup; 69 | children = ( 70 | 1CF01C911C8CF982002DCEA3 /* Docs */, 71 | 1C748C291C21952C0024EED2 /* genericPatcher */, 72 | CE405EC81E49DD7B00AA0B3D /* SDK */, 73 | 1C748C281C21952C0024EED2 /* Products */, 74 | ); 75 | sourceTree = ""; 76 | }; 77 | 1C748C281C21952C0024EED2 /* Products */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 1C748C271C21952C0024EED2 /* AzulPatcher4600.kext */, 81 | ); 82 | name = Products; 83 | sourceTree = ""; 84 | }; 85 | 1C748C291C21952C0024EED2 /* genericPatcher */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | A0DB59A51ED4C9A300BE2727 /* kern_patchset.hpp */, 89 | A0DB59A61ED4C9A300BE2727 /* kern_patchset.cpp */, 90 | 1C748C2C1C21952C0024EED2 /* kern_start.cpp */, 91 | 1C748C2E1C21952C0024EED2 /* Info.plist */, 92 | ); 93 | path = genericPatcher; 94 | sourceTree = ""; 95 | }; 96 | 1CF01C911C8CF982002DCEA3 /* Docs */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 1CF01C901C8CF97F002DCEA3 /* README.md */, 100 | 1CF01C931C8DF02E002DCEA3 /* LICENSE.txt */, 101 | 1CF01C921C8CF997002DCEA3 /* Changelog.md */, 102 | ); 103 | name = Docs; 104 | sourceTree = ""; 105 | }; 106 | CE405EB91E49DD7100AA0B3D /* Headers */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | CE405ED21E49F9FC00AA0B3D /* kern_api.hpp */, 110 | CE405ECF1E49EC9100AA0B3D /* kern_config.hpp */, 111 | CE405EBA1E49DD7100AA0B3D /* kern_compression.hpp */, 112 | CE405EBB1E49DD7100AA0B3D /* kern_disasm.hpp */, 113 | CE405EBC1E49DD7100AA0B3D /* kern_file.hpp */, 114 | CE405EBD1E49DD7100AA0B3D /* kern_iokit.hpp */, 115 | CE405EBE1E49DD7100AA0B3D /* kern_mach.hpp */, 116 | CE405EBF1E49DD7100AA0B3D /* kern_patcher.hpp */, 117 | CE405EC01E49DD7100AA0B3D /* kern_policy.hpp */, 118 | CE405EC31E49DD7100AA0B3D /* kern_user.hpp */, 119 | CE405EC41E49DD7100AA0B3D /* kern_util.hpp */, 120 | CE405EDA1E4A080F00AA0B3D /* plugin_start.hpp */, 121 | ); 122 | name = Headers; 123 | path = Lilu.kext/Contents/Resources/Headers; 124 | sourceTree = SOURCE_ROOT; 125 | }; 126 | CE405EC51E49DD7100AA0B3D /* Library */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | CE405EC61E49DD7100AA0B3D /* LegacyIOService.h */, 130 | CE405EC71E49DD7100AA0B3D /* libkmod.a */, 131 | CE405ED81E4A080700AA0B3D /* plugin_start.cpp */, 132 | ); 133 | name = Library; 134 | path = Lilu.kext/Contents/Resources/Library; 135 | sourceTree = SOURCE_ROOT; 136 | }; 137 | CE405EC81E49DD7B00AA0B3D /* SDK */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | CE405EB91E49DD7100AA0B3D /* Headers */, 141 | CE405EC51E49DD7100AA0B3D /* Library */, 142 | ); 143 | name = SDK; 144 | sourceTree = ""; 145 | }; 146 | /* End PBXGroup section */ 147 | 148 | /* Begin PBXHeadersBuildPhase section */ 149 | 1C748C241C21952C0024EED2 /* Headers */ = { 150 | isa = PBXHeadersBuildPhase; 151 | buildActionMask = 2147483647; 152 | files = ( 153 | A0DB59A71ED4C9A300BE2727 /* kern_patchset.hpp in Headers */, 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | /* End PBXHeadersBuildPhase section */ 158 | 159 | /* Begin PBXNativeTarget section */ 160 | 1C748C261C21952C0024EED2 /* AzulPatcher4600 */ = { 161 | isa = PBXNativeTarget; 162 | buildConfigurationList = 1C748C311C21952C0024EED2 /* Build configuration list for PBXNativeTarget "AzulPatcher4600" */; 163 | buildPhases = ( 164 | 1C748C221C21952C0024EED2 /* Sources */, 165 | 1C748C231C21952C0024EED2 /* Frameworks */, 166 | 1C748C241C21952C0024EED2 /* Headers */, 167 | 1C748C251C21952C0024EED2 /* Resources */, 168 | 1C642F521C8F157A006B4C51 /* CopyFiles */, 169 | ); 170 | buildRules = ( 171 | ); 172 | dependencies = ( 173 | ); 174 | name = AzulPatcher4600; 175 | productName = NvidiaGraphicsFixup; 176 | productReference = 1C748C271C21952C0024EED2 /* AzulPatcher4600.kext */; 177 | productType = "com.apple.product-type.kernel-extension"; 178 | }; 179 | /* End PBXNativeTarget section */ 180 | 181 | /* Begin PBXProject section */ 182 | 1C748C1E1C21952C0024EED2 /* Project object */ = { 183 | isa = PBXProject; 184 | attributes = { 185 | LastUpgradeCheck = 0830; 186 | ORGANIZATIONNAME = net.coderobe; 187 | TargetAttributes = { 188 | 1C748C261C21952C0024EED2 = { 189 | CreatedOnToolsVersion = 7.2; 190 | }; 191 | }; 192 | }; 193 | buildConfigurationList = 1C748C211C21952C0024EED2 /* Build configuration list for PBXProject "AzulPatcher4600" */; 194 | compatibilityVersion = "Xcode 8.0"; 195 | developmentRegion = English; 196 | hasScannedForEncodings = 0; 197 | knownRegions = ( 198 | en, 199 | ); 200 | mainGroup = 1C748C1D1C21952C0024EED2; 201 | productRefGroup = 1C748C281C21952C0024EED2 /* Products */; 202 | projectDirPath = ""; 203 | projectRoot = ""; 204 | targets = ( 205 | 1C748C261C21952C0024EED2 /* AzulPatcher4600 */, 206 | ); 207 | }; 208 | /* End PBXProject section */ 209 | 210 | /* Begin PBXResourcesBuildPhase section */ 211 | 1C748C251C21952C0024EED2 /* Resources */ = { 212 | isa = PBXResourcesBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | }; 218 | /* End PBXResourcesBuildPhase section */ 219 | 220 | /* Begin PBXSourcesBuildPhase section */ 221 | 1C748C221C21952C0024EED2 /* Sources */ = { 222 | isa = PBXSourcesBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | CE405ED91E4A080700AA0B3D /* plugin_start.cpp in Sources */, 226 | 1C748C2D1C21952C0024EED2 /* kern_start.cpp in Sources */, 227 | A0DB59A81ED4C9A300BE2727 /* kern_patchset.cpp in Sources */, 228 | ); 229 | runOnlyForDeploymentPostprocessing = 0; 230 | }; 231 | /* End PBXSourcesBuildPhase section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 1C748C2F1C21952C0024EED2 /* Debug */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_CXX_LANGUAGE_STANDARD = "c++14"; 239 | CLANG_CXX_LIBRARY = "libc++"; 240 | CLANG_WARN_BOOL_CONVERSION = YES; 241 | CLANG_WARN_CONSTANT_CONVERSION = YES; 242 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 243 | CLANG_WARN_EMPTY_BODY = YES; 244 | CLANG_WARN_ENUM_CONVERSION = YES; 245 | CLANG_WARN_INFINITE_RECURSION = YES; 246 | CLANG_WARN_INT_CONVERSION = YES; 247 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 248 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 249 | CLANG_WARN_UNREACHABLE_CODE = YES; 250 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 251 | DEBUG_INFORMATION_FORMAT = dwarf; 252 | ENABLE_STRICT_OBJC_MSGSEND = YES; 253 | ENABLE_TESTABILITY = YES; 254 | GCC_C_LANGUAGE_STANDARD = c11; 255 | GCC_NO_COMMON_BLOCKS = YES; 256 | GCC_OPTIMIZATION_LEVEL = 0; 257 | GCC_PREPROCESSOR_DEFINITIONS = ( 258 | "DEBUG=1", 259 | "$(inherited)", 260 | ); 261 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 262 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 263 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 264 | GCC_WARN_UNDECLARED_SELECTOR = YES; 265 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 266 | GCC_WARN_UNUSED_FUNCTION = YES; 267 | GCC_WARN_UNUSED_VARIABLE = YES; 268 | ONLY_ACTIVE_ARCH = YES; 269 | SDKROOT = macosx; 270 | }; 271 | name = Debug; 272 | }; 273 | 1C748C301C21952C0024EED2 /* Release */ = { 274 | isa = XCBuildConfiguration; 275 | buildSettings = { 276 | ALWAYS_SEARCH_USER_PATHS = NO; 277 | CLANG_CXX_LANGUAGE_STANDARD = "c++14"; 278 | CLANG_CXX_LIBRARY = "libc++"; 279 | CLANG_WARN_BOOL_CONVERSION = YES; 280 | CLANG_WARN_CONSTANT_CONVERSION = YES; 281 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 282 | CLANG_WARN_EMPTY_BODY = YES; 283 | CLANG_WARN_ENUM_CONVERSION = YES; 284 | CLANG_WARN_INFINITE_RECURSION = YES; 285 | CLANG_WARN_INT_CONVERSION = YES; 286 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 287 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 288 | CLANG_WARN_UNREACHABLE_CODE = YES; 289 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 290 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 291 | ENABLE_STRICT_OBJC_MSGSEND = YES; 292 | GCC_C_LANGUAGE_STANDARD = c11; 293 | GCC_NO_COMMON_BLOCKS = YES; 294 | GCC_OPTIMIZATION_LEVEL = 3; 295 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 296 | GCC_UNROLL_LOOPS = YES; 297 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 298 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 299 | GCC_WARN_UNDECLARED_SELECTOR = YES; 300 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 301 | GCC_WARN_UNUSED_FUNCTION = YES; 302 | GCC_WARN_UNUSED_VARIABLE = YES; 303 | SDKROOT = macosx; 304 | }; 305 | name = Release; 306 | }; 307 | 1C748C321C21952C0024EED2 /* Debug */ = { 308 | isa = XCBuildConfiguration; 309 | buildSettings = { 310 | COPY_PHASE_STRIP = NO; 311 | CURRENT_PROJECT_VERSION = "$(MODULE_VERSION)"; 312 | DEPLOYMENT_POSTPROCESSING = YES; 313 | GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO; 314 | GCC_ENABLE_KERNEL_DEVELOPMENT = NO; 315 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; 316 | GCC_PREPROCESSOR_DEFINITIONS = ( 317 | "MODULE_VERSION=$(MODULE_VERSION)", 318 | "PRODUCT_NAME=$(PRODUCT_NAME)", 319 | "$(inherited)", 320 | ); 321 | HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources"; 322 | INFOPLIST_FILE = genericPatcher/Info.plist; 323 | LIBRARY_SEARCH_PATHS = ( 324 | "$(inherited)", 325 | "$(PROJECT_DIR)/Lilu.kext/Contents/Resources/Library", 326 | ); 327 | MACOSX_DEPLOYMENT_TARGET = 10.12; 328 | MODULE_NAME = net.coderobe.macos.AzulPatcher4600; 329 | MODULE_START = "$(PRODUCT_NAME)_kern_start"; 330 | MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; 331 | MODULE_VERSION = 1.2.0; 332 | OTHER_CFLAGS = ( 333 | "-mmmx", 334 | "-msse", 335 | "-msse2", 336 | "-msse3", 337 | "-mfpmath=sse", 338 | "-mssse3", 339 | "-ftree-vectorize", 340 | "-fno-non-call-exceptions", 341 | "-fno-builtin", 342 | "-fno-asynchronous-unwind-tables", 343 | ); 344 | OTHER_LDFLAGS = "-static"; 345 | PRODUCT_BUNDLE_IDENTIFIER = net.coderobe.macos.AzulPatcher4600; 346 | PRODUCT_NAME = "$(TARGET_NAME)"; 347 | WRAPPER_EXTENSION = kext; 348 | }; 349 | name = Debug; 350 | }; 351 | 1C748C331C21952C0024EED2 /* Release */ = { 352 | isa = XCBuildConfiguration; 353 | buildSettings = { 354 | CURRENT_PROJECT_VERSION = "$(MODULE_VERSION)"; 355 | DEAD_CODE_STRIPPING = YES; 356 | DEPLOYMENT_POSTPROCESSING = YES; 357 | GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS = NO; 358 | GCC_ENABLE_KERNEL_DEVELOPMENT = NO; 359 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 360 | GCC_PREPROCESSOR_DEFINITIONS = ( 361 | "MODULE_VERSION=$(MODULE_VERSION)", 362 | "PRODUCT_NAME=$(PRODUCT_NAME)", 363 | ); 364 | HEADER_SEARCH_PATHS = "${PROJECT_DIR}/Lilu.kext/Contents/Resources"; 365 | INFOPLIST_FILE = genericPatcher/Info.plist; 366 | LIBRARY_SEARCH_PATHS = ( 367 | "$(inherited)", 368 | "$(PROJECT_DIR)/Lilu.kext/Contents/Resources/Library", 369 | ); 370 | LLVM_LTO = YES; 371 | MACOSX_DEPLOYMENT_TARGET = 10.12; 372 | MODULE_NAME = net.coderobe.macos.AzulPatcher4600; 373 | MODULE_START = "$(PRODUCT_NAME)_kern_start"; 374 | MODULE_STOP = "$(PRODUCT_NAME)_kern_stop"; 375 | MODULE_VERSION = 1.2.0; 376 | OTHER_CFLAGS = ( 377 | "-mmmx", 378 | "-msse", 379 | "-msse2", 380 | "-msse3", 381 | "-mfpmath=sse", 382 | "-mssse3", 383 | "-ftree-vectorize", 384 | "-fno-non-call-exceptions", 385 | "-fno-builtin", 386 | "-fno-asynchronous-unwind-tables", 387 | ); 388 | OTHER_LDFLAGS = "-static"; 389 | PRODUCT_BUNDLE_IDENTIFIER = net.coderobe.macos.AzulPatcher4600; 390 | PRODUCT_NAME = "$(TARGET_NAME)"; 391 | STRIP_STYLE = "non-global"; 392 | WRAPPER_EXTENSION = kext; 393 | }; 394 | name = Release; 395 | }; 396 | /* End XCBuildConfiguration section */ 397 | 398 | /* Begin XCConfigurationList section */ 399 | 1C748C211C21952C0024EED2 /* Build configuration list for PBXProject "AzulPatcher4600" */ = { 400 | isa = XCConfigurationList; 401 | buildConfigurations = ( 402 | 1C748C2F1C21952C0024EED2 /* Debug */, 403 | 1C748C301C21952C0024EED2 /* Release */, 404 | ); 405 | defaultConfigurationIsVisible = 0; 406 | defaultConfigurationName = Release; 407 | }; 408 | 1C748C311C21952C0024EED2 /* Build configuration list for PBXNativeTarget "AzulPatcher4600" */ = { 409 | isa = XCConfigurationList; 410 | buildConfigurations = ( 411 | 1C748C321C21952C0024EED2 /* Debug */, 412 | 1C748C331C21952C0024EED2 /* Release */, 413 | ); 414 | defaultConfigurationIsVisible = 0; 415 | defaultConfigurationName = Release; 416 | }; 417 | /* End XCConfigurationList section */ 418 | }; 419 | rootObject = 1C748C1E1C21952C0024EED2 /* Project object */; 420 | } 421 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | This project is licensed under the "Anyone But TonyMac" (ABTM) license, described below. No other licenses may apply. 2 | 3 | As used herein, "this License" refers to version 1 of the Anyone But TonyMac License 4 | 5 | This license applies all sections of the GNU LGPL v3, in addition to the addendum below: 6 | 7 | a) 8 | tonymacx86 (tonymacx86.com, Unibeast, Multibeast, & other 'brand' names related to the aforementioned) 9 | may not make use of, or redistribute this program or any of its derivatives. 10 | 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | AzulPatcher4600 2 | =================== 3 | 4 | # Superseded by [WhateverGreen](https://github.com/acidanthera/WhateverGreen) ([info](https://github.com/acidanthera/WhateverGreen/blob/master/Manual/FAQ.OldPlugins.en.md)) 5 | 6 | Lilu plugin for haswell hd4600 mobile igpus 7 | 8 | This seems to be noticeably faster than clover kext patching even when injected with Clover. 9 | 10 | ### OS Compatibility: 11 | Yosemite to High Sierra 12 | 13 | #### Requirements: 14 | - Lilu 1.2.x 15 | 16 | #### Tested on: 17 | - Lenovo Y50-70 FHD 18 | - Lenovo Thinkpad T440p 19 | - hasee Z7M-i78172D1 (and other laptops based on the Clevo CP65S / Sager NP8650 / P650SA) 20 | 21 | #### Features 22 | - Patches HDMI audio 23 | - Applies the 9MB cursor patch with 2 ports only 24 | - Disables the unused 0204 port (Fixes graphic lockups on some laptops) 25 | 26 | #### Credits 27 | - [Apple](https://www.apple.com) for macOS 28 | - [vit9696](https://github.com/vit9696) for [Lilu.kext](https://github.com/vit9696/Lilu) 29 | - [RehabMan](https://github.com/RehabMan) for the patch 30 | -------------------------------------------------------------------------------- /genericPatcher/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | KEXT 17 | CFBundleShortVersionString 18 | $(MODULE_VERSION) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(MODULE_VERSION) 23 | IOKitPersonalities 24 | 25 | net.coderobe.macos.AzulPatcher4600 26 | 27 | CFBundleIdentifier 28 | $(PRODUCT_BUNDLE_IDENTIFIER) 29 | IOClass 30 | $(PRODUCT_NAME:rfc1034identifier) 31 | IOMatchCategory 32 | $(PRODUCT_NAME:rfc1034identifier) 33 | IOProviderClass 34 | IOResources 35 | IOResourceMatch 36 | IOKit 37 | 38 | 39 | NSHumanReadableCopyright 40 | Copyright © 2017 Rob B. (coderobe). All rights reserved. 41 | OSBundleLibraries 42 | 43 | as.vit9696.Lilu 44 | 1.2.0 45 | com.apple.kpi.bsd 46 | 12.0.0 47 | com.apple.kpi.dsep 48 | 12.0.0 49 | com.apple.kpi.iokit 50 | 12.0.0 51 | com.apple.kpi.libkern 52 | 12.0.0 53 | com.apple.kpi.mach 54 | 12.0.0 55 | com.apple.kpi.unsupported 56 | 12.0.0 57 | 58 | OSBundleRequired 59 | Root 60 | 61 | 62 | -------------------------------------------------------------------------------- /genericPatcher/kern_patchset.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_patchset.cpp 3 | // 4 | // Copyright © 2017 coderobe. All rights reserved. 5 | // 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | #include 12 | #include 13 | 14 | #include "kern_patchset.hpp" 15 | 16 | KernelVersion KernelCheck = getKernelVersion(); 17 | 18 | static const char* kextPaths[] { 19 | "/System/Library/Extensions/AppleIntelFramebufferAzul.kext/Contents/MacOS/AppleIntelFramebufferAzul", 20 | }; 21 | 22 | static KernelPatcher::KextInfo kextList[] { 23 | { "com.apple.driver.AppleIntelFramebufferAzul", &kextPaths[0], 1, {true, true}, {}, KernelPatcher::KextInfo::Unloaded }, 24 | }; 25 | 26 | template 27 | inline unsigned arraysize(const T (&v)[S]) { return S; } 28 | static size_t kextListSize = arraysize(kextList); 29 | 30 | bool PatchSet::init() { 31 | LiluAPI::Error error = lilu.onKextLoad(kextList, kextListSize, 32 | [](void* user, KernelPatcher& patcher, size_t index, mach_vm_address_t address, size_t size) { 33 | PatchSet* patchset = static_cast(user); 34 | patchset->processKext(patcher, index, address, size); 35 | }, this); 36 | 37 | if(error != LiluAPI::Error::NoError) { 38 | SYSLOG("coderobe.AzulPatcher4600", "failed to register onPatcherLoad method %d", error); 39 | return false; 40 | } 41 | 42 | return true; 43 | } 44 | 45 | void PatchSet::deinit() { 46 | } 47 | 48 | void PatchSet::processKext(KernelPatcher& patcher, size_t index, mach_vm_address_t address, size_t size){ 49 | if(progressState != ProcessingState::EverythingDone) { 50 | for(size_t i = 0; i < kextListSize; i++) { 51 | if(kextList[i].loadIndex == index) { 52 | if(!(progressState & ProcessingState::EverythingDone) && !strcmp(kextList[i].id, kextList[0].id)) { 53 | SYSLOG("coderobe.AzulPatcher4600", "found %s", kextList[i].id); 54 | 55 | // Disable port 0204 56 | const uint8_t find[] = {0x02, 0x04, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00}; 57 | const uint8_t replace[] = {0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00}; 58 | KextPatch kext_patch { 59 | {&kextList[i], find, replace, sizeof(find), 2}, 60 | KernelVersion::Yosemite, KernelVersion::HighSierra 61 | }; 62 | applyPatches(patcher, index, &kext_patch, 1); 63 | SYSLOG("coderobe.AzulPatcher4600", "disabled port 0204"); 64 | 65 | // 9MB cursor bytes, 2 ports only 66 | const uint8_t find1[] = {0x06, 0x00, 0x26, 0x0a, 0x01, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x60, 0x00}; 67 | const uint8_t replace1[] = {0x06, 0x00, 0x26, 0x0a, 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00}; 68 | KextPatch kext_patch1 { 69 | {&kextList[i], find1, replace1, sizeof(find1), 2}, 70 | KernelVersion::Yosemite, KernelVersion::HighSierra 71 | }; 72 | applyPatches(patcher, index, &kext_patch1, 1); 73 | SYSLOG("coderobe.AzulPatcher4600", "9MB cursor byte patch (2 ports only) applied"); 74 | 75 | // HDMI audio 76 | const uint8_t find2[] = {0x01, 0x05, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00}; 77 | const uint8_t replace2[] = {0x01, 0x05, 0x12, 0x00, 0x00, 0x08, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00}; 78 | KextPatch kext_patch2 { 79 | {&kextList[i], find2, replace2, sizeof(find2), 2}, 80 | KernelVersion::Yosemite, KernelVersion::HighSierra 81 | }; 82 | applyPatches(patcher, index, &kext_patch2, 1); 83 | SYSLOG("coderobe.AzulPatcher4600", "HDMI audio patch applied"); 84 | progressState |= ProcessingState::EverythingDone; 85 | } 86 | } 87 | } 88 | } 89 | patcher.clearError(); 90 | } 91 | 92 | void PatchSet::applyPatches(KernelPatcher& patcher, size_t index, const KextPatch* patches, size_t patchNum) { 93 | for (size_t p = 0; p < patchNum; p++) { 94 | auto &patch = patches[p]; 95 | if (patch.patch.kext->loadIndex == index) { 96 | if (patcher.compatibleKernel(patch.minKernel, patch.maxKernel)) { 97 | SYSLOG("coderobe.AzulPatcher4600", "patching %s (%ld/%ld)...", patch.patch.kext->id, p+1, patchNum); 98 | patcher.applyLookupPatch(&patch.patch); 99 | patcher.clearError(); 100 | } 101 | } 102 | } 103 | } 104 | 105 | -------------------------------------------------------------------------------- /genericPatcher/kern_patchset.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_patchset.hpp 3 | // 4 | // Copyright © 2017 coderobe. All rights reserved. 5 | // 6 | 7 | #ifndef kern_patchset_hpp 8 | #define kern_patchset_hpp 9 | 10 | #include 11 | 12 | struct KextPatch { 13 | KernelPatcher::LookupPatch patch; 14 | uint32_t minKernel; 15 | uint32_t maxKernel; 16 | }; 17 | 18 | class PatchSet { 19 | public: 20 | bool init(); 21 | void deinit(); 22 | 23 | private: 24 | /** 25 | * Patch kext if needed and prepare other patches 26 | * 27 | * @param patcher KernelPatcher instance 28 | * @param index kinfo handle 29 | * @param address kinfo load address 30 | * @param size kinfo memory size 31 | */ 32 | void processKext(KernelPatcher &patcher, size_t index, mach_vm_address_t address, size_t size); 33 | 34 | /** 35 | * Apply kext patches for loaded kext index 36 | * 37 | * @param patcher KernelPatcher instance 38 | * @param index kinfo index 39 | * @param patches patch list 40 | * @param patchesNum patch number 41 | */ 42 | void applyPatches(KernelPatcher &patcher, size_t index, const KextPatch *patches, size_t patchesNum); 43 | 44 | /** 45 | * Current progress mask 46 | */ 47 | struct ProcessingState { 48 | enum { 49 | NothingReady = 0, 50 | EverythingDone = 1, 51 | }; 52 | }; 53 | int progressState {ProcessingState::NothingReady}; 54 | }; 55 | 56 | #endif /* kern_patchset */ 57 | -------------------------------------------------------------------------------- /genericPatcher/kern_start.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // kern_start.cpp 3 | // genericPatcher 4 | // 5 | // Copyright © 2017 coderobe. All rights reserved. 6 | // 7 | 8 | #include 9 | #include 10 | 11 | #include "kern_patchset.hpp" 12 | 13 | static PatchSet patchset; 14 | 15 | static const char *bootargOff[] { 16 | "-cdrpatchoff" 17 | }; 18 | 19 | static const char *bootargDebug[] { 20 | "-cdrpatchdbg" 21 | }; 22 | 23 | static const char *bootargBeta[] { 24 | "-cdrpatchbeta" 25 | }; 26 | 27 | PluginConfiguration ADDPR(config) { 28 | xStringify(PRODUCT_NAME), 29 | parseModuleVersion(xStringify(MODULE_VERSION)), 30 | LiluAPI::AllowNormal | LiluAPI::AllowInstallerRecovery, 31 | bootargOff, 32 | sizeof(bootargOff)/sizeof(bootargOff[0]), 33 | bootargDebug, 34 | sizeof(bootargDebug)/sizeof(bootargDebug[0]), 35 | bootargBeta, 36 | sizeof(bootargBeta)/sizeof(bootargBeta[0]), 37 | KernelVersion::Yosemite, 38 | KernelVersion::HighSierra, 39 | []() { 40 | patchset.init(); 41 | } 42 | }; 43 | 44 | 45 | 46 | 47 | 48 | --------------------------------------------------------------------------------