diff options
author | eutarass | 2011-08-29 17:35:40 +0000 |
---|---|---|
committer | eutarass | 2011-08-29 17:35:40 +0000 |
commit | d4830ff62b2fde9dde30e77b7e21494d582e22a7 (patch) | |
tree | 78208927f417d67bd232217ad7c543a3deaeed61 /tests | |
parent | 757524f4eb9d2936e52585283eb02fcc027b17b2 (diff) | |
download | org.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.c | 39 | ||||
-rw-r--r-- | tests/test-dwarf/backend/backend.h | 2 | ||||
-rw-r--r-- | tests/test-dwarf/machine/cpudefs-ext.h | 8 |
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, ®) < 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, <_file, <_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) { |