diff options
author | Xavier Pouyollon | 2015-03-25 09:45:56 +0000 |
---|---|---|
committer | Eugene Tarassov | 2015-03-27 17:42:53 +0000 |
commit | 1f249fa95eb91ae6a5145cad5dce5ee522f46068 (patch) | |
tree | 067e4b65522b43727db3ce0e1178c100af77ebe5 /agent/tcf/framework/cpudefs.c | |
parent | d5ec8a8c3226ea1f5cf60191e70ce4ecde121826 (diff) | |
download | org.eclipse.tcf.agent-1f249fa95eb91ae6a5145cad5dce5ee522f46068.tar.gz org.eclipse.tcf.agent-1f249fa95eb91ae6a5145cad5dce5ee522f46068.tar.xz org.eclipse.tcf.agent-1f249fa95eb91ae6a5145cad5dce5ee522f46068.zip |
Tricore support
Tricore has a special register PCXI which is used to point to
the CSA (an area of memory where registers were saved
during a CALL operation).
The PCXI needs to be decyphered in order to get it's
effective address.
Signed-off-by: Xavier Pouyollon <xavier.pouyollon@windriver.com>
Diffstat (limited to 'agent/tcf/framework/cpudefs.c')
-rw-r--r-- | agent/tcf/framework/cpudefs.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/agent/tcf/framework/cpudefs.c b/agent/tcf/framework/cpudefs.c index 34113018..2d027f6e 100644 --- a/agent/tcf/framework/cpudefs.c +++ b/agent/tcf/framework/cpudefs.c @@ -241,6 +241,21 @@ LocationExpressionState * evaluate_location_expression(Context * ctx, StackFrame if (read_reg_value(frame, cmd->args.reg, stk + stk_pos) < 0) exception(errno); stk_pos++; break; + case SFT_CMD_RD_REG_PCXI_TRICORE: + { + uint64_t offset; + uint64_t segment; + uint64_t pcxi; + if (read_reg_value(frame, cmd->args.reg, &pcxi) < 0) exception(errno); + /* PCXI is used as CFA and needs to be decyphered into order to point + * to the CSA (area of memory where registered were saved when CALL is made) */ + offset = (pcxi & 0xFFFF) << 6; + segment = (pcxi & 0xF0000) << 12; + pcxi = offset | segment; + *(stk + stk_pos) = pcxi; + stk_pos++; + } + break; case SFT_CMD_WR_REG: if (stk_pos < 1) location_expression_error(); if (write_reg_value(frame, cmd->args.reg, *(stk + stk_pos - 1)) < 0) exception(errno); |