Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authoreutarass2011-08-29 17:35:40 +0000
committereutarass2011-08-29 17:35:40 +0000
commitd4830ff62b2fde9dde30e77b7e21494d582e22a7 (patch)
tree78208927f417d67bd232217ad7c543a3deaeed61 /tests
parent757524f4eb9d2936e52585283eb02fcc027b17b2 (diff)
downloadorg.eclipse.tcf-d4830ff62b2fde9dde30e77b7e21494d582e22a7.tar.gz
org.eclipse.tcf-d4830ff62b2fde9dde30e77b7e21494d582e22a7.tar.xz
org.eclipse.tcf-d4830ff62b2fde9dde30e77b7e21494d582e22a7.zip
TCF Agent: improved DWARF reader tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/test-dwarf/backend/backend.c39
-rw-r--r--tests/test-dwarf/backend/backend.h2
-rw-r--r--tests/test-dwarf/machine/cpudefs-ext.h8
3 files changed, 41 insertions, 8 deletions
diff --git a/tests/test-dwarf/backend/backend.c b/tests/test-dwarf/backend/backend.c
index d605a0b28..f178ac428 100644
--- a/tests/test-dwarf/backend/backend.c
+++ b/tests/test-dwarf/backend/backend.c
@@ -109,13 +109,12 @@ int context_write_reg(Context * ctx, RegisterDefinition * def, unsigned offs, un
}
int context_read_mem(Context * ctx, ContextAddress address, void * buf, size_t size) {
- if (address >= frame_addr && address + size <= frame_addr + sizeof(frame_data)) {
+ if (address >= frame_addr && address + size >= address && address + size <= frame_addr + sizeof(frame_data)) {
memcpy(buf, frame_data + (address - frame_addr), size);
return 0;
}
- /* TODO: context_read_mem */
- errno = ERR_UNSUPPORTED;
- return -1;
+ memset(buf, 0, size);
+ return 0;
}
int context_write_mem(Context * ctx, ContextAddress address, void * buf, size_t size) {
@@ -185,6 +184,34 @@ static void print_time(struct timespec time_start, int cnt) {
static void test(void * args);
+static void loc_var_func(void * args, Symbol * sym) {
+ ContextAddress addr = 0;
+ ContextAddress size = 0;
+ if (get_symbol_address(sym, &addr) < 0) {
+ if (strncmp(errno_to_str(errno), "No object location info found", 29) == 0) return;
+ if (strncmp(errno_to_str(errno), "Object is not available", 23) == 0) return;
+ if (strncmp(errno_to_str(errno), "Object has no RT address", 24) == 0) return;
+
+ if (strncmp(errno_to_str(errno), "Register variable", 17) == 0) {
+ int frame = 0;
+ Context * ctx = NULL;
+ RegisterDefinition * reg = NULL;
+ if (get_symbol_register(sym, &ctx, &frame, &reg) < 0) {
+ error("get_symbol_register");
+ }
+ if (get_symbol_size(sym, &size) < 0) {
+ error("get_symbol_size");
+ }
+ return;
+ }
+
+ error("get_symbol_address");
+ }
+ if (get_symbol_size(sym, &size) < 0) {
+ error("get_symbol_size");
+ }
+}
+
static void next_pc(void) {
Symbol * sym = NULL;
CodeArea area;
@@ -265,6 +292,10 @@ static void next_pc(void) {
}
}
+ if (enumerate_symbols(elf_ctx, STACK_TOP_FRAME, loc_var_func, NULL) < 0) {
+ error("enumerate_symbols");
+ }
+
lt_file = NULL;
lt_sec = NULL;
lt_addr = elf_map_to_link_time_address(elf_ctx, pc, &lt_file, &lt_sec);
diff --git a/tests/test-dwarf/backend/backend.h b/tests/test-dwarf/backend/backend.h
index 922bbc21c..e590c3e2b 100644
--- a/tests/test-dwarf/backend/backend.h
+++ b/tests/test-dwarf/backend/backend.h
@@ -21,7 +21,7 @@
#include <config.h>
#include <framework/channel.h>
-#define MAX_REGS 64
+#define MAX_REGS 2000
struct RegisterData {
uint8_t data[MAX_REGS * 8];
diff --git a/tests/test-dwarf/machine/cpudefs-ext.h b/tests/test-dwarf/machine/cpudefs-ext.h
index 839253da7..040dc0670 100644
--- a/tests/test-dwarf/machine/cpudefs-ext.h
+++ b/tests/test-dwarf/machine/cpudefs-ext.h
@@ -52,11 +52,13 @@ static RegisterDefinition * get_reg_by_eh_frame_id(unsigned id) {
}
RegisterDefinition * get_reg_by_id(Context * ctx, unsigned id, RegisterIdScope * scope) {
+ RegisterDefinition * def = NULL;
switch (scope->id_type) {
- case REGNUM_DWARF: return get_reg_by_dwarf_id(id);
- case REGNUM_EH_FRAME: return get_reg_by_eh_frame_id(id);
+ case REGNUM_DWARF: def = get_reg_by_dwarf_id(id); break;
+ case REGNUM_EH_FRAME: def = get_reg_by_eh_frame_id(id); break;
}
- return NULL;
+ if (def == NULL) set_errno(ERR_OTHER, "Invalid register ID");
+ return def;
}
int read_reg_bytes(StackFrame * frame, RegisterDefinition * reg_def, unsigned offs, unsigned size, uint8_t * buf) {

Back to the top