Changeset 2888 for trunk


Ignore:
Timestamp:
Nov 18, 2006, 5:14:38 PM (19 years ago)
Author:
bird
Message:

fixupsection loading.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrModLX.c

    r2887 r2888  
    874874static int kldrModLXDoLoadFixupSection(PKLDRMODLX pModLX)
    875875{
    876     return -1;
     876    int rc;
     877    uint32_t off;
     878    void *pv;
     879
     880    pv = kldrHlpAlloc(pModLX->Hdr.e32_fixupsize);
     881    if (!pv)
     882        return KLDR_ERR_NO_MEMORY;
     883
     884    off = pModLX->Hdr.e32_objtab + pModLX->Hdr.e32_ldrsize;
     885    rc = kLdrRdrRead(pModLX->pMod->pRdr, pv, pModLX->Hdr.e32_fixupsize,
     886                     off + pModLX->offHdr);
     887    if (!rc)
     888    {
     889        pModLX->pbFixupSection = pv;
     890        pModLX->pbFixupSectionLast = pModLX->pbFixupSection + pModLX->Hdr.e32_fixupsize;
     891        KLDRMODLX_ASSERT(!pModLX->paoffPageFixups);
     892        if (pModLX->Hdr.e32_fpagetab)
     893            pModLX->paoffPageFixups = (const uint32_t *)(pModLX->pbFixupSection + pModLX->Hdr.e32_fpagetab - off);
     894        KLDRMODLX_ASSERT(!pModLX->pbFixupRecs);
     895        if (pModLX->Hdr.e32_frectab)
     896            pModLX->pbFixupRecs = pModLX->pbFixupSection + pModLX->Hdr.e32_frectab - off;
     897        KLDRMODLX_ASSERT(!pModLX->pbImportMods);
     898        if (pModLX->Hdr.e32_impmod)
     899            pModLX->pbImportMods = pModLX->pbFixupSection + pModLX->Hdr.e32_impmod - off;
     900        KLDRMODLX_ASSERT(!pModLX->pbImportProcs);
     901        if (pModLX->Hdr.e32_impproc)
     902            pModLX->pbImportProcs = pModLX->pbFixupSection + pModLX->Hdr.e32_impproc - off;
     903    }
     904    else
     905        kldrHlpFree(pv);
     906    return rc;
    877907}
    878908
Note: See TracChangeset for help on using the changeset viewer.