TCF Agent: fixed DWARF reader test failure: Invalid line area address
diff --git a/agent/tcf/services/linenumbers_elf.c b/agent/tcf/services/linenumbers_elf.c
index 22f1714..89e9468 100644
--- a/agent/tcf/services/linenumbers_elf.c
+++ b/agent/tcf/services/linenumbers_elf.c
@@ -242,7 +242,7 @@
LineNumbersState * prev = unit->mStatesIndex[k - 1];
if (prev->mFile != state->mFile) break;
if (prev->mLine != state->mLine) break;
- if (prev->mColumn != state->mColumn) break;
+ if (column && prev->mColumn != state->mColumn) break;
state = prev;
k--;
}
@@ -251,7 +251,7 @@
ContextAddress addr = elf_run_time_address_in_region(ctx, mem, unit->mFile, sec, state->mAddress);
if (errno == 0) {
LineNumbersState * code_next = get_next_in_code(unit, state);
- if (code_next != NULL) {
+ if (code_next != NULL && state->mAddress < code_next->mAddress) {
LineNumbersState * text_next = get_next_in_text(unit, state);
U4_T next_line = text_next ? text_next->mLine : state->mLine + 1;
U4_T next_column = text_next ? text_next->mColumn : 0;
diff --git a/tests/test-dwarf/tcf/backend/backend.c b/tests/test-dwarf/tcf/backend/backend.c
index fb7df57..efe25df 100644
--- a/tests/test-dwarf/tcf/backend/backend.c
+++ b/tests/test-dwarf/tcf/backend/backend.c
@@ -1963,7 +1963,6 @@
}
area_cnt = 0;
- line_area_ok = 0;
if (address_to_line(elf_ctx, pc, pc + 1, addr_to_line_callback, NULL) < 0) {
error("address_to_line");
}
@@ -1980,6 +1979,7 @@
for (i = 0; i < area_cnt; i++) {
CodeArea area = area_buf[i];
char * elf_file_name = tmp_strdup(area.file);
+ line_area_ok = 0;
if (area.start_address > pc || area.end_address <= pc) {
errno = set_errno(ERR_OTHER, "Invalid line area address");
error("address_to_line");