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