Changeset 2869 for trunk/kLdr/kLdrDyld.c
- Timestamp:
- Nov 12, 2006, 3:47:25 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrDyld.c
r2868 r2869 75 75 * successfully initialized. */ 76 76 PKLDRDYLDMOD g_pkLdrDyldInitHead; 77 /** Pointer to the tail module of the initalization list. 77 /** Pointer to the tail module of the initalization list.*/ 78 78 PKLDRDYLDMOD g_pkLdrDyldInitTail; 79 /** Pointer to the head module of the termination order list. */ 79 /** Pointer to the head module of the termination order list. 80 * This is a LIFO just like the the init list. */ 80 81 PKLDRDYLDMOD g_pkLdrDyldTermHead; 81 82 /** Pointer to the tail module of the termination order list. */ … … 185 186 * Initialize the dynamic loader. 186 187 */ 187 int kldrDy Init(void)188 int kldrDyldInit(void) 188 189 { 189 190 kLdrDyldHead = kLdrDyldTail = NULL; … … 198 199 g_cbkLdrDyldMainStack = 0; 199 200 200 return 0;201 return kldrDyldFindInit(); 201 202 } 202 203 … … 205 206 * Terminate the dynamic loader. 206 207 */ 207 void kldrDy Term(void)208 void kldrDyldTerm(void) 208 209 { 209 210 … … 321 322 g_cTotalLoadCalls++; 322 323 g_cActiveLoadCalls++; 323 rc = kldrDyldDoLoad(pszDll, pszPrefix, pszSuffix, enmSearch, fFlags, phMod, pszErr, cchErr);324 rc = kldrDyldDoLoad(pszDll, pszPrefix, pszSuffix, enmSearch, fFlags, &pMod, pszErr, cchErr); 324 325 g_cActiveLoadCalls--; 325 326 kldrDyldDoModuleTerminationAndGarabageCollection(); … … 845 846 if (cEntries < sizeof(s_aEntries) / sizeof(s_aEntries[0])) 846 847 { 847 s_aEntries[cEntries++].pMod = pMod->papPrereqs[pMod->cPrereqs - s_aEntries[i].cLeft]; 848 s_aEntries[cEntries].cLeft = ~(uint32_t)0; 849 s_aEntries[cEntries].pMod = pMod->papPrereqs[pMod->cPrereqs - s_aEntries[i].cLeft]; 848 850 s_aEntries[i].cLeft--; 851 cEntries++; 849 852 } 850 853 else … … 962 965 * We'll have to load it from file. 963 966 */ 964 rc = kldrDyldFindNewModule(pszDll, pszPrefix, pszSuffix, enmSearch, fFlags, ppMod);967 rc = kldrDyldFindNewModule(pszDll, pszPrefix, pszSuffix, enmSearch, fFlags, &pMod); 965 968 if (!rc) 966 969 rc = kldrDyldModMap(pMod); … … 1162 1165 static void kldrDyldStackDropFrame(uint32_t iLoad1st, uint32_t iLoadEnd, int rc) 1163 1166 { 1164 uint32_t i Stack;1165 KLDRDYLD_ASSERT(iLoad End<= g_cStackMods);1166 KLDRDYLD_ASSERT(iLoad 1st== g_cStackMods);1167 uint32_t i; 1168 KLDRDYLD_ASSERT(iLoad1st <= g_cStackMods); 1169 KLDRDYLD_ASSERT(iLoadEnd == g_cStackMods); 1167 1170 1168 1171 /* 1169 1172 * First pass: Do all the cleanups we can, but don't destroy anything just yet. 1170 1173 */ 1171 for (iStack = iLoadEnd; iStack < iLoad1st; iStack++) 1172 { 1173 PKLDRDYLDMOD pMod = g_papStackMods[--iLoad1st]; 1174 i = iLoadEnd; 1175 while (i-- > iLoad1st) 1176 { 1177 PKLDRDYLDMOD pMod = g_papStackMods[i]; 1174 1178 kldrDyldStackCleanupOne(pMod, rc); 1175 1179 } … … 1179 1183 * can be completely removed. 1180 1184 */ 1181 while (iLoad1st > iLoadEnd) 1182 { 1183 /* 1184 * Pop a module. 1185 */ 1186 PKLDRDYLDMOD pMod = g_papStackMods[--iLoad1st]; 1187 g_cStackMods = iLoad1st; 1185 for (i = iLoad1st; i < iLoadEnd ; i++) 1186 { 1187 PKLDRDYLDMOD pMod = g_papStackMods[i]; 1188 1188 1189 1189 /* … … 1210 1210 kldrDyldModDeref(pMod); 1211 1211 } 1212 1213 /* 1214 * Drop the stack frame. 1215 */ 1216 g_cStackMods = iLoad1st; 1212 1217 } 1213 1218 … … 1245 1250 case KLDRSTATE_GOOD: 1246 1251 case KLDRSTATE_PENDING_GC: 1252 case KLDRSTATE_PENDING_TERMINATION: 1247 1253 break; 1248 1254 1249 1255 case KLDRSTATE_INITIALIZATION_FAILED: /* just in case */ 1250 1256 case KLDRSTATE_PENDING_INITIALIZATION: 1251 case KLDRSTATE_PENDING_TERMINATION:1252 1257 kldrDyldModUnloadPrerequisites(pMod); 1253 1258 break; … … 1309 1314 case KLDRSTATE_INITIALIZATION_FAILED: 1310 1315 case KLDRSTATE_PENDING_GC: 1311 KLDRDYLD_ASSERT(pMod->cRefs == 0); /* ??? */ 1316 KLDRDYLD_ASSERT(!pMod->cDepRefs); 1317 KLDRDYLD_ASSERT(!pMod->cDynRefs); 1312 1318 pMod->enmState = KLDRSTATE_GC; 1313 1319 kldrDyldModUnmap(pMod); … … 1428 1434 int kldrDyldFailure(int rc, const char *pszFilename, ...) 1429 1435 { 1430 kldrHlpExit(1); 1436 /** @todo print it. */ 1437 if (g_fBootstrapping); 1438 kldrHlpExit(1); 1431 1439 return rc; 1432 1440 }
Note:
See TracChangeset
for help on using the changeset viewer.