Changeset 2893


Ignore:
Timestamp:
Dec 22, 2006, 7:01:38 PM (19 years ago)
Author:
bird
Message:

made it compile again.

Location:
trunk/kLdr
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrDyld.c

    r2887 r2893  
    525525 * @returns 0 on success and pValue and pfKind set.
    526526 * @returns KLDR_ERR_INVALID_HANDLE or KLDR_ERR_SYMBOL_NOT_FOUND on failure.
    527  * @param   hMod            The module handle.
    528  * @param   uSymbolOrdinal  The symbol ordinal. This is ignored if pszSymbolName is non-zero.
    529  * @param   pszSymbolName   The symbol name.
    530  * @param   pValue          Where to put the symbol value. Optional if pfKind is non-zero.
    531  * @param   pfKind          Where to put the symbol kind flags. Optional if pValue is non-zero.
    532  */
    533 int     kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName, uintptr_t *pValue, uint32_t *pfKind)
     527 * @param   hMod                The module handle.
     528 * @param   uSymbolOrdinal      The symbol ordinal. This is ignored if pszSymbolName is non-zero.
     529 * @param   pszSymbolName       The symbol name.
     530 * @param   pszSymbolVersion    The symbol version. Optional.
     531 * @param   pValue              Where to put the symbol value. Optional if pfKind is non-zero.
     532 * @param   pfKind              Where to put the symbol kind flags. Optional if pValue is non-zero.
     533 */
     534int     kLdrDyldQuerySymbol(HKLDRMOD hMod, uint32_t uSymbolOrdinal, const char *pszSymbolName,
     535                            const char *pszSymbolVersion, uintptr_t *pValue, uint32_t *pfKind)
    534536{
    535537    int rc;
  • trunk/kLdr/kLdrDyldMod.c

    r2883 r2893  
    932932 * pvUser points to the KLDRDYLDMOD.
    933933 */
    934 static int kldrDyldModFixupGetImportCallback(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol, const char *pszSymbol,
     934static int kldrDyldModFixupGetImportCallback(PKLDRMOD pMod, uint32_t iImport, uint32_t iSymbol,
     935                                             const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
    935936                                             PKLDRADDR puValue, uint32_t *pfKind, void *pvUser)
    936937{
     
    958959
    959960        rc = kLdrModQuerySymbol(pPrereqMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP,
    960                                 iSymbol, pszSymbol, kldrDyldModFixupGetImportCallback, pPrereqMod, puValue, pfKind);
     961                                iSymbol, pchSymbol, cchSymbol, pszVersion,
     962                                kldrDyldModFixupGetImportCallback, pPrereqMod, puValue, pfKind);
    961963        if (rc)
    962964        {
    963             if (pszSymbol)
    964                 kldrDyldFailure(rc, "%s[%d]->%s.%s", pDyldMod->pMod->pszName, iImport,
    965                                 pPrereqMod->pMod->pszName, pszSymbol);
     965            if (pchSymbol)
     966                kldrDyldFailure(rc, "%s[%d]->%s.%.*s%s", pDyldMod->pMod->pszName, iImport,
     967                                pPrereqMod->pMod->pszName, cchSymbol, pchSymbol, pszVersion ? pszVersion : "");
    966968            else
    967                 kldrDyldFailure(rc, "%s[%d]->%s.%d", pDyldMod->pMod->pszName, iImport,
    968                                 pPrereqMod->pMod->pszName, iSymbol);
     969                kldrDyldFailure(rc, "%s[%d]->%s.%d%s", pDyldMod->pMod->pszName, iImport,
     970                                pPrereqMod->pMod->pszName, iSymbol, pszVersion ? pszVersion : "");
    969971        }
    970972    }
     
    980982            KLDRADDR uValue;
    981983            rc = kLdrModQuerySymbol(pBindMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP,
    982                                     iSymbol, pszSymbol, kldrDyldModFixupGetImportCallback, pBindMod, &uValue, &fKind);
     984                                    iSymbol, pchSymbol, cchSymbol, pszVersion,
     985                                    kldrDyldModFixupGetImportCallback, pBindMod, &uValue, &fKind);
    983986            if (    !rc
    984987                &&  (   !fFound
     
    10001003        if (!fFound)
    10011004        {
    1002             if (pszSymbol)
    1003                 kldrDyldFailure(rc, "%s->%s", pDyldMod->pMod->pszName, pszSymbol);
     1005            if (pchSymbol)
     1006                kldrDyldFailure(rc, "%s->%.*s%s", pDyldMod->pMod->pszName, cchSymbol, pchSymbol, pszVersion ? pszVersion : "");
    10041007            else
    1005                 kldrDyldFailure(rc, "%s->%d", pDyldMod->pMod->pszName, iSymbol);
     1008                kldrDyldFailure(rc, "%s->%d%s", pDyldMod->pMod->pszName, iSymbol, pszVersion ? pszVersion : "");
    10061009        }
    10071010    }
     
    12771280
    12781281    rc = kLdrModQuerySymbol(pMod->pMod, NULL, KLDRMOD_BASEADDRESS_MAP,
    1279                             uSymbolOrdinal, pszSymbolName, kldrDyldModFixupGetImportCallback, pMod,
     1282                            uSymbolOrdinal, pszSymbolName, kLdrHlpStrLen(pszSymbolName), NULL,
     1283                            kldrDyldModFixupGetImportCallback, pMod,
    12801284                            &uValue, &fKind);
    12811285    if (!rc)
  • trunk/kLdr/kLdrHlp.c

    r2883 r2893  
    223223        /* not so simple. */
    224224        /** @todo I've got code for this in libc somewhere. */
     225        rc = -1;
    225226    }
    226227    if (!rc)
  • trunk/kLdr/kLdrModLX.c

    r2890 r2893  
    118118static int kldrModLXDoCreate(PKLDRRDR pRdr, off_t offNewHdr, PKLDRMODLX *ppModLX);
    119119static const uint8_t *kldrModLXDoNameTableLookupByOrdinal(const uint8_t *pbNameTable, int32_t cbNameTable, uint32_t iOrdinal);
    120 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pszSymbol, uint32_t *piSymbol);
     120static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol);
    121121#if 0
    122122static const uint8_t *kldrModLXDoNameTableLookupByName(const uint8_t *pbNameTable, int32_t cbNameTable,
     
    542542/** @copydoc kLdrModQuerySymbol */
    543543static int kldrModLXQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    544                                 const char *pszSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,
    545                                 PKLDRADDR puValue, uint32_t *pfKind)
     544                                const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
     545                                PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind)
    546546{
    547547    PKLDRMODLX                  pModLX = (PKLDRMODLX)pMod->pvData;
     
    560560     * Translate the symbol name into an ordinal.
    561561     */
    562     if (pszSymbol)
    563     {
    564         rc = kldrModLXDoNameLookup(pModLX, pszSymbol, &iSymbol);
     562    if (pchSymbol)
     563    {
     564        rc = kldrModLXDoNameLookup(pModLX, pchSymbol, cchSymbol, &iSymbol);
    565565        if (rc)
    566566            return rc;
     
    625625                    /* anyone actually using TYPEINFO will end up here. */
    626626                    KLDRMODLX_ASSERT(!"Bad bundle type");
    627                     break;
     627                    return KLDR_ERR_LX_BAD_BUNDLE;
    628628            }
    629629
     
    664664 * @returns See kLdrModQuerySymbol.
    665665 * @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.
    667668 * @param   piSymbol    Where to store the symbol ordinal.
    668669 */
    669 static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pszSymbol, uint32_t *piSymbol)
     670static int kldrModLXDoNameLookup(PKLDRMODLX pModLX, const char *pchSymbol, uint32_t cchSymbol, uint32_t *piSymbol)
    670671{
    671672
     
    774775    int rc;
    775776    uint32_t iSymbol;
    776     const char *pszSymbol;
     777    const char *pchSymbol;
     778    uint8_t cchSymbol;
    777779
    778780    if (!pfnGetForwarder)
     
    792794    {
    793795        iSymbol = pEntry->e32_variant.e32_fwd.value;
    794         pszSymbol = NULL;                   /* no symbol name. */
     796        pchSymbol = NULL;                   /* no symbol name. */
     797        cchSymbol = 0;
    795798    }
    796799    else
     
    858861                return KLDR_ERR_LX_BAD_FORWARDER;
    859862
    860             pszSymbol = NULL;               /* no symbol name. */
     863            pchSymbol = NULL;               /* no symbol name. */
     864            cchSymbol = 0;
    861865        }
    862866        else
    863867        {
    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;
    870870            iSymbol = NIL_KLDRMOD_SYM_ORDINAL;
    871871        }
     
    875875     * Resolve the forwarder.
    876876     */
    877     rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, pszSymbol, puValue, pfKind, pvUser);
     877    rc = pfnGetForwarder(pModLX->pMod, pEntry->e32_variant.e32_fwd.modord - 1, iSymbol, pchSymbol, cchSymbol, NULL, puValue, pfKind, pvUser);
    878878    if (!rc && pfKind)
    879879        *pfKind |= KLDRSYMKIND_FORWARDER;
     
    20042004         * Iterate the page map pages.
    20052005         */
    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)
    20072007        {
    20082008            const uint8_t * const   pbFixupRecEnd = pModLX->pbFixupRecs + pModLX->paoffPageFixups[iPage + pObj->o32_pagemap];
     
    21152115
    21162116                        /* resolve it. */
    2117                         rc = pfnGetImport(pMod, iModule, iSymbol, NULL, &uValue, &fKind, pvUser);
     2117                        rc = pfnGetImport(pMod, iModule, iSymbol, NULL, 0, NULL, &uValue, &fKind, pvUser);
    21182118                        if (rc)
    21192119                            return rc;
     
    21292129                        uint16_t offSymbol;
    21302130                        const uint8_t *pbSymbol;
    2131                         char szSymbol[260];
    21322131
    21332132                        /* the module ordinal */
     
    21662165
    21672166                        /* 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);
    21712169                        if (rc)
    21722170                            return rc;
     
    22632261    kldrModLXGetStackInfo,
    22642262    kldrModLXQueryMainEntrypoint,
     2263    NULL /* fixme */,
     2264    NULL /* fixme */,
    22652265    kldrModLXEnumDbgInfo,
    22662266    kldrModLXHasDbgInfo,
     
    22772277    kldrModLXGetBits,
    22782278    kldrModLXRelocateBits,
     2279    NULL /* fixme: pfnMostlyDone */,
    22792280    42 /* the end */
    22802281};
  • trunk/kLdr/kLdrModNative.c

    r2883 r2893  
    511511/** @copydoc kLdrModQuerySymbol */
    512512static int kldrModNativeQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    513                                     const char *pszSymbol, PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser,
    514                                     PKLDRADDR puValue, uint32_t *pfKind)
     513                                    const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
     514                                    PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind)
    515515{
    516516    PKLDRMODNATIVE pModNative = (PKLDRMODNATIVE)pMod->pvData;
     517    const char *pszSymbol = pchSymbol;
    517518#ifdef __OS2__
    518519    APIRET rc;
    519520    PFN pfn;
    520 
    521     if (!pszSymbol && iSymbol >= 0x10000)
     521#elif defined(__WIN__)
     522    FARPROC pfn;
     523#else
     524# error "Port me"
     525#endif
     526
     527    /* make stack copy of the symbol if it isn't zero terminated. */
     528    if (pszSymbol && pszSymbol[cchSymbol])
     529    {
     530        char *pszCopy = kLdrHlpAllocA(cchSymbol + 1);
     531        kLdrHlpMemCopy(pszCopy, pchSymbol, cchSymbol);
     532        pszCopy[cchSymbol] = '\0';
     533        pszSymbol = pszCopy;
     534    }
     535
     536#ifdef __OS2__
     537    if (!pchSymbol && iSymbol >= 0x10000)
    522538        return KLDR_ERR_SYMBOL_NOT_FOUND;
    523539
     
    550566
    551567#elif defined(__WIN__)
    552     FARPROC pfn;
    553 
    554568    if (!pszSymbol && iSymbol >= 0x10000)
    555569        return KLDR_ERR_SYMBOL_NOT_FOUND;
     
    10231037    kldrModNativeGetStackInfo,
    10241038    kldrModNativeQueryMainEntrypoint,
     1039    NULL /* fixme */,
     1040    NULL /* fixme */,
    10251041    kldrModNativeEnumDbgInfo,
    10261042    kldrModNativeHasDbgInfo,
     
    10371053    kldrModNativeGetBits,
    10381054    kldrModNativeRelocateBits,
     1055    NULL /* fixme */,
    10391056    42 /* the end */
    10401057};
  • trunk/kLdr/kLdrModPE.c

    r2891 r2893  
    685685/** @copydoc kLdrModQuerySymbol */
    686686static int kldrModPEQuerySymbol(PKLDRMOD pMod, const void *pvBits, KLDRADDR BaseAddress, uint32_t iSymbol,
    687                                 const char *pchSymbol, size_t cchSymbol, const char *pszVersion, 
     687                                const char *pchSymbol, size_t cchSymbol, const char *pszVersion,
    688688                                PFNKLDRMODGETIMPORT pfnGetForwarder, void *pvUser, PKLDRADDR puValue, uint32_t *pfKind)
    689689
     
    911911             * Now the rest is up to the callback (almost).
    912912             */
    913             rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol, 
     913            rc = pfnGetForwarder(pModPE->pMod, iImpModule, iSymbol, pszSymbol,
    914914                                 pszSymbol ? kLdrHlpStrLen(pszSymbol) : 0, NULL, puValue, pfKind, pvUser);
    915915            if (!rc && pfKind)
     
    15871587            {
    15881588                const IMAGE_IMPORT_BY_NAME *pName = KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const IMAGE_IMPORT_BY_NAME *);
    1589                 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, 
     1589                rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name,
    15901590                                  kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser);
    15911591            }
     
    16531653            {
    16541654                const IMAGE_IMPORT_BY_NAME *pName = KLDRMODPE_RVA2TYPE(pvMapping, pThunk->u1.Ordinal, const IMAGE_IMPORT_BY_NAME *);
    1655                 rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name, 
     1655                rc = pfnGetImport(pMod, iImp, NIL_KLDRMOD_SYM_ORDINAL, (const char *)pName->Name,
    16561656                                  kLdrHlpStrLen((const char *)pName->Name), NULL, &Value, &fKind, pvUser);
    16571657            }
  • trunk/kLdr/kLdrRdr.c

    r2861 r2893  
    105105int kLdrRdrOpen(PPKLDRRDR ppRdr, const char *pszFilename)
    106106{
    107     int             rc;
     107    int             rc = -1;
    108108    PCKLDRRDROPS    pCur;
    109109    for (pCur = g_pRdrHead; pCur; pCur = pCur->pNext)
  • trunk/kLdr/kLdrRdrFile.c

    r2883 r2893  
    10741074    if ((uintptr_t)pszFilename >= 0x20000000)
    10751075    {
    1076         char *psz = (char *)kLdrHlpAllocA(cchFilename + 1);
     1076        char *psz;
     1077        cchFilename = kLdrHlpStrLen(szFilename);
     1078        psz = (char *)kLdrHlpAllocA(cchFilename + 1);
    10771079        kLdrHlpMemCopy(psz, pszFilename, cchFilename + 1);
    10781080        pszFilename = psz;
Note: See TracChangeset for help on using the changeset viewer.