Changeset 3244 for trunk/tools/dbginfo/kHll.cpp
- Timestamp:
- Mar 26, 2000, 11:56:38 PM (26 years ago)
- 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:18bird Exp $1 /* $Id: kHll.cpp,v 1.4 2000-03-26 21:56:37 bird Exp $ 2 2 * 3 3 * kHll - Implementation of the class kHll. … … 101 101 /** 102 102 * Creates an HLL public symbol entry. 103 * @param pszName Symbol name. 103 * @param pachName Symbol name. 104 * @param cchName Length of symbol name. 104 105 * @param off Offset into the object. 105 * @param iObj 106 * @param iObject LX Object index. 106 107 * @param iType Type index. (index into type table) 107 108 */ 108 109 kHllPubSymEntry::kHllPubSymEntry( 109 const char * pszName, 110 const char * pachName, 111 int cchName, 110 112 unsigned long off, 111 unsigned short iObj ,113 unsigned short iObject, 112 114 unsigned short iType 113 115 ) 114 116 { 115 pPubSym = (PHLLPUBLICSYM)malloc( strlen(pszName)+ sizeof(HLLPUBLICSYM));117 pPubSym = (PHLLPUBLICSYM)malloc(cchName + sizeof(HLLPUBLICSYM)); 116 118 assert(pPubSym != NULL); 117 119 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); 120 123 pPubSym->off = off; 121 pPubSym->iObj = iObj;124 pPubSym->iObject = iObject; 122 125 pPubSym->iType = iType; 123 126 } … … 173 176 * @param pszName Module name. (NULL is not allowed!) 174 177 * @param iLib Library index. 175 * @param c ObjectsNumber of objects in the array.176 * @param pa ObjectsPointer to an array of objects.178 * @param cSegInfo Number of objects in the array. 179 * @param paSegInfo Pointer to an array of objects. 177 180 */ 178 181 kHllModuleEntry::kHllModuleEntry( 179 182 const char * pszName, 180 183 unsigned short iLib, 181 unsigned char c Objects/*= 0 */,182 P MODOBJECT paObjects/*= NULL */184 unsigned char cSegInfo/*= 0 */, 185 PHLLSEGINFO paSegInfo/*= NULL */ 183 186 ) 184 187 : fValidOffsetsAndSizes(FALSE) … … 186 189 int i; 187 190 int cchName; 188 PHLL OBJECT pObj;191 PHLLSEGINFO pSegInfo; 189 192 190 193 /* … … 192 195 */ 193 196 assert(pszName != NULL); 194 assert(c Objects == 0 || paObjects!= NULL);197 assert(cSegInfo == 0 || paSegInfo != NULL); 195 198 196 199 /* … … 199 202 cchName = strlen(pszName); 200 203 pModule = (PHLLMODULE)malloc(sizeof(HLLMODULE) + cchName + 201 sizeof(HLL OBJECT) * min((cObjects- 1), 3));204 sizeof(HLLSEGINFO) * min((cSegInfo - 1), 3)); 202 205 assert(pModule != NULL); 203 206 memset(pModule, 0, sizeof(*pModule)); … … 206 209 pModule->chVerMajor = 4; 207 210 pModule->chVerMinor = 0; 208 pModule->c Objects = cObjects;211 pModule->cSegInfo = cSegInfo; 209 212 pModule->iLib = iLib; 210 213 pModule->usDebugStyle = HLL_MOD_STYLE; … … 213 216 214 217 /* objects */ 215 if (c Objects> 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, p Obj = (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++) 222 225 { 223 p Obj->cb = paObjects[i].cb;224 p Obj->iObj = paObjects[i].iObject;225 p Obj->off = paObjects[i].offset;226 pSegInfo->iObject = paSegInfo[i].iObject; 227 pSegInfo->cb = paSegInfo[i].cb; 228 pSegInfo->off = paSegInfo[i].off; 226 229 } 227 230 } … … 248 251 * @param cb Size of module data (in the object). 249 252 */ 250 BOOL kHllModuleEntry::add Object(253 BOOL kHllModuleEntry::addSegInfo( 251 254 unsigned short int iObject, 252 255 unsigned long off, … … 259 262 * Reallocate? (Note that we'll initially allocated space for 3 objects.) 260 263 */ 261 if (pModule->c Objects>= 3)264 if (pModule->cSegInfo >= 3) 262 265 { 263 266 void *pv = realloc(pModule, sizeof(HLLMODULE) + pModule->cchName 264 + (pModule->c Objects + 1) * sizeof(HLLOBJECT));267 + (pModule->cSegInfo + 1) * sizeof(HLLSEGINFO)); 265 268 assert(pv != NULL); 266 269 if (pv == NULL) … … 273 276 * Add module. 274 277 */ 275 if (pModule->c Objects== 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; 280 283 } 281 284 else 282 285 { 283 PHLL OBJECT pObject = (PHLLOBJECT)(pModule->cObjects * sizeof(HLLOBJECT)284 + pModule->achName[pModule->cchName]);285 p Object->cb = cb;286 p Object->off = off;287 p Object->iObj= iObject;288 } 289 pModule->c Objects++;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++; 290 293 291 294 return TRUE; … … 309 312 ) 310 313 { 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 */ 329 const 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 { 311 337 kHllPubSymEntry * pEntry; 312 338 313 339 /* parameter assertion */ 314 assert(p szName != NULL);340 assert(pachName != NULL); 315 341 316 342 /* … … 320 346 */ 321 347 pEntry = new kHllPubSymEntry( 322 pszName, 348 pachName, 349 cchName, 323 350 off, 324 351 iObject, … … 332 359 return pEntry; 333 360 } 361 334 362 335 363 … … 616 644 */ 617 645 hllHdr.offDirectory = lPosDir - lPosStart; 646 if (fseek(phFile, lPosStart, SEEK_SET) != 0) 647 return -2; 618 648 cch = fwrite(&hllHdr, 1, sizeof(hllHdr), phFile); 619 649 if (cch != sizeof(hllHdr)) 620 650 return -1; 621 622 651 623 652 return cch; … … 649 678 * @param pszName Module name 650 679 * @param pvLib Library module handle. 651 * @param c ObjectsNumber of objects in the array.652 * @param pa ObjectsPointer to an array of objects.680 * @param cSegInfo Number of objects in the array. 681 * @param paSegInfo Pointer to an array of objects. 653 682 */ 654 683 kHllModuleEntry * kHll::addModule( 655 684 const char * pszName, 656 685 const void * pvLib, 657 unsigned c Objects,658 P MODOBJECT paObjects)686 unsigned cSegInfo, 687 PHLLSEGINFO paSegInfo) 659 688 { 660 689 kHllModuleEntry * pEntry; … … 664 693 pszName, 665 694 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 */ 713 kHllModuleEntry * 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); 668 731 669 732 Modules.insert(pEntry); … … 733 796 if (cch == sizeof(ehdr)) 734 797 { 735 if (ehdr.e_magic == NEMAGIC)798 if (ehdr.e_magic == EMAGIC) 736 799 lPosLXHdr = ehdr.e_lfanew; 737 800 else … … 748 811 * Check if there is any debug info. 749 812 */ 750 if (e32.e32_debuginfo > 0 && e32.e32_debuginfo >0)813 if (e32.e32_debuginfo == 0 && e32.e32_debuginfo == 0) 751 814 { 752 815 long lPosDebug;
Note:
See TracChangeset
for help on using the changeset viewer.