Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2019-11-15 21:42:37 +0000
committerEugene Tarassov2019-11-15 21:51:42 +0000
commit06ece7394ff68cbf62de8c42eed7739b0eabf49b (patch)
treee37e838aad6571900117b913f2653628d1b58a94 /agent/tcf/services
parenta77c3e51816fc7a9ade8195ba5e9e43e1ed84a8b (diff)
downloadorg.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.c10
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), &reg_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,

Back to the top