From 3a620bef44acdb168c54cfa6a1a5354e1439fc25 Mon Sep 17 00:00:00 2001 From: Jason Hiser <jdhiser@gmail.com> Date: Tue, 31 Jul 2018 00:44:45 +0000 Subject: [PATCH] more api implementations that were previously asserted --- include/ehp.hpp | 4 ++-- src/ehp.cpp | 10 ++++++++++ src/ehp_priv.hpp | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/ehp.hpp b/include/ehp.hpp index e5c5d97..4301bb1 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 1f1250b..ddb1ac7 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 af7b7a7..e6bc922 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; } -- GitLab