void ChkElfData( void ) /****************************/ { group_entry *group; symbol * sym; NumExports = NumImports = 0; for( sym = HeadSym; sym != NULL; sym = sym->link ) { if( IsSymElfImported(sym) ) { NumImports++; } else if( IsSymElfExported(sym) ) { if( !(sym->info & SYM_DEFINED) ) { LnkMsg( ERR+MSG_EXP_SYM_NOT_FOUND, "s", sym->name ); } NumExports++; } } InitStringTable( &SymStrTab, FALSE ); AddCharStringTable( &SymStrTab, '\0' ); ElfSymTab = CreateElfSymTable( NumImports + NumExports + NumGroups, &SymStrTab); for( group = Groups; group != NULL; group = group->next_group ) { if( group->totalsize != 0 ) { AddSymElfSymTable( ElfSymTab, group->sym ); } } for( sym = HeadSym; sym != NULL; sym = sym->link ) { if( IsSymElfImpExp(sym) ) { AddSymElfSymTable(ElfSymTab, sym); } } }
void XReportSymAddr( symbol *sym ) /***************************************/ { char star; if( sym->info & SYM_REFERENCED ) { if( IS_SYM_IMPORTED(sym) || (FmtData.type & MK_ELF && IsSymElfImported(sym)) ) { star = 'i'; } else { star = ' '; } } else if( sym->info & SYM_LOCAL_REF ) { star = '+'; } else { star = '*'; } WriteSym( sym, star ); WriteMapNL( 1 ); }