Loading...
libsa/bootstrap.cpp xnu-4903.231.4 xnu-4570.71.2
--- xnu/xnu-4903.231.4/libsa/bootstrap.cpp
+++ xnu/xnu-4570.71.2/libsa/bootstrap.cpp
@@ -29,6 +29,10 @@
 #include <mach/kmod.h>
 #include <libkern/kernel_mach_header.h>
 #include <libkern/prelink.h>
+
+#if CONFIG_EMBEDDED
+extern uuid_t kernelcache_uuid;
+#endif
 }
 
 #include <libkern/version.h>
@@ -100,7 +104,6 @@
    "com.apple.kpi.bsd",
    "com.apple.kpi.dsep",
    "com.apple.kpi.iokit",
-   "com.apple.kpi.kasan",
    "com.apple.kpi.libkern",
    "com.apple.kpi.mach",
    "com.apple.kpi.private",
@@ -243,7 +246,9 @@
     OSDictionary              * prelinkInfoDict         = NULL;  // do not release
     OSString                  * errorString             = NULL;  // must release
     OSKext                    * theKernel               = NULL;  // must release
+#if CONFIG_EMBEDDED
     OSData                    * kernelcacheUUID         = NULL;  // do not release
+#endif
 
     kernel_segment_command_t  * prelinkTextSegment      = NULL;  // see code
     kernel_segment_command_t  * prelinkInfoSegment      = NULL;  // see code
@@ -369,19 +374,19 @@
     ramDiskBoot = IORamDiskBSDRoot();
 #endif /* NO_KEXTD */
 
+#if CONFIG_EMBEDDED
     /* Copy in the kernelcache UUID */
     kernelcacheUUID = OSDynamicCast(OSData,
         prelinkInfoDict->getObject(kPrelinkInfoKCIDKey));
-    if (kernelcacheUUID) {
-        if (kernelcacheUUID->getLength() != sizeof(kernelcache_uuid)) {
-            panic("kernelcacheUUID length is %d, expected %lu", kernelcacheUUID->getLength(),
-                sizeof(kernelcache_uuid));
-        } else {
-            kernelcache_uuid_valid = TRUE;
-            memcpy((void *)&kernelcache_uuid, (const void *)kernelcacheUUID->getBytesNoCopy(), kernelcacheUUID->getLength());
-            uuid_unparse_upper(kernelcache_uuid, kernelcache_uuid_string);
-        }
-    }
+    if (!kernelcacheUUID) {
+	bzero(&kernelcache_uuid, sizeof(kernelcache_uuid));
+    } else if (kernelcacheUUID->getLength() != sizeof(kernelcache_uuid)) {
+        panic("kernelcacheUUID length is %d, expected %lu", kernelcacheUUID->getLength(),
+            sizeof(kernelcache_uuid));
+    } else {
+        memcpy((void *)&kernelcache_uuid, (const void *)kernelcacheUUID->getBytesNoCopy(), kernelcacheUUID->getLength());
+    }
+#endif /* CONFIG_EMBEDDED */
 
     infoDictArray = OSDynamicCast(OSArray, 
         prelinkInfoDict->getObject(kPrelinkInfoDictionaryKey));
@@ -449,7 +454,7 @@
                 infoDict->getObject(kPrelinkExecutableSizeKey));
             if (addressNum && lengthNum) {
 #if __arm__ || __arm64__
-                vm_offset_t data = ml_static_slide(addressNum->unsigned64BitValue());
+                vm_offset_t data = (vm_offset_t) ((addressNum->unsigned64BitValue()) + vm_kernel_slide);
                 vm_size_t length = (vm_size_t) (lengthNum->unsigned32BitValue());
                 ml_static_mfree(data, length);
 #else
@@ -488,7 +493,7 @@
 
 		    slideAddrSegIndex = __whereIsAddr( (vm_offset_t)slideAddr, &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
 		    if (slideAddrSegIndex >= 0) {
-			    addrToSlideSegIndex = __whereIsAddr(ml_static_slide((vm_offset_t)(*slideAddr)), &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
+			    addrToSlideSegIndex = __whereIsAddr( (vm_offset_t)(*slideAddr + vm_kernel_slide), &plk_segSizes[0], &plk_segAddrs[0], PLK_SEGMENTS );
 			    if (addrToSlideSegIndex < 0) {
 				    badSlideTarget++;
 				    continue;
@@ -500,7 +505,7 @@
 		    }
 
 		    slidKextAddrCount++;
-		    *slideAddr = ml_static_slide(*slideAddr);
+		    *(slideAddr) += vm_kernel_slide;
 	    } // for ...
 
 	    /* All kexts are now slid, set VM protections for them */