Changeset 3573 for trunk/kStuff/kLdr/kLdrModMachO.c
- Timestamp:
- Aug 31, 2007, 6:09:23 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kStuff/kLdr/kLdrModMachO.c
r3571 r3573 30 30 *******************************************************************************/ 31 31 #include <k/kLdr.h> 32 #include "kLdrHlp.h"33 32 #include "kLdrInternal.h" 34 33 #include <k/kLdrFmts/mach-o.h> … … 46 45 */ 47 46 #ifdef KLDRMODMACHO_STRICT 48 # define KLDRMODMACHO_ASSERT(expr) k ldrHlpAssert(expr)47 # define KLDRMODMACHO_ASSERT(expr) kHlpAssert(expr) 49 48 #else 50 49 # define KLDRMODMACHO_ASSERT(expr) do {} while (0) … … 215 214 if (pModMachO) 216 215 { 217 k ldrHlpFree(pModMachO->pbLoadCommands);218 k ldrHlpFree(pModMachO);216 kHlpFree(pModMachO->pbLoadCommands); 217 kHlpFree(pModMachO); 219 218 } 220 219 return rc; … … 279 278 * Read and pre-parse the load commands to figure out how many segments we'll be needing. 280 279 */ 281 pbLoadCommands = k ldrHlpAlloc(s.Hdr32.sizeofcmds);280 pbLoadCommands = kHlpAlloc(s.Hdr32.sizeofcmds); 282 281 if (!pbLoadCommands) 283 282 return KLDR_ERR_NO_MEMORY; … … 290 289 if (rc) 291 290 { 292 k ldrHlpFree(pbLoadCommands);291 kHlpFree(pbLoadCommands); 293 292 return rc; 294 293 } … … 298 297 * Calc the instance size, allocate and initialize it. 299 298 */ 300 cchFilename = k LdrHlpStrLen(kLdrRdrName(pRdr));299 cchFilename = kHlpStrLen(kLdrRdrName(pRdr)); 301 300 cb = K_ALIGN_Z( K_OFFSETOF(KLDRMODMACHO, aSegments[cSegments]) 302 301 + sizeof(KLDRMODMACHOSECT) * cSections, 16) … … 304 303 + cchFilename + 1 305 304 + cbStringPool; 306 pModMachO = (PKLDRMODMACHO)k ldrHlpAlloc(cb);305 pModMachO = (PKLDRMODMACHO)kHlpAlloc(cb); 307 306 if (!pModMachO) 308 307 return KLDR_ERR_NO_MEMORY; … … 319 318 pMod->cchFilename = cchFilename; 320 319 pMod->pszFilename = (char *)&pMod->aSegments[pMod->cSegments]; 321 k LdrHlpMemCopy((char *)pMod->pszFilename, kLdrRdrName(pRdr), cchFilename + 1);322 pMod->pszName = k ldrHlpGetFilename(pMod->pszFilename);320 kHlpMemCopy((char *)pMod->pszFilename, kLdrRdrName(pRdr), cchFilename + 1); 321 pMod->pszName = kHlpGetFilename(pMod->pszFilename); 323 322 pMod->cchName = cchFilename - (pMod->pszName - pMod->pszFilename); 324 323 switch (s.Hdr32.cputype) … … 619 618 /* a new segment? */ 620 619 if ( !cSegments 621 || k LdrHlpStrNComp(pSect->segname, (pSect - 1)->segname, sizeof(pSect->segname)))620 || kHlpStrNComp(pSect->segname, (pSect - 1)->segname, sizeof(pSect->segname))) 622 621 { 623 622 #if 0 /** @todo This doesn't work because of BSS. */ … … 626 625 while ((KUPTR)pCur >= (KUPTR)pFirstSect) 627 626 { 628 if (!k LdrHlpStrNComp(pCur->segname, pSect->segname, sizeof(pSect->segname)))627 if (!kHlpStrNComp(pCur->segname, pSect->segname, sizeof(pSect->segname))) 629 628 return KLDR_ERR_MACHO_BAD_SECTION_ORDER; 630 629 pCur--; … … 634 633 /* ok. count it and the string. */ 635 634 cSegments++; 636 cbStringPool += k LdrHlpStrNLen(&pSect->segname[0], sizeof(pSect->segname)) + 1;635 cbStringPool += kHlpStrNLen(&pSect->segname[0], sizeof(pSect->segname)) + 1; 637 636 } 638 637 break; … … 858 857 859 858 if ( fFirstSegment 860 || k LdrHlpStrNComp(pSect->segname, (pSect - 1)->segname, sizeof(pSect->segname)))859 || kHlpStrNComp(pSect->segname, (pSect - 1)->segname, sizeof(pSect->segname))) 861 860 { 862 861 /* close the previous segment */ … … 867 866 pSeg->pvUser = NULL; 868 867 pSeg->pchName = pbStringPool; 869 pSeg->cchName = (KU32)k LdrHlpStrNLen(&pSect->segname[0], sizeof(pSect->sectname));870 k LdrHlpMemCopy(pbStringPool, &pSect->segname[0], pSeg->cchName);868 pSeg->cchName = (KU32)kHlpStrNLen(&pSect->segname[0], sizeof(pSect->sectname)); 869 kHlpMemCopy(pbStringPool, &pSect->segname[0], pSeg->cchName); 871 870 pbStringPool += pSeg->cchName; 872 871 *pbStringPool++ = '\0'; … … 1002 1001 while (j-- > 0) 1003 1002 { 1004 k ldrHlpFree(pModMachO->aSegments[i].paSections[j].paFixups);1003 kHlpFree(pModMachO->aSegments[i].paSections[j].paFixups); 1005 1004 pModMachO->aSegments[i].paSections[j].paFixups = NULL; 1006 1005 } … … 1014 1013 pMod->u32Magic = 0; 1015 1014 pMod->pOps = NULL; 1016 k ldrHlpFree(pModMachO->pbLoadCommands);1015 kHlpFree(pModMachO->pbLoadCommands); 1017 1016 pModMachO->pbLoadCommands = NULL; 1018 k ldrHlpFree(pModMachO->pchStrings);1017 kHlpFree(pModMachO->pchStrings); 1019 1018 pModMachO->pchStrings = NULL; 1020 k ldrHlpFree(pModMachO->pvaSymbols);1019 kHlpFree(pModMachO->pvaSymbols); 1021 1020 pModMachO->pvaSymbols = NULL; 1022 k ldrHlpFree(pModMachO);1021 kHlpFree(pModMachO); 1023 1022 return rc; 1024 1023 } … … 1152 1151 if (psz[cchSymbol]) 1153 1152 continue; 1154 if (k LdrHlpMemComp(psz, pchSymbol, cchSymbol))1153 if (kHlpMemComp(psz, pchSymbol, cchSymbol)) 1155 1154 continue; 1156 1155 … … 1325 1324 return KLDR_ERR_MACHO_BAD_SYMBOL; 1326 1325 psz = &pchStrings[paSyms[iSym].n_un.n_strx]; 1327 cch = k LdrHlpStrLen(psz);1326 cch = kHlpStrLen(psz); 1328 1327 if (!cch) 1329 1328 psz = NULL; … … 1757 1756 return KLDR_ERR_MACHO_BAD_SYMBOL; 1758 1757 pszSymbol = &pModMachO->pchStrings[paSyms[iSym].n_un.n_strx]; 1759 cchSymbol = k LdrHlpStrLen(pszSymbol);1758 cchSymbol = kHlpStrLen(pszSymbol); 1760 1759 rc = pfnGetImport(pModMachO->pMod, NIL_KLDRMOD_IMPORT, iSym, pszSymbol, cchSymbol, NULL, 1761 1760 &Value, &fKind, pvUser); … … 1808 1807 return KLDR_ERR_MACHO_BAD_SYMBOL; 1809 1808 pszSymbol = &pModMachO->pchStrings[paSyms[iSym].n_un.n_strx]; 1810 cchSymbol = k LdrHlpStrLen(pszSymbol);1809 cchSymbol = kHlpStrLen(pszSymbol); 1811 1810 rc = pfnGetImport(pModMachO->pMod, NIL_KLDRMOD_IMPORT, iSym, pszSymbol, cchSymbol, NULL, 1812 1811 &Value, &fKind, pvUser); … … 2142 2141 return KLDR_ERR_SIZE_OVERFLOW; 2143 2142 rc = KLDR_ERR_NO_MEMORY; 2144 pvSyms = k ldrHlpAlloc(cbSyms);2143 pvSyms = kHlpAlloc(cbSyms); 2145 2144 if (pvSyms) 2146 2145 { 2147 2146 if (pModMachO->cchStrings) 2148 pvStrings = k ldrHlpAlloc(pModMachO->cchStrings);2147 pvStrings = kHlpAlloc(pModMachO->cchStrings); 2149 2148 else 2150 pvStrings = k ldrHlpAllocZ(4);2149 pvStrings = kHlpAllocZ(4); 2151 2150 if (pvStrings) 2152 2151 { … … 2188 2187 return 0; 2189 2188 } 2190 k ldrHlpFree(pvStrings);2189 kHlpFree(pvStrings); 2191 2190 } 2192 k ldrHlpFree(pvSyms);2191 kHlpFree(pvSyms); 2193 2192 } 2194 2193 } … … 2220 2219 if (cbFixups / sizeof(*paFixups) != cFixups) 2221 2220 return KLDR_ERR_SIZE_OVERFLOW; 2222 paFixups = (macho_relocation_info_t *)k ldrHlpAlloc(cbFixups);2221 paFixups = (macho_relocation_info_t *)kHlpAlloc(cbFixups); 2223 2222 if (!paFixups) 2224 2223 return KLDR_ERR_NO_MEMORY; … … 2244 2243 } 2245 2244 else 2246 k ldrHlpFree(paFixups);2245 kHlpFree(paFixups); 2247 2246 return rc; 2248 2247 } … … 2306 2305 * Zero the entire buffer first to simplify things. 2307 2306 */ 2308 k LdrHlpMemSet(pvBits, 0, (KSIZE)pModMachO->cbImage);2307 kHlpMemSet(pvBits, 0, (KSIZE)pModMachO->cbImage); 2309 2308 2310 2309 /*
Note:
See TracChangeset
for help on using the changeset viewer.