Beispiel #1
0
symbol * HashReplace( symbol *sym )
/****************************************/
{
    symbol *    newsym;

    if( sym->mod == NULL )
        return sym;
    Ring2Prune( &sym->mod->publist, sym );
    if( IS_SYM_COMMUNAL(sym) ) {
        sym->p.seg->isdead = TRUE;
    }
    if( !(LinkFlags & INC_LINK_FLAG) )
        return sym;
    newsym = AddSym();
    newsym->e.mainsym = sym;
    newsym->name = sym->name;
    newsym->namelen_cmp = sym->namelen_cmp;
    newsym->info = sym->info | SYM_DEAD | SYM_IS_ALTDEF;
    Ring2Append( &sym->mod->publist, newsym );
    RingAppend( &sym->u.altdefs, newsym );
    if( IS_SYM_NICOMDEF(sym) ) {
        sym->p.cdefsize = sym->p.seg->length;
    }
    return sym;
}
Beispiel #2
0
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 );
    }
}
Beispiel #3
0
symbol * AddAltDef( symbol *sym, sym_info sym_type )
/*********************************************************/
{
    symbol *    altsym;

    if( !(LinkFlags & INC_LINK_FLAG) )
        return sym;
    altsym = AddSym();
    SET_SYM_TYPE( altsym, sym_type );
    altsym->info |= SYM_DEAD | SYM_IS_ALTDEF;
    altsym->mod = CurrMod;
    altsym->name = sym->name;
    altsym->e.mainsym = sym;
    Ring2Append( &CurrMod->publist, altsym );
    RingAppend( &sym->u.altdefs, altsym );
    return altsym;
}