Skip to content

handle 'virtual thunk to' and non-virtual tunk functions in c++ binaries #96

@ilmanzo

Description

@ilmanzo

Virtual thunk of f() is a helper function that fixes the this parameter before calling the actual function f().

see https://stackoverflow.com/a/39182009

most likely we should not consider them in the coverage count.

see from this excerpt from squid coverage log of "not called" functions:

UNCALLED FUNCTIONS:
  ✗ urnStart(HttpRequest*, StoreEntry*, RefCount<AccessLogEntry> const&) [clone .cold]
  ✗ Client::handledEarlyAdaptationAbort() [clone .cold]
  ✗ cacheDigestGuessStatsReport(CacheDigestGuessStats const*, StoreEntry*, SBuf const&)
  ✗ Acl::TypedOption<Acl::OptionValue<CharacterSet> >::configured() const
  ✗ Server::doneAll() const
  ✗ ClientInfo::setWriteLimiter(int, double, double)
  ✗ Adaptation::Icap::SizedEstimate::knownSize() const [clone .part.0]
  ✗ XactionInitiator::ParseInitiators(char const*) [clone .cold]
  ✗ PconnModule::PconnModule() [clone .cold]
  ✗ virtual thunk to Acl::FinalizedParameterizedNode<Acl::MyPortNameCheck>::~FinalizedParameterizedNode()
  ✗ StoreEntry::timestampsSet()
  ✗ BroadcastSignalIfAny(int&) [clone .part.0]
  ✗ virtual thunk to Ftp::Server::~Server()
  ✗ Ftp::Relay::failedErrorMessage(err_type, int) [clone .cold]
  ✗ AnyP::Uri::SlashPath() [clone .cold]
  ✗ TunnelStateData::closeConnections()
  ✗ Ssl::CommonHostName(x509_st*)
  ✗ FormattedLog::~FormattedLog()
  ✗ Adaptation::Icap::Xaction::noteCommTimedout(CommTimeoutCbParams const&)
  ✗ Store::ParsingBuffer::growSpace(unsigned long)
  ✗ idnsAddPathComponent(char const*)
  ✗ UnitFileNameHashCacher(char const*, unsigned int (*)(char const*)) [clone .lto_priv.39]
  ✗ AsyncCall::~AsyncCall()
  ✗ dump_peer_options(StoreEntry*, CachePeer*)
  ✗ TunnelStateData::secureConnectionToPeer(RefCount<Comm::Connection> const&)
  ✗ Acl::FinalizedParameterizedNode<Acl::SourceDomainCheck>::~FinalizedParameterizedNode()
  ✗ CachePeer::securityContext()
  ✗ HttpHeader::hasNamed(char const*, unsigned int, String*) const
  ✗ statHistDeltaMedian(StatHist const&, StatHist const&)
  ✗ Rock::SwapDir::create()
  ✗ Ipc::Strand::Strand() [clone .cold]
  ✗ JobDialer<Adaptation::AccessCheck>::canDial(AsyncCall&) [clone .cold]
  ✗ Adaptation::Iterator::handleAdaptationError(bool) [clone .cold]
  ✗ idnsPTRLookup(Ip::Address const&, void (*)(void*, rfc1035_rr const*, int, char const*, bool), void*)
  ✗ HappyConnOpener::cancelAttempt(HappyConnOpener::Attempt&, char const*) [clone .part.0]
  ✗ HttpReply::MakeConnectionEstablished()
  ✗ clientdbEstablished(Ip::Address const&, int)
  ✗ ACLIntRange::match(int)
  ✗ DiskdAction::add(Mgr::Action const&) [clone .cold]
  ✗ RefCount<AsyncCallT<BodyProducerDialer> >::dereference(AsyncCallT<BodyProducerDialer> const*) [clone .constprop.0]
  ✗ addAltNameWithSubjectCn(Security::LockingPointer<x509_st, &Security::X509_free_cpp, HardFun<int, x509_st*, &X509_up_ref> >&)
  ✗ Mgr::FunAction::respond(Mgr::Request const&)
  ✗ Acl::Init()::{lambda(char const*)#55}::_FUN(char const*) [clone .cold]
  ✗ CommonPool::Factory(unsigned char, RefCount<CompositePoolNode>&) [clone .cold]
  ✗ ConfigParser::cachePeer(char const*) [clone .cold]
  ✗ snmp_sysFn(variable_list*, long*)
  ✗ EventScheduler::cancel(void (*)(void*), void*)
  ✗ UnitFileNameHashCacher(char const*, unsigned int (*)(char const*)) [clone .lto_priv.81]
  ✗ operator<<(std::ostream&, PeerSelectionDumper const&) [clone .lto_priv.0]
  ✗ PeerSelectorPingMonitor::NoteWaitOver(void*)
  ✗ Ftp::Relay::forwardPreliminaryReply(void (Ftp::Relay::*)()) [clone .cold]
  ✗ static_Inst(unsigned int*, long*, _mib_tree_entry*, variable_list* (**)(variable_list*, long*))
  ✗ ConfigParser::CfgFile::~CfgFile()
  ✗ ConfigParser::NextElement(ConfigParser::TokenType&)
  ✗ virtual thunk to AsyncCallT<CommCbMemFunT<Http::Tunneler, CommCloseCbParams> >::~AsyncCallT()
  ✗ IpcIoFile::HandleNotification(Ipc::TypedMsgHdr const&)
  ✗ Ssl::verifySslCertificate(std::shared_ptr<ssl_ctx_st> const&, Ssl::CertificateProperties const&)
  ✗ Ssl::setClientSNI(ssl_st*, char const*)
  ✗ HttpReply::olderThan(HttpReply const*) const
  ✗ CommTimeoutCbPtrFun::~CommTimeoutCbPtrFun()
  ✗ Ssl::MaybeSetupRsaCallback(std::shared_ptr<ssl_ctx_st>&)
  ✗ Kid::signaled(int) const
  ✗ SBuf::findLastOf(CharacterSet const&, unsigned int) const
  ✗ operator<<(std::ostream&, CachePeer const&)
  ✗ Pipeline::popMe(RefCount<Http::Stream> const&)
  ✗ RefCount<Adaptation::ServiceGroup>::dereference(Adaptation::ServiceGroup const*)
  ✗ Auth::CredentialsCache::cleanup()
  ✗ operator<<(std::ostream&, CharacterSet const&)
  ✗ SysErrorDetail::Brief(int)
  ✗ Ipc::TypedMsgHdr::allocName()
  ✗ Store::Controller::memoryCacheHasSpaceFor(int) const
  ✗ Security::ServerOptions::operator=(Security::ServerOptions const&) [clone .part.0] [clone .cold]
  ✗ ClientHttpRequest::mRangeCLen() const
  ✗ Ipc::TypedMsgHdr::address(sockaddr_un const&)
  ✗ Adaptation::Answer::~Answer()
  ✗ ConnStateData::handleChunkedRequestBody()
  ✗ Acl::AnyOf::typeString() const
  ✗ Ssl::GlobalContextStorage::reconfigureStart()
  ✗ Ssl::CertValidationResponse::getError(int)
  ✗ Ssl::CertValidationMsg::composeRequest(Ssl::CertValidationRequest const&)
  ✗ MemStore::updateHeaders(StoreEntry*) [clone .cold]
  ✗ RefCount<AsyncCallT<UnaryFunCallbackDialer<Ipc::StartListeningAnswer> > > asyncCall<UnaryFunCallbackDialer<Ipc::StartListeningAnswer> >(int, int, char const*, UnaryFunCallbackDialer<Ipc::StartListeningAnswer> const&) [clone .constprop.0]
  ✗ Ssl::PeekingPeerConnector::peerContext() const
  ✗ Adaptation::Iterator::doneAll() const
  ✗ UnaryMemFunT<Adaptation::Icap::Launcher, Adaptation::Icap::XactAbortInfo, Adaptation::Icap::XactAbortInfo>::~UnaryMemFunT()
  ✗ non-virtual thunk to Adaptation::Icap::ModXact::noteBodyProducerAborted(RefCount<BodyPipe>)
  ✗ MessageBucket::MessageBucket(int, int, double, RefCount<MessageDelayPool>) [clone .cold]
  ✗ JobDialer<HttpControlMsgSink>::canDial(AsyncCall&) [clone .cold]
  ✗ parse_SBufList(std::__cxx11::list<SBuf, std::allocator<SBuf> >*) [clone .lto_priv.0]
  ✗ Acl::ConnectionsEncrypted::~ConnectionsEncrypted()
  ✗ Acl::Tree::winningAction() const
  ✗ SingletonIOStrategy::init()
  ✗ Security::CommunicationSecrets::record(std::ostream&) const
  ✗ virtual thunk to Snmp::Request::~Request()
  ✗ Security::PeerConnector::resumeNegotiation() [clone .cold]
  ✗ UnitFileNameHashCacher(char const*, unsigned int (*)(char const*)) [clone .lto_priv.114]
  ✗ virtual thunk to Http::Tunneler::finalizedInCbdataChild()
  ✗ CommSelectEngine::checkEvents(int)
  ✗ DiskdIOStrategy::shedLoad()
  ✗ Ip::Address::operator==(Ip::Address const&) const
  ✗ Mgr::IoAction::collect()
  ✗ Log::Format::HttpdCombined(RefCount<AccessLogEntry> const&, Logfile*)
  ✗ UnaryJobCallbackDialer<Security::PeerConnector, DownloaderAnswer>::~UnaryJobCallbackDialer()
  ✗ UnitFileNameHashCacher(char const*, unsigned int (*)(char const*)) [clone .lto_priv.313]

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions