blob: 3280c07b61c55b4fad589844a8d6ff7a6a450ae3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* Copyright (C) 2026 Richard Qin */
/*
* PtRegs ↔ TrapFrame conversion
*
* This is the ONLY file that knows both the internal TrapFrame layout
* and the Linux-ABI PtRegs layout. When TrapFrame is restructured
* (e.g., to embed pt_regs directly), only this file needs to change.
*/
#include <lume/ptrace.h>
#include <arch/trapframe.h>
void trapframe_to_pt_regs(PtRegs* dst, const arch::TrapFrame* src,
uint64 scause, uint64 stval)
{
dst->epc = src->epc;
dst->ra = src->ra;
dst->sp = src->sp;
dst->gp = src->gp;
dst->tp = src->tp;
dst->t0 = src->t[0];
dst->t1 = src->t[1];
dst->t2 = src->t[2];
dst->s0 = src->s[0];
dst->s1 = src->s[1];
dst->a0 = src->a[0];
dst->a1 = src->a[1];
dst->a2 = src->a[2];
dst->a3 = src->a[3];
dst->a4 = src->a[4];
dst->a5 = src->a[5];
dst->a6 = src->a[6];
dst->a7 = src->a[7];
dst->s2 = src->s[2];
dst->s3 = src->s[3];
dst->s4 = src->s[4];
dst->s5 = src->s[5];
dst->s6 = src->s[6];
dst->s7 = src->s[7];
dst->s8 = src->s[8];
dst->s9 = src->s[9];
dst->s10 = src->s[10];
dst->s11 = src->s[11];
dst->t3 = src->t[3];
dst->t4 = src->t[4];
dst->t5 = src->t[5];
dst->t6 = src->t[6];
dst->status = src->sstatus;
dst->badaddr = stval;
dst->cause = scause;
dst->orig_a0 = src->a[0]; /* Caller should set this before syscall dispatch */
}
void pt_regs_to_trapframe(arch::TrapFrame* dst, const PtRegs* src)
{
dst->epc = src->epc;
dst->ra = src->ra;
dst->sp = src->sp;
dst->gp = src->gp;
dst->tp = src->tp;
dst->t[0] = src->t0;
dst->t[1] = src->t1;
dst->t[2] = src->t2;
dst->s[0] = src->s0;
dst->s[1] = src->s1;
dst->a[0] = src->a0;
dst->a[1] = src->a1;
dst->a[2] = src->a2;
dst->a[3] = src->a3;
dst->a[4] = src->a4;
dst->a[5] = src->a5;
dst->a[6] = src->a6;
dst->a[7] = src->a7;
dst->s[2] = src->s2;
dst->s[3] = src->s3;
dst->s[4] = src->s4;
dst->s[5] = src->s5;
dst->s[6] = src->s6;
dst->s[7] = src->s7;
dst->s[8] = src->s8;
dst->s[9] = src->s9;
dst->s[10] = src->s10;
dst->s[11] = src->s11;
dst->t[3] = src->t3;
dst->t[4] = src->t4;
dst->t[5] = src->t5;
dst->t[6] = src->t6;
dst->sstatus = src->status;
/* badaddr and cause are CSR values, not written back to TrapFrame */
}
|