This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: how to continue from a breakpoint in GNU/Hurd
- From: Richard Braun <rbraun at sceen dot net>
- To: Yue Lu <hacklu dot newborn at gmail dot com>
- Cc: Luis Machado <lgustavo at codesourcery dot com>, gdb at sourceware dot org, bug-hurd at gnu dot org, Thomas Schwinge <thomas at codesourcery dot com>
- Date: Thu, 18 Jul 2013 11:02:58 +0200
- Subject: Re: how to continue from a breakpoint in GNU/Hurd
- References: <CAB8fV=i04n-eHTxP=7hWRkB7O1VJobvrMc5KSHOX0SkJ3vuqhQ at mail dot gmail dot com> <51E5785D dot 1050904 at codesourcery dot com> <CAB8fV=iuUFiNtoU-Trw_GnujMW1REMj2=ZciR=36RDJx1+8wSQ at mail dot gmail dot com> <51E58223 dot 5040505 at codesourcery dot com> <CAB8fV=jnOcYCGmQ_emcoE0ZYH6MjT3K3a1P8=svRR+nKSMD69A at mail dot gmail dot com> <20130717120954 dot GA26158 at dalaran dot sceen dot net> <CAB8fV=hvso0fYxZwm11DTYaZeGrdaMG9nzE04G1G-TbR6wyDOw at mail dot gmail dot com> <20130717161348 dot GA14402 at dalaran dot sceen dot net> <CAB8fV=iby=S=_=ZgkKymrESELobhDVPA-0T2B+jJWGsfpKLowA at mail dot gmail dot com>
On Thu, Jul 18, 2013 at 12:22:07AM +0800, Yue Lu wrote:
> On Thu, Jul 18, 2013 at 12:13 AM, Richard Braun <rbraun@sceen.net> wrote:
> > On Thu, Jul 18, 2013 at 12:07:20AM +0800, Yue Lu wrote:
> >> when I used thread_info() to check the suspend count, they are zero.
> >> But I met a strange thing.
> >> this is my code snippet:
> >> thread_basic_info_data_t _info;
> >> thread_basic_info_t info = &_info;
> >> mach_msg_type_number_t info_len = THREAD_BASIC_INFO_COUNT;
> >> error_t err =
> >> thread_info (thread->port, THREAD_BASIC_INFO, (int *) &info, &info_len);
> >>
> >> after this call, the info turn out to be a _NULL_ pointer. I think
> >
> > If the info pointer is NULL, how do you determine the suspend count ?
> >
> I used this (&_info)->suspend_count to get the sc value.
>
> > Something does look wrong. Check all the parameters of your call, one
> > by one, rigorously.
>
> The only one parameter I used is the first one, I give it as the
> thread port, something like 119 (I have printf it), the left three
> parameters are all the same as the code in gnu-nat.c.
So, in the end, the code (which is taken from GDB) is wrong. It uses
&info, the address of a pointer to _info, where it should use &_info or
info instead. The kernel happily writes the thread info there, erasing
the pointer on the way.
--
Richard Braun