diff --git a/include/ehp.hpp b/include/ehp.hpp index e5c5d979b7920822c714409e6c7b4d6b37a82741..4301bb1e839d6ced3c63174437f9a2bab3f1e613 100644 --- a/include/ehp.hpp +++ b/include/ehp.hpp @@ -85,7 +85,7 @@ class LSDATypeTableEntry_t }; -using LSDCallSiteActionVector_t=vector<shared_ptr<LSDACallSiteAction_t> >; +using LSDACallSiteActionVector_t=vector<shared_ptr<LSDACallSiteAction_t> >; class LSDACallSite_t { protected: @@ -93,7 +93,7 @@ class LSDACallSite_t LSDACallSite_t(const LSDACallSite_t&) {} public: virtual ~LSDACallSite_t() {} - virtual shared_ptr<LSDCallSiteActionVector_t> getActionTable() const =0; + virtual shared_ptr<LSDACallSiteActionVector_t> getActionTable() const =0; virtual uint64_t getCallSiteAddress() const =0; virtual uint64_t getCallSiteEndAddress() const =0; virtual uint64_t getLandingPadAddress() const =0; diff --git a/src/ehp.cpp b/src/ehp.cpp index 1f1250b862a29c0f7bcca752475539b1bd1450a0..ddb1ac73ed8200fa591a1487e40f7d9c710b4595 100644 --- a/src/ehp.cpp +++ b/src/ehp.cpp @@ -1154,6 +1154,16 @@ lsda_call_site_t<ptrsize>::lsda_call_site_t() : action_table_addr(0) {} +template <int ptrsize> +shared_ptr<LSDACallSiteActionVector_t> lsda_call_site_t<ptrsize>::getActionTable() const +{ + auto ret=shared_ptr<LSDACallSiteActionVector_t>(new LSDACallSiteActionVector_t()); + transform(ALLOF(action_table), back_inserter(*ret), + [](const lsda_call_site_action_t<ptrsize> &a) { return shared_ptr<LSDACallSiteAction_t>(new lsda_call_site_action_t<ptrsize>(a));}); + return shared_ptr<LSDACallSiteActionVector_t>(ret); +} + + template <int ptrsize> diff --git a/src/ehp_priv.hpp b/src/ehp_priv.hpp index af7b7a765cf97846d51173807f866f7147afa082..e6bc9228c44d942fa4d197cd831d4a38f750aaf6 100644 --- a/src/ehp_priv.hpp +++ b/src/ehp_priv.hpp @@ -238,7 +238,7 @@ class lsda_call_site_t : public LSDACallSite_t, private eh_frame_util_t<ptrsize> public: lsda_call_site_t() ; - shared_ptr<LSDCallSiteActionVector_t> getActionTable() const { assert(0); } + shared_ptr<LSDACallSiteActionVector_t> getActionTable() const; const std::vector<lsda_call_site_action_t <ptrsize> >& getActionTableInternal() const { return action_table; } std::vector<lsda_call_site_action_t <ptrsize> >& getActionTableInternal() { return action_table; }