aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2012-07-03 00:45:41 -0400
committerMike Frysinger <vapier@gentoo.org>2012-07-03 14:27:45 -0400
commit731630b7470b2b7ae3c055779138460d14d9fcd5 (patch)
tree5f4d373a2f4032789515ca1a608956b76ec17f6d /libsandbox/trace/linux/hppa.c
parentinclude stdint.h/inttypes.h too (diff)
downloadsandbox-731630b7470b2b7ae3c055779138460d14d9fcd5.tar.gz
sandbox-731630b7470b2b7ae3c055779138460d14d9fcd5.tar.bz2
sandbox-731630b7470b2b7ae3c055779138460d14d9fcd5.zip
libsandbox: migrate to get/set regs interface for everyone
Newer ports (like x32) limit what is available via the peek/poke user interface, and instead are pushing people to use the single get/set regs interface. Since this also simplifies the code a bit (by forcing all ports to use this), and cuts down on the number of syscalls that we have to make, switch everyone over to it. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'libsandbox/trace/linux/hppa.c')
-rw-r--r--libsandbox/trace/linux/hppa.c38
1 files changed, 24 insertions, 14 deletions
diff --git a/libsandbox/trace/linux/hppa.c b/libsandbox/trace/linux/hppa.c
index b7fab1c..d23b0d1 100644
--- a/libsandbox/trace/linux/hppa.c
+++ b/libsandbox/trace/linux/hppa.c
@@ -1,15 +1,5 @@
-#define trace_sysnum_puser (20 * 4) /* PT_GR20 */
-
-static long trace_raw_ret(void *vregs)
-{
- trace_regs *regs = vregs;
- return regs->gr[28];
-}
-
-static void trace_set_ret(void *vregs, int err)
-{
- do_pokeuser(28 * 4 /* PT_GR28 */, -err);
-}
+#define trace_reg_sysnum (20 * 4) /* PT_GR20 */
+#define trace_reg_ret (28 * 4) /* PT_GR28 */
static unsigned long trace_arg(void *vregs, int num)
{
@@ -25,12 +15,32 @@ static unsigned long trace_arg(void *vregs, int num)
}
}
+static long do_peekuser(long offset)
+{
+ return do_ptrace(PTRACE_PEEKUSER, (void *)offset, NULL);
+}
+
+static long do_pokeuser(long offset, long val)
+{
+ return do_ptrace(PTRACE_POKEUSER, (void *)offset, (void *)val);
+}
+
+#undef trace_get_regs
static long trace_get_regs(void *vregs)
{
trace_regs *regs = vregs;
size_t i;
- for (i = 21; i < 29; ++i)
+ for (i = 20; i < 29; ++i)
regs->gr[i] = do_peekuser(i * 4);
return 0;
}
-#define trace_get_regs trace_get_regs
+
+#undef trace_set_regs
+static long trace_set_regs(void *vregs)
+{
+ trace_regs *regs = vregs;
+ size_t i;
+ for (i = 20; i < 29; ++i)
+ do_pokeuser(i * 4, regs->gr[i]);
+ return 0;
+}