Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Pouyollon2015-03-25 09:45:56 +0000
committerEugene Tarassov2015-03-27 17:42:53 +0000
commit1f249fa95eb91ae6a5145cad5dce5ee522f46068 (patch)
tree067e4b65522b43727db3ce0e1178c100af77ebe5 /agent/tcf/framework/cpudefs.c
parentd5ec8a8c3226ea1f5cf60191e70ce4ecde121826 (diff)
downloadorg.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.c15
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);

Back to the top