diff options
author | Eugene Tarassov | 2011-12-07 18:57:10 +0000 |
---|---|---|
committer | Eugene Tarassov | 2011-12-07 18:57:10 +0000 |
commit | 5ce447b292000d11ae3e58c406cf3b653e6d6e56 (patch) | |
tree | dc3dbec3b0aa689865bd5a2780fd13acae143126 | |
parent | 8cd4c75223f6128a0b3e7104f390e406c69ac924 (diff) | |
download | org.eclipse.tcf.agent-5ce447b292000d11ae3e58c406cf3b653e6d6e56.tar.gz org.eclipse.tcf.agent-5ce447b292000d11ae3e58c406cf3b653e6d6e56.tar.xz org.eclipse.tcf.agent-5ce447b292000d11ae3e58c406cf3b653e6d6e56.zip |
TCF Agent: added new attributes for code area in LineNumbers service: NAddr, OpIndex, Discriminator.
-rw-r--r-- | agent/tcf/services/linenumbers.c | 18 | ||||
-rw-r--r-- | agent/tcf/services/linenumbers.h | 3 | ||||
-rw-r--r-- | agent/tcf/services/linenumbers_elf.c | 3 | ||||
-rw-r--r-- | agent/tcf/services/linenumbers_proxy.c | 3 |
4 files changed, 27 insertions, 0 deletions
diff --git a/agent/tcf/services/linenumbers.c b/agent/tcf/services/linenumbers.c index 6b735bb5..f644d3f1 100644 --- a/agent/tcf/services/linenumbers.c +++ b/agent/tcf/services/linenumbers.c @@ -97,6 +97,12 @@ static void write_line_info(OutputStream * out, int cnt) { json_write_ulong(out, area->end_column); } } + if (area->next_address != 0) { + write_stream(out, ','); + json_write_string(out, "NAddr"); + write_stream(out, ':'); + json_write_uint64(out, area->next_address); + } if (area->file != NULL && (prev == NULL || prev->file != area->file)) { write_stream(out, ','); json_write_string(out, "File"); @@ -139,6 +145,18 @@ static void write_line_info(OutputStream * out, int cnt) { write_stream(out, ':'); json_write_boolean(out, 1); } + if (area->op_index) { + write_stream(out, ','); + json_write_string(out, "OpIndex"); + write_stream(out, ':'); + json_write_long(out, area->op_index); + } + if (area->discriminator) { + write_stream(out, ','); + json_write_string(out, "Discriminator"); + write_stream(out, ':'); + json_write_long(out, area->discriminator); + } write_stream(out, '}'); } diff --git a/agent/tcf/services/linenumbers.h b/agent/tcf/services/linenumbers.h index 89f25245..fa4d5141 100644 --- a/agent/tcf/services/linenumbers.h +++ b/agent/tcf/services/linenumbers.h @@ -36,11 +36,14 @@ typedef struct CodeArea { ContextAddress end_address; int end_line; int end_column; + ContextAddress next_address; /* Address of next area - in source text order */ int isa; int is_statement; int basic_block; int prologue_end; int epilogue_begin; + int op_index; + int discriminator; } CodeArea; typedef void LineNumbersCallBack(CodeArea *, void *); diff --git a/agent/tcf/services/linenumbers_elf.c b/agent/tcf/services/linenumbers_elf.c index 13dc4e80..837e2594 100644 --- a/agent/tcf/services/linenumbers_elf.c +++ b/agent/tcf/services/linenumbers_elf.c @@ -131,11 +131,14 @@ static void call_client(CompUnit * unit, LineNumbersState * state, area.file_size = file_info->mSize; area.start_address = state_addr; area.end_address = (state + 1)->mAddress - state->mAddress + state_addr; + if (next != NULL) area.next_address = next->mAddress; area.isa = state->mISA; area.is_statement = (state->mFlags & LINE_IsStmt) != 0; area.basic_block = (state->mFlags & LINE_BasicBlock) != 0; area.prologue_end = (state->mFlags & LINE_PrologueEnd) != 0; area.epilogue_begin = (state->mFlags & LINE_EpilogueBegin) != 0; + area.op_index = state->mOpIndex; + area.discriminator = state->mDiscriminator; client(&area, args); } diff --git a/agent/tcf/services/linenumbers_proxy.c b/agent/tcf/services/linenumbers_proxy.c index b6bce762..d806eb3f 100644 --- a/agent/tcf/services/linenumbers_proxy.c +++ b/agent/tcf/services/linenumbers_proxy.c @@ -147,6 +147,7 @@ static void read_code_area_props(InputStream * inp, const char * name, void * ar else if (strcmp(name, "ELine") == 0) area->end_line = json_read_long(inp); else if (strcmp(name, "ECol") == 0) area->end_column = json_read_long(inp); else if (strcmp(name, "EAddr") == 0) area->end_address = (ContextAddress)json_read_uint64(inp); + else if (strcmp(name, "NAddr") == 0) area->next_address = (ContextAddress)json_read_uint64(inp); else if (strcmp(name, "File") == 0) area->file = json_read_alloc_string(inp); else if (strcmp(name, "Dir") == 0) area->directory = json_read_alloc_string(inp); else if (strcmp(name, "ISA") == 0) area->isa = json_read_long(inp); @@ -154,6 +155,8 @@ static void read_code_area_props(InputStream * inp, const char * name, void * ar else if (strcmp(name, "BasicBlock") == 0) area->basic_block = json_read_boolean(inp); else if (strcmp(name, "PrologueEnd") == 0) area->prologue_end = json_read_boolean(inp); else if (strcmp(name, "EpilogueBegin") == 0) area->epilogue_begin = json_read_boolean(inp); + else if (strcmp(name, "OpIndex") == 0) area->op_index = json_read_long(inp); + else if (strcmp(name, "Discriminator") == 0) area->discriminator = json_read_long(inp); } static void read_code_area_array(InputStream * inp, void * args) { |