]> git.saurik.com Git - apple/bootx.git/blobdiff - bootx.tproj/sl.subproj/macho.c
BootX-81.tar.gz
[apple/bootx.git] / bootx.tproj / sl.subproj / macho.c
index 5aa36cd1bbdd872cf9ae43ed4e7770e0987ed2af..333cbe135638f2018b8621438a47e3a4a8678b46 100644 (file)
@@ -3,22 +3,19 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
  * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
@@ -30,6 +27,7 @@
  *  DRI: Josh de Cesare
  */
 
+#define __srr0 srr0                    // so we can build in both (conformant/not) worlds
 #include <mach-o/fat.h>
 #include <mach-o/loader.h>
 #include <mach/machine/thread_status.h>
@@ -46,7 +44,7 @@ static unsigned long gPPCAddress;
 
 long ThinFatBinaryMachO(void **binary, unsigned long *length)
 {
-  unsigned long nfat, swapped, size;
+  unsigned long nfat, swapped, size = 0;
   struct fat_header *fhp = (struct fat_header *)*binary;
   struct fat_arch   *fap =
     (struct fat_arch *)((unsigned long)*binary + sizeof(struct fat_header));
@@ -84,7 +82,7 @@ long DecodeMachO(void *binary)
 {
   struct mach_header *mH;
   long   ncmds, cmdBase, cmd, cmdsize, headerBase, headerAddr, headerSize;
-  long   cnt, ret;
+  long   cnt, ret = 0;
   
   gPPCAddress = (unsigned long)binary;
   
@@ -171,6 +169,9 @@ static long DecodeSegment(long cmdBase)
   // Add the Segment to the memory-map.
   sprintf(rangeName, "Kernel-%s", segCmd->segname);
   AllocateMemoryRange(rangeName, (long)vmaddr, vmsize);
+
+  if (vmsize && (strcmp(segCmd->segname, "__PRELINK") == 0))
+    gHaveKernelCache = 1;
   
   // Handle special segments first.
   
@@ -208,11 +209,11 @@ static long DecodeSegment(long cmdBase)
 
 static long DecodeUnixThread(long cmdBase)
 {
-  struct ppc_thread_state *ppcThreadState;
+  ppc_thread_state_t *ppcThreadState;
   
   // The PPC Thread State starts after the thread command stuct plus,
   // 2 longs for the flaver an num longs.
-  ppcThreadState = (struct ppc_thread_state *)
+  ppcThreadState = (ppc_thread_state_t *)
     (cmdBase + sizeof(struct thread_command) + 8);
   
   gKernelEntryPoint = ppcThreadState->srr0;