diff options
author | Eugene Tarassov | 2019-11-15 21:42:37 +0000 |
---|---|---|
committer | Eugene Tarassov | 2019-11-15 21:51:42 +0000 |
commit | 06ece7394ff68cbf62de8c42eed7739b0eabf49b (patch) | |
tree | e37e838aad6571900117b913f2653628d1b58a94 /agent/tcf/services | |
parent | a77c3e51816fc7a9ade8195ba5e9e43e1ed84a8b (diff) | |
download | org.eclipse.tcf.agent-06ece7394ff68cbf62de8c42eed7739b0eabf49b.tar.gz org.eclipse.tcf.agent-06ece7394ff68cbf62de8c42eed7739b0eabf49b.tar.xz org.eclipse.tcf.agent-06ece7394ff68cbf62de8c42eed7739b0eabf49b.zip |
TCF Agent: added support for TLS on PowerPC
Diffstat (limited to 'agent/tcf/services')
-rw-r--r-- | agent/tcf/services/elf-loader.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/agent/tcf/services/elf-loader.c b/agent/tcf/services/elf-loader.c index 9aa67d3a..e7bde89a 100644 --- a/agent/tcf/services/elf-loader.c +++ b/agent/tcf/services/elf-loader.c @@ -353,6 +353,16 @@ ContextAddress get_tls_address(Context * ctx, ELF_File * file) { if (elf_read_memory_word(ctx, file, tcb_addr - (file->elf64 ? 16 : 8), &dtv_addr) < 0) str_exception(errno, "Cannot read TCB"); break; + case EM_PPC: + case EM_PPC64: + reg_def = get_reg_by_id(ctx, (file->elf64 ? 13 : 2), ®_id_scope); + if (reg_def == NULL) exception(errno); + if (context_read_reg(ctx, reg_def, 0, reg_def->size, buf) < 0) + str_exception(errno, "Cannot read TCB base register"); + tcb_addr = to_address(buf, reg_def->size, reg_def->big_endian) - 0x7000; + if (elf_read_memory_word(ctx, file, tcb_addr - (file->elf64 ? 8 : 4), &dtv_addr) < 0) + str_exception(errno, "Cannot read TCB"); + break; } if (dtv_addr == 0) { str_fmt_exception(ERR_INV_CONTEXT, |