Example #1
0
const std::set<std::string> &PECOFFLinkingContext::definedSymbols() {
  std::lock_guard<std::recursive_mutex> lock(_mutex);
  for (std::unique_ptr<Node> &node : getNodes()) {
    if (_seen.count(node.get()) > 0)
      continue;
    FileNode *fnode = dyn_cast<FileNode>(node.get());
    if (!fnode)
      continue;
    File *file = fnode->getFile();
    if (file->parse())
      continue;
    if (auto *archive = dyn_cast<ArchiveLibraryFile>(file)) {
      for (const std::string &sym : archive->getDefinedSymbols())
        _definedSyms.insert(sym);
      continue;
    }
    for (const DefinedAtom *atom : file->defined())
      if (!atom->name().empty())
        _definedSyms.insert(atom->name());
  }
  return _definedSyms;
}