Gentoo Archives: gentoo-commits

From: Mike Frysinger <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/sandbox:master commit in: libsandbox/trace/linux/
Date: Sun, 20 Dec 2015 11:07:10
Message-Id: 1450609605.d4aff41888c4e8eb71519330ab7621aed3f73da4.vapier@gentoo
1 commit: d4aff41888c4e8eb71519330ab7621aed3f73da4
2 Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
3 AuthorDate: Sun Dec 20 11:06:45 2015 +0000
4 Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
5 CommitDate: Sun Dec 20 11:06:45 2015 +0000
6 URL: https://gitweb.gentoo.org/proj/sandbox.git/commit/?id=d4aff418
7
8 libsandbox: new alpha ptrace port
9
10 Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org>
11
12 libsandbox/trace/linux/alpha.c | 58 ++++++++++++++++++++++++++++++++++++++++++
13 libsandbox/trace/linux/arch.c | 2 ++
14 2 files changed, 60 insertions(+)
15
16 diff --git a/libsandbox/trace/linux/alpha.c b/libsandbox/trace/linux/alpha.c
17 new file mode 100644
18 index 0000000..4aa6cd6
19 --- /dev/null
20 +++ b/libsandbox/trace/linux/alpha.c
21 @@ -0,0 +1,58 @@
22 +#define REG_R0 0
23 +#define REG_A0 16
24 +
25 +#define trace_reg_sysnum r0
26 +
27 +static unsigned long trace_arg(void *vregs, int num)
28 +{
29 + trace_regs *regs = vregs;
30 + if (num < 7)
31 + return *(&regs->r16 + num - 1);
32 + else
33 + return -1;
34 +}
35 +
36 +static long do_peekuser(long offset)
37 +{
38 + return do_ptrace(PTRACE_PEEKUSER, (void *)offset, NULL);
39 +}
40 +
41 +static long do_pokeuser(long offset, long val)
42 +{
43 + return do_ptrace(PTRACE_POKEUSER, (void *)offset, (void *)val);
44 +}
45 +
46 +#undef trace_get_regs
47 +static long trace_get_regs(void *vregs)
48 +{
49 + trace_regs *regs = vregs;
50 + size_t i;
51 + regs->r0 = do_peekuser(REG_R0);
52 + for (i = 0; i < 7; ++i)
53 + *(&regs->r16 + i) = do_peekuser(REG_A0 + i);
54 + return 0;
55 +}
56 +
57 +#undef trace_set_regs
58 +static long trace_set_regs(void *vregs)
59 +{
60 + trace_regs *regs = vregs;
61 + size_t i;
62 + do_pokeuser(REG_R0, regs->r0);
63 + for (i = 0; i < 7; ++i)
64 + do_pokeuser(REG_A0 + i, *(&regs->r16 + i));
65 + return 0;
66 +}
67 +
68 +static long trace_raw_ret(void *vregs)
69 +{
70 + trace_regs *regs = vregs;
71 + return regs->r16;
72 +}
73 +
74 +static void trace_set_ret(void *vregs, int err)
75 +{
76 + trace_regs *regs = vregs;
77 + regs->r0 = -err;
78 + trace_set_regs(regs);
79 +}
80
81 diff --git a/libsandbox/trace/linux/arch.c b/libsandbox/trace/linux/arch.c
82 index 83b6977..1515abe 100644
83 --- a/libsandbox/trace/linux/arch.c
84 +++ b/libsandbox/trace/linux/arch.c
85 @@ -7,6 +7,8 @@
86 #if !defined(HAVE_PTRACE) || !defined(HAVE_SYS_PTRACE_H) || \
87 !defined(HAVE_SYS_USER_H) || !defined(PTRACE_SETOPTIONS)
88 # define SB_NO_TRACE_ARCH
89 +#elif defined(__alpha__)
90 +# include "alpha.c"
91 #elif defined(__arm__)
92 # include "arm.c"
93 #elif defined(__bfin__)