Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2011-12-07 18:57:10 +0000
committerEugene Tarassov2011-12-07 18:57:10 +0000
commit5ce447b292000d11ae3e58c406cf3b653e6d6e56 (patch)
treedc3dbec3b0aa689865bd5a2780fd13acae143126
parent8cd4c75223f6128a0b3e7104f390e406c69ac924 (diff)
downloadorg.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.c18
-rw-r--r--agent/tcf/services/linenumbers.h3
-rw-r--r--agent/tcf/services/linenumbers_elf.c3
-rw-r--r--agent/tcf/services/linenumbers_proxy.c3
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) {

Back to the top