Changeset 2875 for trunk/kLdr/kLdrDyld.c
- Timestamp:
- Nov 12, 2006, 9:59:45 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrDyld.c
r2874 r2875 98 98 uint32_t kLdrDyldFlags = 0; 99 99 /** The default search method. */ 100 KLDRDYLDSEARCH kLdrDyldSearch = KLDRDYLD_SEARCH_ INVALID;100 KLDRDYLDSEARCH kLdrDyldSearch = KLDRDYLD_SEARCH_HOST; 101 101 102 102 … … 146 146 * @{ */ 147 147 void kldrDyldDoLoadExeStackSwitch(PKLDRDYLDMOD pExe, void *pvStack, size_t cbStack); 148 void kldrDyldDoLoadExe(PKLDRDYLDMOD pExe);149 148 static int kldrDyldDoLoad(const char *pszDll, const char *pszPrefix, const char *pszSuffix, KLDRDYLDSEARCH enmSearch, 150 149 unsigned fFlags, PPKLDRDYLDMOD ppMod, char *pszErr, size_t cchErr); … … 229 228 * @param pvOS OS specific argument. 230 229 */ 231 #ifndef __OS2__ 232 void kLdrDyldLoadExe(P KLDREXEARGS pArgs, void *pvOS)230 #ifndef __OS2__ /* kLdrDyldLoadExe is implemented in assembly on OS/2. */ 231 void kLdrDyldLoadExe(PCKLDREXEARGS pArgs, void *pvOS) 233 232 #else 234 void kldrDyldLoadExe(P KLDREXEARGS pArgs, void *pvOS)233 void kldrDyldLoadExe(PCKLDREXEARGS pArgs, void *pvOS) 235 234 #endif 236 235 { … … 241 240 242 241 /* 243 * Copy the arguments into the globals and do loader init (probably already initialized). 244 */ 245 kLdrDyldFlags = pArgs->fFlags; 242 * Indicate that we're boostrapping and ensure that initialization was successful. 243 */ 244 g_fBootstrapping = 1; 245 rc = kldrInit(); 246 if (rc) 247 kldrDyldFailure(rc, "Init failure, rc=%d", rc); 248 249 /* 250 * Validate the argument package. 251 */ 252 if (pArgs->fFlags & ~( KLDRYDLD_LOAD_FLAGS_GLOBAL_SYMBOLS 253 | KLDRYDLD_LOAD_FLAGS_DEEP_SYMBOLS 254 | KLDRDYLD_LOAD_FLAGS_RECURSIVE_INIT 255 | KLDRYDLD_LOAD_FLAGS_SPECIFIC_MODULE)) 256 kldrDyldFailure(KLDR_ERR_INVALID_PARAMETER, "Bad fFlags=%#x", pArgs->fFlags); 257 if ( pArgs->enmSearch <= KLDRDYLD_SEARCH_INVALID 258 || pArgs->enmSearch >= KLDRDYLD_SEARCH_END) 259 kldrDyldFailure(KLDR_ERR_INVALID_PARAMETER, "Bad enmSearch=%d", pArgs->enmSearch); 260 261 /* 262 * Set defaults. 263 */ 264 kLdrDyldFlags |= (pArgs->fFlags & KLDRDYLD_LOAD_FLAGS_RECURSIVE_INIT); 246 265 kLdrDyldSearch = pArgs->enmSearch; 266 267 /** @todo make sense of this default prefix/suffix stuff. */ 247 268 if (pArgs->szDefPrefix[0] != '\0') 248 269 kLdrHlpMemCopy(kLdrDyldDefPrefix, pArgs->szDefPrefix, KLDR_MIN(sizeof(pArgs->szDefPrefix), sizeof(kLdrDyldDefPrefix))); 249 270 if (pArgs->szDefSuffix[0] != '\0') 250 271 kLdrHlpMemCopy(kLdrDyldDefSuffix, pArgs->szDefSuffix, KLDR_MIN(sizeof(pArgs->szDefSuffix), sizeof(kLdrDyldDefSuffix))); 251 /* append */ /** @todo create a function for doing this, an exposed api preferably. */ 252 cbStack = sizeof(kLdrDyldPath) - kLdrHlpStrLen(kLdrDyldPath); /* borrow cbStack for a itty bit. */ 253 kLdrHlpMemCopy(kLdrDyldPath, pArgs->szLibPath, KLDR_MIN(sizeof(pArgs->szLibPath), cbStack)); 254 kLdrDyldPath[sizeof(kLdrDyldPath) - 1] = '\0'; 255 256 g_fBootstrapping = 1; 257 rc = kldrInit(); 258 if (rc) 259 kldrDyldFailure(rc, "Init failure, rc=%d", rc); 272 273 /** @todo append that path to the one for the specified search method. */ 274 /** @todo create a function for doing this, an exposed api preferably. */ 275 /* append path */ 276 cbStack = sizeof(kLdrDyldLibraryPath) - kLdrHlpStrLen(kLdrDyldLibraryPath); /* borrow cbStack for a itty bit. */ 277 kLdrHlpMemCopy(kLdrDyldLibraryPath, pArgs->szLibPath, KLDR_MIN(sizeof(pArgs->szLibPath), cbStack)); 278 kLdrDyldLibraryPath[sizeof(kLdrDyldLibraryPath) - 1] = '\0'; 260 279 261 280 /* … … 269 288 * Open and map the executable module before we join paths with kLdrDyldLoad(). 270 289 */ 271 rc = kldrDyldFindNewModule(pArgs->szExecutable, NULL, NULL, kLdrDyldSearch,272 kLdrDyldFlags | KLDRDYLD_LOAD_FLAGS_EXECUTABLE, &pExe);290 rc = kldrDyldFindNewModule(pArgs->szExecutable, NULL, NULL, pArgs->enmSearch, 291 pArgs->fFlags | KLDRDYLD_LOAD_FLAGS_EXECUTABLE, &pExe); 273 292 if (rc) 274 293 kldrDyldFailure(rc, "Can't find/open the executable '%s', rc=%d", pArgs->szExecutable, rc); … … 745 764 { 746 765 if (fFlags & KLDRDYLD_LOAD_FLAGS_EXECUTABLE) 747 pLoadedMod->cDepRefs = 0xffff; 766 { 767 pLoadedMod->cDepRefs++; /* just make it stick. */ 768 pLoadedMod->cRefs++; 769 } 748 770 else 749 771 rc = kldrDyldModDynamicLoad(pLoadedMod);
Note:
See TracChangeset
for help on using the changeset viewer.