static void DoAltDef( comdat_info *info ) /***************************************/ { if( !(LinkFlags & INC_LINK_FLAG) ) { FreeSegData( info->sdata ); } else { Ring2Append( &CurrMod->segs, info->sdata ); info->sdata->isdead = TRUE; InfoCDatAltDef( info ); } }
static void AllocSeg( void *_snode, void *dummy ) /***********************************************/ { segnode *snode = _snode; segdata *sdata; char *clname; char *sname; group_entry *group; bool isdbi; dummy = dummy; sdata = snode->entry; if( sdata == NULL ) return; sname = sdata->u.name; if( CurrMod->modinfo & MOD_IMPORT_LIB ) { if( sdata->isidata || sdata->iscode ) { if( sdata->iscode ) { snode->info |= SEG_CODE; } snode->info |= SEG_DEAD; snode->entry = NULL; FreeSegData( sdata ); return; } } isdbi = false; if( memicmp( CoffDebugPrefix, sdata->u.name, sizeof(CoffDebugPrefix) - 1 ) == 0 ) { if( CurrMod->modinfo & MOD_IMPORT_LIB ) { snode->info |= SEG_DEAD; snode->entry = NULL; FreeSegData( sdata ); return; } isdbi = true; if( stricmp(CoffDebugSymName, sdata->u.name ) == 0 ) { clname = _MSLocalClass; } else if( stricmp(CoffDebugTypeName, sdata->u.name ) == 0 ) { clname = _MSTypeClass; } else { clname = _DwarfClass; } } else if( memicmp( TLSSegPrefix, sdata->u.name, sizeof(TLSSegPrefix) - 1 ) == 0 ) { clname = TLSClassName; } else if( sdata->iscode ) { clname = CodeClassName; } else if( sdata->isuninit ) { clname = BSSClassName; } else { clname = DataClassName; if( memcmp( sname, CoffPDataSegName, sizeof(CoffPDataSegName) ) == 0 ) { sdata->ispdata = true; } else if( memcmp(sname, CoffReldataSegName, sizeof(CoffReldataSegName) ) == 0 ) { sdata->isreldata = true; } } AllocateSegment( snode, clname ); if( clname == TLSClassName ) { group = GetGroup( TLSGrpName ); AddToGroup( group, snode->entry->u.leader ); } else if( !sdata->iscode && !isdbi ) { group = GetGroup( DataGrpName ); AddToGroup( group, snode->entry->u.leader ); } if( sdata->isuninit ) { snode->contents = NULL; } else { snode->entry->u.leader->info |= SEG_LXDATA_SEEN; if( !sdata->isdead ) { ORLSecGetContents( snode->handle, &snode->contents ); if( !sdata->iscdat && ( snode->contents != NULL )) { PutInfo( sdata->u1.vm_ptr, snode->contents, sdata->length ); } } } }