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 ); } } } }
static void CollapseLazy( void *node, void *dummy ) /*************************************************/ { extnode * curr; dummy = dummy; curr = node; if( IS_SYM_A_REF( curr->entry ) && !curr->isweak ) { ClearSymUnion( curr->entry ); SET_SYM_TYPE( curr->entry, SYM_REGULAR ); if( LinkState & SEARCHING_LIBRARIES ) { curr->entry->info &= ~SYM_CHECKED; LinkState |= LIBRARIES_ADDED; // force another pass thru libs } } }