return swap_get_double(regs, 0);
}
+static inline unsigned long swap_get_upc_arm64(struct pt_regs *regs)
+{
+ return regs->pc;
+}
+
+static inline void swap_set_upc_arm64(struct pt_regs *regs, unsigned long val)
+{
+ regs->pc = val;
+}
+
static inline unsigned long swap_get_uarg_arm64(struct pt_regs *regs,
unsigned long n)
{
}
}
+static inline unsigned long swap_get_uret_addr_arm64(struct pt_regs *regs)
+{
+ return regs->regs[30];
+}
+
+static inline void swap_set_uret_addr_arm64(struct pt_regs *regs,
+ unsigned long val)
+{
+ regs->regs[30] = val;
+}
+
static inline unsigned long swap_get_upc(struct pt_regs *regs)
{
- WARN(1, "not implemented"); /* FIXME: to implement */
- return 0;
+ if (compat_user_mode(regs))
+ return swap_get_upc_arm(regs);
+ else
+ return swap_get_upc_arm64(regs);
}
static inline void swap_set_upc(struct pt_regs *regs, unsigned long val)
{
- WARN(1, "not implemented"); /* FIXME: to implement */
+ if (compat_user_mode(regs))
+ swap_set_upc_arm(regs, val);
+ else
+ swap_set_upc_arm64(regs, val);
}
static inline unsigned long swap_get_uarg(struct pt_regs *regs, unsigned long n)
static inline void swap_put_uarg(struct pt_regs *regs, unsigned long n,
unsigned long val)
{
- WARN(1, "not implemented"); /* FIXME: to implement */
+ if (compat_user_mode(regs))
+ return swap_put_uarg_arm(regs, n, val);
+ else
+ return swap_put_uarg_arm64(regs, n, val);
}
static inline unsigned long swap_get_uret_addr(struct pt_regs *regs)
{
- WARN(1, "not implemented"); /* FIXME: to implement */
- return 0;
+ if (compat_user_mode(regs))
+ return swap_get_uret_addr_arm(regs);
+ else
+ return swap_get_uret_addr_arm64(regs);
}
static inline void swap_set_uret_addr(struct pt_regs *regs, unsigned long val)
{
- WARN(1, "not implemented"); /* FIXME: to implement */
+ if (compat_user_mode(regs))
+ swap_set_uret_addr_arm(regs, val);
+ else
+ swap_set_uret_addr_arm64(regs, val);
}
int arch_prepare_uprobe(struct uprobe *p);