Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: John Baldwin <jhb@freebsd.org>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Use kinfo_getvmmap () on FreeBSD to enumerate memory regions.
Date: Fri, 06 Mar 2015 22:41:00 -0000	[thread overview]
Message-ID: <54FA2D0F.7000108@redhat.com> (raw)
In-Reply-To: <1897208.OU0R2xD82y@ralph.baldwin.cx>

On 03/06/2015 09:06 PM, John Baldwin wrote:
> On Friday, March 06, 2015 07:49:23 PM Pedro Alves wrote:
>> Hi John,
>>
>> Looks good to me, with a few nits/suggestions below.
>>
>> On 02/26/2015 09:44 PM, John Baldwin wrote:
>>> Use kinfo_getvmmap () from libutil on FreeBSD to enumerate memory
>>> regions in a running process instead of /proc/<pid>/map.  FreeBSD systems
>>> do not mount procfs by default, but kinfo_getvmmap () uses a sysctl that
>>> is always available.
>>>
>>> Skip memory regions for devices as well as regions an application has
>>> requested to not be dumped via the MAP_NOCORE flag to mmap () or
>>> MADV_NOCORE advice to madvise ().
>>
>> Note that GNU's coding conventions tell us to refer to functions by
>> name without the ()'s.
> 
> Ok.
> 
>>> gdb/ChangeLog:
>>> 	* configure.ac: AC_CHECK_LIB(util, kinfo_getvmmap).
>>> 	* configure: Regenerate.
>>> 	* config.in: Regenerate.
>>> 	* fbsd-nat.c (fbsd_find_memory_regions): Use kinfo_getvmmap to
>>> 	enumerate memory regions if present.
>>
>>  	* fbsd-nat.c [!HAVE_KINFO_GETVMMAP] (fbsd_read_mapping): Don't
>> 	define.
>>  	(fbsd_find_memory_regions): Use kinfo_getvmmap to
>>  	enumerate memory regions if present.
> 
> Ok.
> 
>>> ---
>>>
>>>  gdb/configure.ac |  5 +++++
>>>  gdb/fbsd-nat.c   | 56
>>>  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files
>>>  changed, 61 insertions(+)
>>>
>>> diff --git a/gdb/configure.ac b/gdb/configure.ac
>>> index 6ac8adb..b094164 100644
>>> --- a/gdb/configure.ac
>>> +++ b/gdb/configure.ac
>>> @@ -532,6 +532,11 @@ AM_ZLIB
>>>
>>>  # On HP/UX we may need libxpdl for dlgetmodinfo (used by solib-pa64.c).
>>>  AC_SEARCH_LIBS(dlgetmodinfo, [dl xpdl])
>>>
>>> +# On FreeBSD we may need libutil for kinfo_getvmmap (used by fbsd-nat.c).
>>> +AC_CHECK_LIB(util, kinfo_getvmmap,
>>> +  [AC_DEFINE(HAVE_KINFO_GETVMMAP, 1,
>>> +            [Define to 1 if your system has the kinfo_getvmmap function.
>>> ])]) +
>>
>> Isn't
>>
>>  AC_SEARCH_LIBS(kinfo_getvmmap, [util])
>>
>> pretty much the same?
> 
> Might be, I wasn't sure from reading the autoconf docs that this would add the 
> appropriate define.  I'll certainly try it and if it works I'm happier to use 
> the simpler form.
> 
>> (Note: please make sure to use pristine GNU autoconf 2.64 when generating
>> the files, to avoid spurious odd differences coming out.  Some distros
>> carry local patches that result in that, dunno about FreeBSD.)
> 
> Yes, I had to download my own copy to use when I tested this locally.
> 
>>> +  vmentl = kinfo_getvmmap (pid, &nitems);
>>> +  if (vmentl == NULL)
>>> +    perror_with_name (_("Couldn't fetch VM map entries."));
>>> +  cleanup = make_cleanup (free, vmentl);
>>
>> s/free/xfree/g.
> 
> I wasn't sure about this one.  kinfo_getvmmap() calls malloc() from libc 
> internally (so it isn't using xmalloc() to allocate the memory that is 
> returned).  Is it still correct to use xfree() instead of free() in that case?

Ah, I just saw bare "free" and didn't realize that it was kinfo_getvmmap
that malloc the memory.  Yeah, free is correct then.  Sorry for the noise.

> 
>  > @@ -136,4 +191,5 @@ fbsd_find_memory_regions (struct target_ops *self,
>>>
>>>    do_cleanups (cleanup);
>>>    return 0;
>>>
>>> +#endif
>>>
>>>  }
>>
>> I'd suggest splitting fbsd_find_memory_regions in two instead of the
>> big #if/#else/#endif, but that's just personal preference.
> 
> Do you mean an #if/#else/#endif around the entire function vs just the body or 
> do you mean something else?  If the former, I can easily do that (and collapse 
> down to on #if/#else/#endif with the prior conditionally-defined function).

Yeah, that.

Thanks,
Pedro Alves


  reply	other threads:[~2015-03-06 22:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-26 21:45 John Baldwin
2015-03-06 19:49 ` Pedro Alves
2015-03-06 21:46   ` John Baldwin
2015-03-06 22:41     ` Pedro Alves [this message]
2015-03-13 12:04       ` John Baldwin
2015-03-13 17:47         ` Pedro Alves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54FA2D0F.7000108@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=jhb@freebsd.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox