浏览代码

nommu: ptrace support

The patch below adds ARM ptrace functions to get the process load address.
This is required for useful userspace debugging on mmuless systems.  These
values are obtained by reading magic offsets with PTRACE_PEEKUSR, as on other
nommu targets. I picked arbitrary large values for the offsets.

Signed-off-by: Paul Brook <paul@codesourcery.com>
Paul Brook 16 年之前
父节点
当前提交
68b7f7153f
共有 2 个文件被更改,包括 15 次插入1 次删除
  1. 8 0
      arch/arm/include/asm/ptrace.h
  2. 7 1
      arch/arm/kernel/ptrace.c

+ 8 - 0
arch/arm/include/asm/ptrace.h

@@ -82,6 +82,14 @@
 #define PSR_ENDSTATE	0
 #define PSR_ENDSTATE	0
 #endif
 #endif
 
 
+/* 
+ * These are 'magic' values for PTRACE_PEEKUSR that return info about where a
+ * process is located in memory.
+ */
+#define PT_TEXT_ADDR		0x10000
+#define PT_DATA_ADDR		0x10004
+#define PT_TEXT_END_ADDR	0x10008
+
 #ifndef __ASSEMBLY__
 #ifndef __ASSEMBLY__
 
 
 /*
 /*

+ 7 - 1
arch/arm/kernel/ptrace.c

@@ -521,7 +521,13 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
 		return -EIO;
 		return -EIO;
 
 
 	tmp = 0;
 	tmp = 0;
-	if (off < sizeof(struct pt_regs))
+	if (off == PT_TEXT_ADDR)
+		tmp = tsk->mm->start_code;
+	else if (off == PT_DATA_ADDR)
+		tmp = tsk->mm->start_data;
+	else if (off == PT_TEXT_END_ADDR)
+		tmp = tsk->mm->end_code;
+	else if (off < sizeof(struct pt_regs))
 		tmp = get_user_reg(tsk, off >> 2);
 		tmp = get_user_reg(tsk, off >> 2);
 
 
 	return put_user(tmp, ret);
 	return put_user(tmp, ret);