From: John Baldwin <jhb@freebsd.org>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] Use kinfo_getvmmap () on FreeBSD to enumerate memory regions.
Date: Fri, 06 Mar 2015 21:46:00 -0000 [thread overview]
Message-ID: <1897208.OU0R2xD82y@ralph.baldwin.cx> (raw)
In-Reply-To: <54FA04C3.5030405@redhat.com>
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?
> @@ -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).
--
John Baldwin
next prev parent reply other threads:[~2015-03-06 21:46 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 [this message]
2015-03-06 22:41 ` Pedro Alves
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=1897208.OU0R2xD82y@ralph.baldwin.cx \
--to=jhb@freebsd.org \
--cc=gdb-patches@sourceware.org \
--cc=palves@redhat.com \
/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