call_site_XXX moved to C language, added my oldest hash_map

implementation
This commit is contained in:
2020-02-01 21:19:55 +04:00
parent dbd8e31129
commit 0064239418
6 changed files with 664 additions and 164 deletions
+28
View File
@@ -14,6 +14,7 @@
#include "list_head.h"
#include "context.h"
#include "dwarf_expression.h"
#include "hash_multimap.h"
// -----------------------------------------------------------------------------------
@@ -37,11 +38,14 @@ void pst_call_site_param_init(pst_call_site_param* param);
pst_call_site_param* pst_call_site_param_new();
void pst_call_site_param_fini(pst_call_site_param* param);
// -----------------------------------------------------------------------------------
// DW_TAG_call_site
// -----------------------------------------------------------------------------------
typedef struct pst_call_site {
list_node node; // uplink. !!! must be first !!!
hash_node tgt_node;
hash_node org_node;
// methods
pst_call_site_param* (*add_param) (pst_call_site* site);
@@ -58,6 +62,30 @@ typedef struct pst_call_site {
pst_context* ctx; // execution context
bool allocated; // whether this object was allocated or not
} pst_call_site;
void pst_call_site_init(pst_call_site* site, pst_context* c, uint64_t tgt, const char* orn);
pst_call_site* pst_call_site_new(pst_context* c, uint64_t tgt, const char* orn);
void pst_call_site_fini(pst_call_site* site);
// -----------------------------------------------------------------------------------
// storage for all of function's call sites
// -----------------------------------------------------------------------------------
typedef struct pst_call_site_storage {
// methods
bool (*handle_dwarf) (pst_call_site_storage* storage, Dwarf_Die* result);
pst_call_site* (*add_call_site) (pst_call_site_storage* storage, uint64_t target, const char* origin);
void (*del_call_site) (pst_call_site_storage* storage, pst_call_site* site);
pst_call_site* (*find_call_site) (pst_call_site_storage* storage, pst_function* callee);
pst_call_site* (*next_call_site) (pst_call_site_storage* storage, pst_call_site* st);
// fields
pst_context* ctx;
list_head call_sites; // Call-Site definitions
hash_head cs_to_target; // map pointer to caller to call-site
hash_head cs_to_origin; // map caller name to call-site
bool allocated; // whether this object was allocated or not
} pst_call_site_storage;
void pst_call_site_storage_init(pst_call_site_storage* storage, pst_context* ctx);
pst_call_site_storage* pst_call_site_storage_new(pst_context* ctx);
#endif /* FRAMEWORK_DWARF_CALL_SITE_H_ */