Skip to main content
summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorEugene Tarassov2015-05-22 13:30:41 -0400
committerEugene Tarassov2015-05-22 13:30:41 -0400
commit467b511b38e28cf19c86d6258892531fc485c252 (patch)
tree9e7c3464332e8839a0d5536b8fc4e454cdc6c6ef /server
parente295503968309c828c1d0921df90e2b7ce708100 (diff)
downloadorg.eclipse.tcf.agent-467b511b38e28cf19c86d6258892531fc485c252.tar.gz
org.eclipse.tcf.agent-467b511b38e28cf19c86d6258892531fc485c252.tar.xz
org.eclipse.tcf.agent-467b511b38e28cf19c86d6258892531fc485c252.zip
TCF Server: fixed handling of stack frames of inlined functions in context proxy
Diffstat (limited to 'server')
-rw-r--r--server/tcf/services/context-proxy.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/server/tcf/services/context-proxy.c b/server/tcf/services/context-proxy.c
index 46fda0a0..bb516b5e 100644
--- a/server/tcf/services/context-proxy.c
+++ b/server/tcf/services/context-proxy.c
@@ -37,6 +37,7 @@
#include <tcf/services/pathmap.h>
#include <tcf/services/memorymap.h>
#include <tcf/services/stacktrace.h>
+#include <tcf/services/linenumbers.h>
#include <tcf/services/context-proxy.h>
#if ENABLE_ContextMux
#include <tcf/framework/context-mux.h>
@@ -397,6 +398,12 @@ static void free_stack_frame_cache(StackFrameCache * s) {
}
loc_free(s->reg_cache);
}
+ if (s->info.area != NULL) {
+ loc_free(s->info.area->directory);
+ loc_free(s->info.area->file);
+ loc_free(s->info.area);
+ }
+ loc_free(s->info.func_id);
loc_free(s->reg_data.data);
loc_free(s->reg_data.mask);
loc_free(s->reg_defs);
@@ -1739,6 +1746,10 @@ static void read_stack_frame_property(InputStream * inp, const char * name, void
else if (strcmp(name, "IP") == 0) s->ip = (ContextAddress)json_read_uint64(inp);
else if (strcmp(name, "RP") == 0) s->rp = (ContextAddress)json_read_uint64(inp);
else if (strcmp(name, "TopFrame") == 0) s->info.is_top_frame = json_read_boolean(inp);
+ else if (strcmp(name, "Walk") == 0) s->info.is_walked = json_read_boolean(inp);
+ else if (strcmp(name, "Inlined") == 0) s->info.inlined = (int)json_read_long(inp);
+ else if (strcmp(name, "FuncID") == 0) s->info.func_id = json_read_alloc_string(inp);
+ else if (strcmp(name, "CodeArea") == 0) read_code_area(inp, s->info.area = (CodeArea *)loc_alloc(sizeof(CodeArea)));
else json_skip_object(inp);
}

Back to the top