diff options
author | Sanimir Agovic | 2019-11-05 19:26:12 +0000 |
---|---|---|
committer | Sanimir Agovic | 2019-11-05 23:31:57 +0000 |
commit | 908db020d0d71e13404debff22f8e3c71c9e87fd (patch) | |
tree | 5e27c2860a3809eacee3a7ce8c7de32e33a8632d /agent | |
parent | 49b6e13ce21afd4c65c5c275736c063e12409042 (diff) | |
download | org.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.c | 22 |
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; } } |