Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/agent
diff options
context:
space:
mode:
authorSanimir Agovic2019-11-05 19:26:12 +0000
committerSanimir Agovic2019-11-05 23:31:57 +0000
commit908db020d0d71e13404debff22f8e3c71c9e87fd (patch)
tree5e27c2860a3809eacee3a7ce8c7de32e33a8632d /agent
parent49b6e13ce21afd4c65c5c275736c063e12409042 (diff)
downloadorg.eclipse.tcf.agent-908db020d0d71e13404debff22f8e3c71c9e87fd.tar.gz
org.eclipse.tcf.agent-908db020d0d71e13404debff22f8e3c71c9e87fd.tar.xz
org.eclipse.tcf.agent-908db020d0d71e13404debff22f8e3c71c9e87fd.zip
TCF Agent: add dwarf frames support for EM_RISCV
Change-Id: I6dd15eda842b740d020d9ac54073ee536a2f51f1 Signed-off-by: Sanimir Agovic <sanimir@subpath.org>
Diffstat (limited to 'agent')
-rw-r--r--agent/tcf/services/dwarfframe.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/agent/tcf/services/dwarfframe.c b/agent/tcf/services/dwarfframe.c
index 5beb1920..be933fa6 100644
--- a/agent/tcf/services/dwarfframe.c
+++ b/agent/tcf/services/dwarfframe.c
@@ -281,6 +281,22 @@ static RegisterRules * get_reg(StackFrameRegisters * regs, int reg) {
regs->regs[n].offset = 30; /* LR */
}
break;
+ case EM_RISCV:
+ min_reg_cnt = 28;
+ if (n == 0) { /* Always same - reads as zero */
+ regs->regs[n].rule = RULE_SAME_VALUE;
+ }
+ else if ((n >= 8 && n <= 9) || (n >= 18 && n <= 27)) { /* Callee-saved registers */
+ regs->regs[n].rule = RULE_SAME_VALUE;
+ }
+ else if (n == 2) { /* Stack pointer */
+ regs->regs[n].rule = RULE_VAL_OFFSET;
+ }
+ else if (n == rules.return_address_register) {
+ regs->regs[n].rule = RULE_REGISTER;
+ regs->regs[n].offset = 1; /* RA */
+ }
+ break;
}
}
return regs->regs + reg;
@@ -1017,6 +1033,12 @@ static void generate_plt_section_commands(Context * ctx, ELF_File * file, U8_T o
frame_regs.cfa_register = 31; /* SP */
generate_commands();
break;
+ case EM_RISCV:
+ rules.return_address_register = 1; /* RA */
+ frame_regs.cfa_rule = RULE_OFFSET;
+ frame_regs.cfa_register = 2; /* SP */
+ generate_commands();
+ break;
}
}

Back to the top