2009-03-25 10:56:21

by Daniel Glöckner

[permalink] [raw]
Subject: [patch] xtensa: implement PTRACE_PEEKUSER addresses for nommu

On nommu gdbserver needs to be able to look up where the currently
debugged application has been relocated. Based on the Blackfin
implementation, this introduces three "addresses" PT_TEXT_ADDR,
PT_DATA_ADDR, and PT_TEXT_END_ADDR for PTRACE_PEEKUSER.

Signed-off-by: Daniel Glöckner <[email protected]>
---
arch/xtensa/include/asm/ptrace.h | 4 ++++
arch/xtensa/kernel/ptrace.c | 12 ++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/arch/xtensa/include/asm/ptrace.h b/arch/xtensa/include/asm/ptrace.h
index 905e1e6..8f4fbf3 100644
--- a/arch/xtensa/include/asm/ptrace.h
+++ b/arch/xtensa/include/asm/ptrace.h
@@ -66,6 +66,10 @@

#define SYSCALL_NR 0x00ff

+#define PT_TEXT_ADDR 0x0300
+#define PT_DATA_ADDR 0x0301
+#define PT_TEXT_END_ADDR 0x0302
+
/* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */

#define PTRACE_GETREGS 12
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
index 9486882..82f3620 100644
--- a/arch/xtensa/kernel/ptrace.c
+++ b/arch/xtensa/kernel/ptrace.c
@@ -211,6 +211,18 @@ int ptrace_peekusr(struct task_struct *child, long regno, long __user *ret)
tmp = regs->syscall;
break;

+ case PT_TEXT_ADDR:
+ tmp = child->mm->start_code;
+ break;
+
+ case PT_DATA_ADDR:
+ tmp = child->mm->start_data;
+ break;
+
+ case PT_TEXT_END_ADDR:
+ tmp = child->mm->end_code;
+ break;
+
default:
return -EIO;
}
--
1.6.2.107.ge47ee


2009-04-24 09:18:37

by Daniel Glöckner

[permalink] [raw]
Subject: [PATCH v2] xtensa: implement PTRACE_PEEKUSER addresses for nommu

On nommu gdbserver needs to be able to look up where the currently
debugged application has been relocated. Based on the Blackfin
implementation, this introduces three "addresses" PT_TEXT_ADDR,
PT_DATA_ADDR, and PT_TEXT_END_ADDR for PTRACE_PEEKUSER.

Changes compared to v1:

- changed PT_*_ADDR constants from 0x300..0x302 to 0xF000..0xF002

The range 0x300..0x3FF has been reserved by Tensilica for TIE user
registers. 0xF000..0xFFFF is free for 3rd-party debuggers, so use
that range instead. See xtensa-libdb-macros.h for details.

Signed-off-by: Daniel Glöckner <[email protected]>
---
arch/xtensa/include/asm/ptrace.h | 4 ++++
arch/xtensa/kernel/ptrace.c | 12 ++++++++++++
2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/arch/xtensa/include/asm/ptrace.h b/arch/xtensa/include/asm/ptrace.h
index 905e1e6..85851f4 100644
--- a/arch/xtensa/include/asm/ptrace.h
+++ b/arch/xtensa/include/asm/ptrace.h
@@ -66,6 +66,10 @@

#define SYSCALL_NR 0x00ff

+#define PT_TEXT_ADDR 0xF000
+#define PT_DATA_ADDR 0xF001
+#define PT_TEXT_END_ADDR 0xF002
+
/* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */

#define PTRACE_GETREGS 12
diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c
index 9486882..82f3620 100644
--- a/arch/xtensa/kernel/ptrace.c
+++ b/arch/xtensa/kernel/ptrace.c
@@ -211,6 +211,18 @@ int ptrace_peekusr(struct task_struct *child, long regno, long __user *ret)
tmp = regs->syscall;
break;

+ case PT_TEXT_ADDR:
+ tmp = child->mm->start_code;
+ break;
+
+ case PT_DATA_ADDR:
+ tmp = child->mm->start_data;
+ break;
+
+ case PT_TEXT_END_ADDR:
+ tmp = child->mm->end_code;
+ break;
+
default:
return -EIO;
}
--
1.6.1.3