Ignore:
Timestamp:
Mar 26, 2000, 11:56:38 PM (26 years ago)
Author:
bird
Message:

Temporary checkin.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/dbginfo/kHll.cpp

    r3239 r3244  
    1 /* $Id: kHll.cpp,v 1.3 2000-03-26 14:16:18 bird Exp $
     1/* $Id: kHll.cpp,v 1.4 2000-03-26 21:56:37 bird Exp $
    22 *
    33 * kHll - Implementation of the class kHll.
     
    101101/**
    102102 * Creates an HLL public symbol entry.
    103  * @param     pszName   Symbol name.
     103 * @param     pachName  Symbol name.
     104 * @param     cchName   Length of symbol name.
    104105 * @param     off       Offset into the object.
    105  * @param     iObj      LX Object index.
     106 * @param     iObject   LX Object index.
    106107 * @param     iType     Type index. (index into type table)
    107108 */
    108109kHllPubSymEntry::kHllPubSymEntry(
    109         const char *        pszName,
     110        const char *        pachName,
     111        int                 cchName,
    110112        unsigned long       off,
    111         unsigned short      iObj,
     113        unsigned short      iObject,
    112114        unsigned short      iType
    113115        )
    114116{
    115     pPubSym = (PHLLPUBLICSYM)malloc(strlen(pszName) + sizeof(HLLPUBLICSYM));
     117    pPubSym = (PHLLPUBLICSYM)malloc(cchName + sizeof(HLLPUBLICSYM));
    116118    assert(pPubSym != NULL);
    117119
    118     pPubSym->cchName = strlen(pszName);
    119     strcpy((char*)&pPubSym->achName[0], pszName);
     120    pPubSym->cchName = cchName;
     121    pPubSym->achName[0] = '\0';
     122    strncat((char*)&pPubSym->achName[0], pachName, cchName);
    120123    pPubSym->off = off;
    121     pPubSym->iObj = iObj;
     124    pPubSym->iObject = iObject;
    122125    pPubSym->iType = iType;
    123126}
     
    173176 * @param     pszName       Module name. (NULL is not allowed!)
    174177 * @param     iLib          Library index.
    175  * @param     cObjects      Number of objects in the array.
    176  * @param     paObjects     Pointer to an array of objects.
     178 * @param     cSegInfo      Number of objects in the array.
     179 * @param     paSegInfo     Pointer to an array of objects.
    177180 */
    178181kHllModuleEntry::kHllModuleEntry(
    179182        const char *        pszName,
    180183        unsigned short      iLib,
    181         unsigned char       cObjects/*= 0 */,
    182         PMODOBJECT          paObjects/*= NULL */
     184        unsigned char       cSegInfo/*= 0 */,
     185        PHLLSEGINFO         paSegInfo/*= NULL */
    183186        )
    184187: fValidOffsetsAndSizes(FALSE)
     
    186189    int         i;
    187190    int         cchName;
    188     PHLLOBJECT  pObj;
     191    PHLLSEGINFO pSegInfo;
    189192
    190193    /*
     
    192195     */
    193196    assert(pszName != NULL);
    194     assert(cObjects == 0 || paObjects != NULL);
     197    assert(cSegInfo == 0 || paSegInfo != NULL);
    195198
    196199    /*
     
    199202    cchName = strlen(pszName);
    200203    pModule = (PHLLMODULE)malloc(sizeof(HLLMODULE) + cchName +
    201                                  sizeof(HLLOBJECT) * min((cObjects - 1), 3));
     204                                 sizeof(HLLSEGINFO) * min((cSegInfo - 1), 3));
    202205    assert(pModule != NULL);
    203206    memset(pModule, 0, sizeof(*pModule));
     
    206209    pModule->chVerMajor = 4;
    207210    pModule->chVerMinor = 0;
    208     pModule->cObjects = cObjects;
     211    pModule->cSegInfo = cSegInfo;
    209212    pModule->iLib = iLib;
    210213    pModule->usDebugStyle = HLL_MOD_STYLE;
     
    213216
    214217    /* objects */
    215     if (cObjects > 0)
    216     {
    217         pModule->Object.cb   = paObjects->cb;
    218         pModule->Object.iObj = paObjects->iObject;
    219         pModule->Object.off  = paObjects->offset;
    220 
    221         for (i = 1, pObj = (PHLLOBJECT)&pModule->achName[cchName]; i < cObjects; i++, pObj++)
     218    if (cSegInfo > 0)
     219    {
     220        pModule->SegInfo0.iObject = paSegInfo->iObject;
     221        pModule->SegInfo0.cb      = paSegInfo->cb;
     222        pModule->SegInfo0.off     = paSegInfo->off;
     223
     224        for (i = 1, pSegInfo = (PHLLSEGINFO)&pModule->achName[cchName]; i < cSegInfo; i++, pSegInfo++)
    222225        {
    223             pObj->cb   = paObjects[i].cb;
    224             pObj->iObj = paObjects[i].iObject;
    225             pObj->off  = paObjects[i].offset;
     226            pSegInfo->iObject   = paSegInfo[i].iObject;
     227            pSegInfo->cb        = paSegInfo[i].cb;
     228            pSegInfo->off       = paSegInfo[i].off;
    226229        }
    227230    }
     
    248251 * @param     cb        Size of module data (in the object).
    249252 */
    250 BOOL            kHllModuleEntry::addObject(
     253BOOL            kHllModuleEntry::addSegInfo(
    251254                    unsigned short int  iObject,
    252255                    unsigned long       off,
     
    259262     * Reallocate? (Note that we'll initially allocated space for 3 objects.)
    260263     */
    261     if (pModule->cObjects >= 3)
     264    if (pModule->cSegInfo >= 3)
    262265    {
    263266        void *pv = realloc(pModule, sizeof(HLLMODULE) + pModule->cchName
    264                            + (pModule->cObjects + 1) * sizeof(HLLOBJECT));
     267                           + (pModule->cSegInfo + 1) * sizeof(HLLSEGINFO));
    265268        assert(pv != NULL);
    266269        if (pv == NULL)
     
    273276     * Add module.
    274277     */
    275     if (pModule->cObjects == 0)
    276     {
    277         pModule->Object.cb = cb;
    278         pModule->Object.off = off;
    279         pModule->Object.iObj = iObject;
     278    if (pModule->cSegInfo == 0)
     279    {
     280        pModule->SegInfo0.cb = cb;
     281        pModule->SegInfo0.off = off;
     282        pModule->SegInfo0.iObject = iObject;
    280283    }
    281284    else
    282285    {
    283         PHLLOBJECT pObject =  (PHLLOBJECT)(pModule->cObjects * sizeof(HLLOBJECT)
    284                                            + pModule->achName[pModule->cchName]);
    285         pObject->cb = cb;
    286         pObject->off = off;
    287         pObject->iObj = iObject;
    288     }
    289     pModule->cObjects++;
     286        PHLLSEGINFO pSegInfo =  (PHLLSEGINFO)(pModule->cSegInfo * sizeof(HLLSEGINFO)
     287                                              + pModule->achName[pModule->cchName]);
     288        pSegInfo->cb = cb;
     289        pSegInfo->off = off;
     290        pSegInfo->iObject = iObject;
     291    }
     292    pModule->cSegInfo++;
    290293
    291294    return TRUE;
     
    309312                    )
    310313{
     314    assert(pszName != NULL);
     315    return addPublicSymbol(pszName, strlen(pszName), off, iObject, pvType);
     316}
     317
     318
     319
     320/**
     321 * Adds a public symbol.
     322 * @returns   Handle to the symbol. NULL on error.
     323 * @param     pachName   Symbol name.
     324 * @param     cchName    Name length.
     325 * @param     off        Offset into the LX Object of the symbol.
     326 * @param     iObject    LX Object index.
     327 * @param     pvType     Type handle. NULL if not type.
     328 */
     329const void *    kHllModuleEntry::addPublicSymbol(
     330                    const char *        pachName,
     331                    int                 cchName,
     332                    unsigned long int   off,
     333                    unsigned short int  iObject,
     334                    const void *        pvType
     335                    )
     336{
    311337    kHllPubSymEntry *   pEntry;
    312338
    313339    /* parameter assertion */
    314     assert(pszName != NULL);
     340    assert(pachName != NULL);
    315341
    316342    /*
     
    320346     */
    321347    pEntry = new kHllPubSymEntry(
    322         pszName,
     348        pachName,
     349        cchName,
    323350        off,
    324351        iObject,
     
    332359    return pEntry;
    333360}
     361
    334362
    335363
     
    616644     */
    617645    hllHdr.offDirectory = lPosDir - lPosStart;
     646    if (fseek(phFile, lPosStart, SEEK_SET) != 0)
     647        return -2;
    618648    cch = fwrite(&hllHdr, 1, sizeof(hllHdr), phFile);
    619649    if (cch != sizeof(hllHdr))
    620650        return -1;
    621 
    622651
    623652    return cch;
     
    649678 * @param    pszName    Module name
    650679 * @param    pvLib      Library module handle.
    651  * @param    cObjects   Number of objects in the array.
    652  * @param    paObjects  Pointer to an array of objects.
     680 * @param    cSegInfo   Number of objects in the array.
     681 * @param    paSegInfo  Pointer to an array of objects.
    653682 */
    654683kHllModuleEntry *   kHll::addModule(
    655684                        const char *        pszName,
    656685                        const void *        pvLib,
    657                         unsigned            cObjects,
    658                         PMODOBJECT          paObjects)
     686                        unsigned            cSegInfo,
     687                        PHLLSEGINFO         paSegInfo)
    659688{
    660689    kHllModuleEntry *   pEntry;
     
    664693        pszName,
    665694        pvLib == NULL ? 0 : -1, //FIXME/TODO: Libs->getIndex(pvLib); check if 0 or -1;
    666         cObjects,
    667         paObjects);
     695        cSegInfo,
     696        paSegInfo);
     697
     698    Modules.insert(pEntry);
     699    return pEntry;
     700}
     701
     702
     703
     704/**
     705 * Adds a module.
     706 * @returns  Pointer to the module object added. NULL on error.
     707 * @param    pachName   Module name
     708 * @param    cchName    Length of modulename
     709 * @param    pvLib      Library module handle.
     710 * @param    cSegInfo   Number of objects in the array.
     711 * @param    paSegInfo  Pointer to an array of objects.
     712 */
     713kHllModuleEntry *   kHll::addModule(
     714                        const char *        pachName,
     715                        unsigned            cchName,
     716                        const void *        pvLib,
     717                        unsigned            cSegInfo,
     718                        PHLLSEGINFO         paSegInfo)
     719{
     720    char szModName[256];
     721    kHllModuleEntry *   pEntry;
     722    assert(pachName != NULL && cchName > 0);
     723
     724    szModName[0] = '\0';
     725    strncat(szModName, pachName, min(cchName, 255));
     726    pEntry = new kHllModuleEntry(
     727        szModName,
     728        pvLib == NULL ? 0 : -1, //FIXME/TODO: Libs->getIndex(pvLib); check if 0 or -1;
     729        cSegInfo,
     730        paSegInfo);
    668731
    669732    Modules.insert(pEntry);
     
    733796        if (cch == sizeof(ehdr))
    734797        {
    735             if (ehdr.e_magic == NEMAGIC)
     798            if (ehdr.e_magic == EMAGIC)
    736799                lPosLXHdr = ehdr.e_lfanew;
    737800            else
     
    748811                         * Check if there is any debug info.
    749812                         */
    750                         if (e32.e32_debuginfo > 0 && e32.e32_debuginfo > 0)
     813                        if (e32.e32_debuginfo == 0 && e32.e32_debuginfo == 0)
    751814                        {
    752815                            long lPosDebug;
Note: See TracChangeset for help on using the changeset viewer.