mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-01 12:04:08 +00:00
[IA64] remove find_thread_for_addr()
find_thread_for_addr() is no longer needed. It was only used to find the correct kernel RBS for a given memory address, but since the kernel RBS is not needed any longer, this function can go away. Signed-off-by: Petr Tesarik <ptesarik@suse.cz> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
08b23d74e0
commit
e868a55c2a
1 changed files with 1 additions and 55 deletions
|
@ -697,52 +697,6 @@ thread_matches (struct task_struct *thread, unsigned long addr)
|
||||||
return 1; /* looks like we've got a winner */
|
return 1; /* looks like we've got a winner */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* GDB apparently wants to be able to read the register-backing store
|
|
||||||
* of any thread when attached to a given process. If we are peeking
|
|
||||||
* or poking an address that happens to reside in the kernel-backing
|
|
||||||
* store of another thread, we need to attach to that thread, because
|
|
||||||
* otherwise we end up accessing stale data.
|
|
||||||
*
|
|
||||||
* task_list_lock must be read-locked before calling this routine!
|
|
||||||
*/
|
|
||||||
static struct task_struct *
|
|
||||||
find_thread_for_addr (struct task_struct *child, unsigned long addr)
|
|
||||||
{
|
|
||||||
struct task_struct *p;
|
|
||||||
struct mm_struct *mm;
|
|
||||||
struct list_head *this, *next;
|
|
||||||
int mm_users;
|
|
||||||
|
|
||||||
if (!(mm = get_task_mm(child)))
|
|
||||||
return child;
|
|
||||||
|
|
||||||
/* -1 because of our get_task_mm(): */
|
|
||||||
mm_users = atomic_read(&mm->mm_users) - 1;
|
|
||||||
if (mm_users <= 1)
|
|
||||||
goto out; /* not multi-threaded */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Traverse the current process' children list. Every task that
|
|
||||||
* one attaches to becomes a child. And it is only attached children
|
|
||||||
* of the debugger that are of interest (ptrace_check_attach checks
|
|
||||||
* for this).
|
|
||||||
*/
|
|
||||||
list_for_each_safe(this, next, ¤t->children) {
|
|
||||||
p = list_entry(this, struct task_struct, sibling);
|
|
||||||
if (p->tgid != child->tgid)
|
|
||||||
continue;
|
|
||||||
if (thread_matches(p, addr)) {
|
|
||||||
child = p;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
mmput(mm);
|
|
||||||
return child;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write f32-f127 back to task->thread.fph if it has been modified.
|
* Write f32-f127 back to task->thread.fph if it has been modified.
|
||||||
*/
|
*/
|
||||||
|
@ -1520,7 +1474,6 @@ asmlinkage long
|
||||||
sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
|
sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
|
||||||
{
|
{
|
||||||
struct pt_regs *pt;
|
struct pt_regs *pt;
|
||||||
unsigned long peek_or_poke;
|
|
||||||
struct task_struct *child;
|
struct task_struct *child;
|
||||||
struct switch_stack *sw;
|
struct switch_stack *sw;
|
||||||
long ret;
|
long ret;
|
||||||
|
@ -1532,19 +1485,12 @@ sys_ptrace (long request, pid_t pid, unsigned long addr, unsigned long data)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
peek_or_poke = (request == PTRACE_PEEKTEXT
|
|
||||||
|| request == PTRACE_PEEKDATA
|
|
||||||
|| request == PTRACE_POKETEXT
|
|
||||||
|| request == PTRACE_POKEDATA);
|
|
||||||
ret = -ESRCH;
|
ret = -ESRCH;
|
||||||
read_lock(&tasklist_lock);
|
read_lock(&tasklist_lock);
|
||||||
{
|
{
|
||||||
child = find_task_by_pid(pid);
|
child = find_task_by_pid(pid);
|
||||||
if (child) {
|
if (child)
|
||||||
if (peek_or_poke)
|
|
||||||
child = find_thread_for_addr(child, addr);
|
|
||||||
get_task_struct(child);
|
get_task_struct(child);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
read_unlock(&tasklist_lock);
|
read_unlock(&tasklist_lock);
|
||||||
if (!child)
|
if (!child)
|
||||||
|
|
Loading…
Add table
Reference in a new issue