This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Reg : gdb crash is seen while attaching a process to gdb.


Hi ,

Yes it worked for me.

Thanks,
Rajesh Dasari.


On Thu, Apr 27, 2017 at 2:32 PM, Yao Qi <qiyaoltc@gmail.com> wrote:
> RAJESH DASARI <raajeshdasari@gmail.com> writes:
>
> [Move it to gdb-patches@sourceware.org]
>
>> Could someone please provide  comments.
>>
>> diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
>> index 9d22773..68641f8 100644
>> --- a/gdb/mips-linux-nat.c
>> +++ b/gdb/mips-linux-nat.c
>> @@ -634,9 +634,20 @@ mips_linux_new_thread (struct lwp_info *lp)
>>                                         &watch_readback_valid, 0))
>>      return;
>>
>> +  long r;
>> +  r= ptrace (PTRACE_SET_WATCH_REGS, tid, &watch_mirror, NULL);
>>    tid = ptid_get_lwp (lp->ptid);
>> -  if (ptrace (PTRACE_SET_WATCH_REGS, tid, &watch_mirror, NULL) == -1)
>> -    perror_with_name (_("Couldn't write debug register"));
>> +  if ( r == -1L && errno == ESRCH )
>> +  {
>> +     /* sleep for a while to eliminate race condition on  update to kernel
>> +      * task structure with the process state (STOP state of thread).
>> +      */
>> +     usleep(10000);
>> +     if ( ptrace (PTRACE_SET_WATCH_REGS, tid, &watch_mirror, NULL) == -1 )
>> +     {
>> +        perror_with_name (_("Couldn't write debug register"));
>> +     }
>> +   }
>>  }
>
> I am wondering why mips_linux_read_watch_registers
> (ptrace (PTRACE_GET_WATCH_REGS) is successful but
> ptrace (PTRACE_SET_WATCH_REGS) fails here.  Looks they may use different
> lwpids.  Does the patch work for you?
>
> --
> Yao (齐尧)
>
> From dc9b626b826b26431772271c9d9a3ee343d8a1e8 Mon Sep 17 00:00:00 2001
> From: Yao Qi <yao.qi@linaro.org>
> Date: Thu, 27 Apr 2017 09:59:40 +0100
> Subject: [PATCH] Use lwpid from lwp_info instead of inferior_ptid
>
> gdb:
>
> 2017-04-27  Yao Qi  <yao.qi@linaro.org>
>
>         * mips-linux-nat.c (mips_linux_new_thread): Get lwpid from
>         lwp_info instead of getting from inferior_ptid.
>
> diff --git a/gdb/mips-linux-nat.c b/gdb/mips-linux-nat.c
> index 9596b49..c5c18fd 100644
> --- a/gdb/mips-linux-nat.c
> +++ b/gdb/mips-linux-nat.c
> @@ -624,14 +624,13 @@ write_watchpoint_regs (void)
>  static void
>  mips_linux_new_thread (struct lwp_info *lp)
>  {
> -  int tid;
> +  long tid = ptid_get_lwp (lp->ptid);
>
> -  if (!mips_linux_read_watch_registers (ptid_get_lwp (inferior_ptid),
> +  if (!mips_linux_read_watch_registers (tid,
>                                         &watch_readback,
>                                         &watch_readback_valid, 0))
>      return;
>
> -  tid = ptid_get_lwp (lp->ptid);
>    if (ptrace (PTRACE_SET_WATCH_REGS, tid, &watch_mirror, NULL) == -1)
>      perror_with_name (_("Couldn't write debug register"));
>  }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]