* [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace
@ 2012-12-22 5:21 Simon Marchi
2012-12-22 5:21 ` [PATCH 2/3] arch/tile: Implement user_stack_pointer Simon Marchi
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Simon Marchi @ 2012-12-22 5:21 UTC (permalink / raw)
To: cmetcalf; +Cc: linux-kernel, Simon Marchi
Call tracehook functions for syscall tracing.
The check for TIF_SYSCALL_TRACE was removed, because the same check is
done right before in the assembly file.
Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca>
---
arch/tile/kernel/intvec_32.S | 6 ++++--
arch/tile/kernel/intvec_64.S | 6 ++++--
arch/tile/kernel/ptrace.c | 30 ++++++++++--------------------
3 files changed, 18 insertions(+), 24 deletions(-)
diff --git a/arch/tile/kernel/intvec_32.S b/arch/tile/kernel/intvec_32.S
index 6943515..6c3f597 100644
--- a/arch/tile/kernel/intvec_32.S
+++ b/arch/tile/kernel/intvec_32.S
@@ -1201,7 +1201,8 @@ handle_syscall:
lw r30, r31
andi r30, r30, _TIF_SYSCALL_TRACE
bzt r30, .Lrestore_syscall_regs
- jal do_syscall_trace
+ PTREGS_PTR(r0, PTREGS_OFFSET_BASE)
+ jal do_syscall_trace_enter
FEEDBACK_REENTER(handle_syscall)
/*
@@ -1252,7 +1253,8 @@ handle_syscall:
lw r30, r31
andi r30, r30, _TIF_SYSCALL_TRACE
bzt r30, 1f
- jal do_syscall_trace
+ PTREGS_PTR(r0, PTREGS_OFFSET_BASE)
+ jal do_syscall_trace_exit
FEEDBACK_REENTER(handle_syscall)
1: {
movei r30, 0 /* not an NMI */
diff --git a/arch/tile/kernel/intvec_64.S b/arch/tile/kernel/intvec_64.S
index 7c06d59..a717279 100644
--- a/arch/tile/kernel/intvec_64.S
+++ b/arch/tile/kernel/intvec_64.S
@@ -1006,7 +1006,8 @@ handle_syscall:
addi r30, r31, THREAD_INFO_STATUS_OFFSET - THREAD_INFO_FLAGS_OFFSET
beqzt r30, .Lrestore_syscall_regs
}
- jal do_syscall_trace
+ PTREGS_PTR(r0, PTREGS_OFFSET_BASE)
+ jal do_syscall_trace_enter
FEEDBACK_REENTER(handle_syscall)
/*
@@ -1075,7 +1076,8 @@ handle_syscall:
andi r0, r30, _TIF_SINGLESTEP
beqzt r0, 1f
}
- jal do_syscall_trace
+ PTREGS_PTR(r0, PTREGS_OFFSET_BASE)
+ jal do_syscall_trace_exit
FEEDBACK_REENTER(handle_syscall)
andi r0, r30, _TIF_SINGLESTEP
diff --git a/arch/tile/kernel/ptrace.c b/arch/tile/kernel/ptrace.c
index 9835312..0ab8b76 100644
--- a/arch/tile/kernel/ptrace.c
+++ b/arch/tile/kernel/ptrace.c
@@ -21,6 +21,7 @@
#include <linux/uaccess.h>
#include <linux/regset.h>
#include <linux/elf.h>
+#include <linux/tracehook.h>
#include <asm/traps.h>
#include <arch/chip.h>
@@ -246,29 +247,18 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
}
#endif
-void do_syscall_trace(void)
+int do_syscall_trace_enter(struct pt_regs *regs)
{
- if (!test_thread_flag(TIF_SYSCALL_TRACE))
- return;
-
- if (!(current->ptrace & PT_PTRACED))
- return;
+ if (tracehook_report_syscall_entry(regs)) {
+ regs->regs[TREG_SYSCALL_NR] = -1;
+ }
- /*
- * The 0x80 provides a way for the tracing parent to distinguish
- * between a syscall stop and SIGTRAP delivery
- */
- ptrace_notify(SIGTRAP|((current->ptrace & PT_TRACESYSGOOD) ? 0x80 : 0));
+ return regs->regs[TREG_SYSCALL_NR];
+}
- /*
- * this isn't the same as continuing with a signal, but it will do
- * for normal use. strace only continues with a signal if the
- * stopping signal is not SIGTRAP. -brl
- */
- if (current->exit_code) {
- send_sig(current->exit_code, current, 1);
- current->exit_code = 0;
- }
+void do_syscall_trace_exit(struct pt_regs *regs)
+{
+ tracehook_report_syscall_exit(regs, 0);
}
void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs, int error_code)
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] arch/tile: Implement user_stack_pointer
2012-12-22 5:21 [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Simon Marchi
@ 2012-12-22 5:21 ` Simon Marchi
2012-12-22 6:03 ` Al Viro
2012-12-22 5:21 ` [PATCH 3/3] arch/tile: Enable HAVE_ARCH_TRACEHOOK Simon Marchi
2012-12-26 18:42 ` [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Chris Metcalf
2 siblings, 1 reply; 5+ messages in thread
From: Simon Marchi @ 2012-12-22 5:21 UTC (permalink / raw)
To: cmetcalf; +Cc: linux-kernel, Simon Marchi
It is needed when we turn on HAVE_ARCH_TRACEHOOK.
Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca>
---
arch/tile/include/asm/ptrace.h | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/arch/tile/include/asm/ptrace.h b/arch/tile/include/asm/ptrace.h
index 5ce052e..4be42fb 100644
--- a/arch/tile/include/asm/ptrace.h
+++ b/arch/tile/include/asm/ptrace.h
@@ -80,6 +80,11 @@ struct task_struct;
extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
int error_code);
+static inline unsigned long user_stack_pointer(struct pt_regs *regs)
+{
+ return regs->sp;
+}
+
#ifdef __tilegx__
/* We need this since sigval_t has a user pointer in it, for GETSIGINFO etc. */
#define __ARCH_WANT_COMPAT_SYS_PTRACE
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] arch/tile: Enable HAVE_ARCH_TRACEHOOK
2012-12-22 5:21 [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Simon Marchi
2012-12-22 5:21 ` [PATCH 2/3] arch/tile: Implement user_stack_pointer Simon Marchi
@ 2012-12-22 5:21 ` Simon Marchi
2012-12-26 18:42 ` [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Chris Metcalf
2 siblings, 0 replies; 5+ messages in thread
From: Simon Marchi @ 2012-12-22 5:21 UTC (permalink / raw)
To: cmetcalf; +Cc: linux-kernel, Simon Marchi
Looks like we have everything needed for that.
Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca>
---
arch/tile/Kconfig | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
index 875d008..8cab409 100644
--- a/arch/tile/Kconfig
+++ b/arch/tile/Kconfig
@@ -21,6 +21,7 @@ config TILE
select ARCH_HAVE_NMI_SAFE_CMPXCHG
select GENERIC_CLOCKEVENTS
select MODULES_USE_ELF_RELA
+ select HAVE_ARCH_TRACEHOOK
# FIXME: investigate whether we need/want these options.
# select HAVE_IOREMAP_PROT
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] arch/tile: Implement user_stack_pointer
2012-12-22 5:21 ` [PATCH 2/3] arch/tile: Implement user_stack_pointer Simon Marchi
@ 2012-12-22 6:03 ` Al Viro
0 siblings, 0 replies; 5+ messages in thread
From: Al Viro @ 2012-12-22 6:03 UTC (permalink / raw)
To: Simon Marchi; +Cc: cmetcalf, linux-kernel
On Sat, Dec 22, 2012 at 12:21:11AM -0500, Simon Marchi wrote:
> It is needed when we turn on HAVE_ARCH_TRACEHOOK.
... and if you check the mainline, you'll see it (and other missing
user_stack_pointer() instances) already in place, as part of infrastructure
for sigaltstack series.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace
2012-12-22 5:21 [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Simon Marchi
2012-12-22 5:21 ` [PATCH 2/3] arch/tile: Implement user_stack_pointer Simon Marchi
2012-12-22 5:21 ` [PATCH 3/3] arch/tile: Enable HAVE_ARCH_TRACEHOOK Simon Marchi
@ 2012-12-26 18:42 ` Chris Metcalf
2 siblings, 0 replies; 5+ messages in thread
From: Chris Metcalf @ 2012-12-26 18:42 UTC (permalink / raw)
To: Simon Marchi; +Cc: linux-kernel
On 12/22/2012 12:21 AM, Simon Marchi wrote:
> Call tracehook functions for syscall tracing.
>
> The check for TIF_SYSCALL_TRACE was removed, because the same check is
> done right before in the assembly file.
>
> Signed-off-by: Simon Marchi <simon.marchi@polymtl.ca>
>
I've taken this one, and patch 3/3 in this series, into the tile tree (and pushed it up to linux-next). I fixed up ptrace.h to adjust the declarations for the modified functions.
As Al Viro pointed out, patch 2/3 is already present in v3.8-rc1.
Thanks!
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-12-26 18:42 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-22 5:21 [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Simon Marchi
2012-12-22 5:21 ` [PATCH 2/3] arch/tile: Implement user_stack_pointer Simon Marchi
2012-12-22 6:03 ` Al Viro
2012-12-22 5:21 ` [PATCH 3/3] arch/tile: Enable HAVE_ARCH_TRACEHOOK Simon Marchi
2012-12-26 18:42 ` [PATCH 1/3] arch/tile: Call tracehook_report_syscall_{entry,exit} in syscall trace Chris Metcalf
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.