fix PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK and PTRACE_O_TRACECLONE.
allocate debug registers area, for new process. (gdb testsuite gdb.base/inferior-died.exp) refs #266 refs #372
This commit is contained in:
@ -99,6 +99,7 @@ extern unsigned long do_kill(int pid, int tid, int sig, struct siginfo *info, in
|
|||||||
int copy_from_user(struct process *, void *, const void *, size_t);
|
int copy_from_user(struct process *, void *, const void *, size_t);
|
||||||
int copy_to_user(struct process *, void *, const void *, size_t);
|
int copy_to_user(struct process *, void *, const void *, size_t);
|
||||||
void do_setpgid(int, int);
|
void do_setpgid(int, int);
|
||||||
|
extern long alloc_debugreg(struct process *proc);
|
||||||
|
|
||||||
int prepare_process_ranges_args_envs(struct process *proc,
|
int prepare_process_ranges_args_envs(struct process *proc,
|
||||||
struct program_load_desc *pn,
|
struct program_load_desc *pn,
|
||||||
@ -1550,6 +1551,10 @@ static int ptrace_report_clone(struct process *proc, struct process *new, int ev
|
|||||||
new->ftn->ptrace = proc->ftn->ptrace;
|
new->ftn->ptrace = proc->ftn->ptrace;
|
||||||
new->ftn->ppid_parent = new->ftn->parent; /* maybe proc */
|
new->ftn->ppid_parent = new->ftn->parent; /* maybe proc */
|
||||||
|
|
||||||
|
if ((new->ftn->ptrace & PT_TRACED) && new->ptrace_debugreg == NULL) {
|
||||||
|
alloc_debugreg(new);
|
||||||
|
}
|
||||||
|
|
||||||
ihk_mc_spinlock_lock_noirq(&new->ftn->parent->lock);
|
ihk_mc_spinlock_lock_noirq(&new->ftn->parent->lock);
|
||||||
list_for_each_entry_safe(child, next, &new->ftn->parent->children, siblings_list) {
|
list_for_each_entry_safe(child, next, &new->ftn->parent->children, siblings_list) {
|
||||||
if(child == new->ftn) {
|
if(child == new->ftn) {
|
||||||
@ -2855,8 +2860,6 @@ out:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern long alloc_debugreg(struct process *proc);
|
|
||||||
|
|
||||||
static int ptrace_attach(int pid)
|
static int ptrace_attach(int pid)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user