Messages in this thread Patch in this message | | | From | Andrew Vagin <> | Subject | [PATCH] ptrace: add ability to get clear_tid_address | Date | Fri, 3 Feb 2012 14:11:23 +0300 |
| |
Zero is written at clear_tid_address, when the process exits. This functionality is used by pthread_join().
sys_set_tid_address() changes this address for current task.
Before this patch clear_tid_address could not be got from user space. I want to dump a full state of a task, so I need this address. Also I think it may be useful for debugging a multithreading program.
I am not sure that ptrace is suitable place. It may be added in prctl, but I think it's a bit useless and strange. I can't image a real situation (avoid checkpointing) when a thread will want to get own clear_tid_address from itself, this address is used by parent ussually.
Signed-off-by: Andrew Vagin <avagin@openvz.org> --- include/linux/ptrace.h | 3 +++ kernel/ptrace.c | 3 +++ 2 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index c2f1f6a..79b84a3 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h @@ -51,6 +51,9 @@ #define PTRACE_INTERRUPT 0x4207 #define PTRACE_LISTEN 0x4208 +/* Get clear_child_tid address */ +#define PTRACE_GET_TID_ADDRESS 0x4209 + /* flags in @data for PTRACE_SEIZE */ #define PTRACE_SEIZE_DEVEL 0x80000000 /* temp flag for development */ diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 00ab2ca..ed7fbe7 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -845,6 +845,9 @@ int ptrace_request(struct task_struct *child, long request, break; } #endif + case PTRACE_GET_TID_ADDRESS: + return put_user(child->clear_child_tid, (int __user **) data); + default: break; } -- 1.7.1
| |