Changeset 2893 for trunk/kLdr/kLdrModLX.c
- Timestamp:
- Dec 22, 2006, 7:01:38 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kLdr/kLdrModLX.c
r2890 r2893 118 118 static int kldrModLXDoCreate(PKLDRRDR pRdr, off_t offNewHdr, PKLDRMODLX *ppModLX); 119 119 static const uint8_t *kldrModLXDoNameTableLookupByOrdinal(const uint8_t *pbNameTable, int32_t cbNameTable, uint32_t iOrdinal); 120 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *p szSymbol, uint32_t *piSymbol);120 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol); 121 121 #if 0 122 122 static const uint8_t *kldrModLXDoNameTableLookupByName(const uint8_t *pbNameTable, int32_t cbNameTable, … … 542 542 /** @copydoc kLdrModQuerySymbol */ 543 543 static int kldrModLXQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol, 544 const char *p szSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,545 P KLDRADDR puValue, uint32_t *pfKind)544 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 545 PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind) 546 546 { 547 547 PKLDRMODLX pModLX = (PKLDRMODLX)pMod->pvData; … … 560 560 * Translate the symbol name into an ordinal. 561 561 */ 562 if (p szSymbol)563 { 564 rc = kldrModLXDoNameLookup(pModLX, p szSymbol, &iSymbol);562 if (pchSymbol) 563 { 564 rc = kldrModLXDoNameLookup(pModLX, pchSymbol, cchSymbol, &iSymbol); 565 565 if (rc) 566 566 return rc; … … 625 625 /* anyone actually using TYPEINFO will end up here. */ 626 626 KLDRMODLX_ASSERT(!"Bad bundle type"); 627 break;627 return KLDR_ERR_LX_BAD_BUNDLE; 628 628 } 629 629 … … 664 664 * @returns See kLdrModQuerySymbol. 665 665 * @param pModLX The module to lookup the symbol in. 666 * @param pszSymbol The symbol to lookup. 666 * @param pchSymbol The symbol to lookup. 667 * @param cchSymbol The symbol name length. 667 668 * @param piSymbol Where to store the symbol ordinal. 668 669 */ 669 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *p szSymbol, uint32_t *piSymbol)670 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol) 670 671 { 671 672 … … 774 775 int rc; 775 776 uint32_t iSymbol; 776 const char *pszSymbol; 777 const char *pchSymbol; 778 uint8_t cchSymbol; 777 779 778 780 if (!pfnGetForwarder) … … 792 794 { 793 795 iSymbol = pEntry->e32_variant.e32_fwd.value; 794 pszSymbol = NULL; /* no symbol name. */ 796 pchSymbol = NULL; /* no symbol name. */ 797 cchSymbol = 0; 795 798 } 796 799 else … … 858 861 return KLDR_ERR_LX_BAD_FORWARDER; 859 862 860 pszSymbol = NULL; /* no symbol name. */ 863 pchSymbol = NULL; /* no symbol name. */ 864 cchSymbol = 0; 861 865 } 862 866 else 863 867 { 864 /* Make a stack copy of the name that's zero terminated. */ 865 char *pszCopy = kLdrHlpAllocA(*pbName + 1); 866 kLdrHlpMemCopy(pszCopy, pbName + 1, *pbName); 867 pszCopy[*pbName] = '\0'; 868 869 pszSymbol = pszCopy; 868 pchSymbol = (char *)pbName + 1; 869 cchSymbol = *pbName; 870 870 iSymbol = NIL_KLDRMOD_SYM_ORDINAL; 871 871 } … … 875 875 * Resolve the forwarder. 876 876 */ 877 rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, p szSymbol, puValue, pfKind, pvUser);877 rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, pchSymbol, cchSymbol, NULL, puValue, pfKind, pvUser); 878 878 if (!rc && pfKind) 879 879 *pfKind |= KLDRSYMKIND_FORWARDER; … … 2004 2004 * Iterate the page map pages. 2005 2005 */ 2006 for (iPage = 0 ; !rc && iPage < pObj->o32_mapsize; iPage++, pbPage += OBJPAGELEN)2006 for (iPage = 0, rc = 0; !rc && iPage < pObj->o32_mapsize; iPage++, pbPage += OBJPAGELEN) 2007 2007 { 2008 2008 const uint8_t * const pbFixupRecEnd = pModLX->pbFixupRecs + pModLX->paoffPageFixups[iPage + pObj->o32_pagemap]; … … 2115 2115 2116 2116 /* resolve it. */ 2117 rc = pfnGetImport(pMod, iModule, iSymbol, NULL, &uValue, &fKind, pvUser);2117 rc = pfnGetImport(pMod, iModule, iSymbol, NULL, 0, NULL, &uValue, &fKind, pvUser); 2118 2118 if (rc) 2119 2119 return rc; … … 2129 2129 uint16_t offSymbol; 2130 2130 const uint8_t *pbSymbol; 2131 char szSymbol[260];2132 2131 2133 2132 /* the module ordinal */ … … 2166 2165 2167 2166 /* resolve it. */ 2168 kLdrHlpMemCopy(szSymbol, pbSymbol + 1, *pbSymbol); 2169 szSymbol[*pbSymbol] = '\0'; 2170 rc = pfnGetImport(pMod, iModule, NIL_KLDRMOD_SYM_ORDINAL, szSymbol, &uValue, &fKind, pvUser); 2167 rc = pfnGetImport(pMod, iModule, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pbSymbol + 1, *pbSymbol, NULL, 2168 &uValue, &fKind, pvUser); 2171 2169 if (rc) 2172 2170 return rc; … … 2263 2261 kldrModLXGetStackInfo, 2264 2262 kldrModLXQueryMainEntrypoint, 2263 NULL /* fixme */, 2264 NULL /* fixme */, 2265 2265 kldrModLXEnumDbgInfo, 2266 2266 kldrModLXHasDbgInfo, … … 2277 2277 kldrModLXGetBits, 2278 2278 kldrModLXRelocateBits, 2279 NULL /* fixme: pfnMostlyDone */, 2279 2280 42 /* the end */ 2280 2281 };
Note:
See TracChangeset
for help on using the changeset viewer.