void ConvertLazyRefs( void ) /*********************************/ /* go through all symbols, & turn lazy refs to aliases to default sym. */ { symbol * defsym; symbol * sym; for( sym = HeadSym; sym != NULL; sym = sym->link ) { if( IS_SYM_A_REF(sym) ) { if( IS_SYM_VF_REF(sym) ) { defsym = *(sym->e.vfdata); _LnkFree( sym->e.vfdata ); } else { defsym = sym->e.def; if( sym->info & SYM_VF_MARKED ) { DefStripSym( sym, AllocSegData() ); // see note 1 below. } } WeldSyms( sym, defsym ); sym->info |= SYM_WAS_LAZY; if( LinkFlags & SHOW_DEAD ) { LnkMsg( MAP+MSG_SYMBOL_DEAD, "S", sym ); } } } }
void ClearSymUnion( symbol * sym ) /***************************************/ /* clear the symbol unions of any possible allocated data */ { sym->info &= ~SYM_LINK_GEN; if( IS_SYM_VF_REF(sym) ) { ClearRefInfo( sym ); } else { WipeSym( sym ); } }
static bool ResolveVFExtdefs( void ) /**********************************/ /* go through the symbol table, and check if any conditional extdefs * should turned into real extdefs */ { bool resolved; symbol *sym; resolved = FALSE; for( sym = HeadSym; sym != NULL; sym = sym->link ) { if( IS_SYM_VF_REF(sym) ) { resolved |= CheckVFList( sym ); } } return( resolved ); }