Changeset 2887


Ignore:
Timestamp:
Nov 18, 2006, 4:37:00 PM (19 years ago)
Author:
bird
Message:

Bugfixing.

Location:
trunk/kLdr
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrDyld.c

    r2875 r2887  
    695695    uint32_t iLoadEnd = kldrDyldStackFrameCompleted();
    696696    if (rc)
     697    {
     698        kldrDyldModAddRef(pLoadedMod);
    697699        kldrDyldStackCleanupOne(pLoadedMod, rc); /* in case it didn't get pushed onto the stack. */
     700        kldrDyldModDeref(pLoadedMod);
     701    }
    698702
    699703    /*
  • trunk/kLdr/kLdrModLX.c

    r2886 r2887  
    386386        if (pModLX->paObjs[i].o32_base + pModLX->paObjs[i].o32_size <= pModLX->paObjs[i].o32_base)
    387387            return KLDR_ERR_LX_BAD_OBJECT_TABLE;
    388         if (pModLX->paObjs[i].o32_mapsize > pModLX->paObjs[i].o32_size / OBJPAGELEN)
     388        if (pModLX->paObjs[i].o32_mapsize > (pModLX->paObjs[i].o32_size + (OBJPAGELEN - 1)))
    389389            return KLDR_ERR_LX_BAD_OBJECT_TABLE;
    390390        if (    pModLX->paObjs[i].o32_mapsize
     
    911911            break;
    912912
    913         iName = *(pbNameTable + cbName)
    914               | ((unsigned)*(pbNameTable + cbName + 1) << 8);
     913        iName = *(pbNameTable + cbName + 1)
     914              | ((unsigned)*(pbNameTable + cbName + 2) << 8);
    915915        if (iName == iOrdinal)
    916916            return pbNameTable;
     
    927927static int kldrModLXGetImport(PKLDRMOD pMod, const void *pvBits, uint32_t iImport, char *pszName, size_t cchName)
    928928{
    929     /*PKLDRMODLX      pModLX = (PKLDRMODLX)pMod->pvData;*/
    930     const uint8_t * pb = NULL;
     929    PKLDRMODLX      pModLX = (PKLDRMODLX)pMod->pvData;
     930    const uint8_t * pb;
    931931    int             rc;
    932932
    933     /** @todo */
    934 
     933    /*
     934     * Validate
     935     */
     936    if (iImport >= pModLX->Hdr.e32_impmodcnt)
     937        return KLDR_ERR_IMPORT_ORDINAL_OUT_OF_BOUNDS;
     938
     939    /*
     940     * Lazy loading the fixup section.
     941     */
     942    if (!pModLX->pbImportMods)
     943    {
     944        rc = kldrModLXDoLoadFixupSection(pModLX);
     945        if (rc)
     946            return rc;
     947    }
     948
     949    /*
     950     * Iterate the module import table until we reach the requested import ordinal.
     951     */
     952    pb = pModLX->pbImportMods;
     953    while (iImport-- > 0)
     954        pb += *pb + 1;
     955
     956    /*
     957     * Copy out the result.
     958     */
    935959    if (*pb < cchName)
    936960    {
Note: See TracChangeset for help on using the changeset viewer.