public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: Pedro Alves <palves@redhat.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH v3 12/14] add linux_infcall_mmap
Date: Sun, 23 Nov 2014 19:11:00 -0000	[thread overview]
Message-ID: <20141123191136.GA31798@host2.jankratochvil.net> (raw)
In-Reply-To: <54623CA7.8060702@redhat.com>

On Tue, 11 Nov 2014 17:43:19 +0100, Pedro Alves wrote:
> On 11/01/2014 09:47 PM, Jan Kratochvil wrote:
> > +/* See gdbarch.sh 'infcall_mmap'.  */
> > +
> > +static CORE_ADDR
> > +linux_infcall_mmap (CORE_ADDR size, unsigned prot)
> > +{
> > +  struct objfile *objf;
> > +  /* Do there still exist any Linux systems without "mmap64"?
> > +     "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32.  */
> > +  struct value *mmap_val = find_function_in_inferior ("mmap64", &objf);
> > +  struct value *addr_val;
> > +  struct gdbarch *gdbarch = get_objfile_arch (objf);
> > +  CORE_ADDR retval;
> > +  enum
> > +    {
> > +      ARG_ADDR, ARG_LENGTH, ARG_PROT, ARG_FLAGS, ARG_FD, ARG_OFFSET, ARG_MAX
> > +    };
> > +  struct value *arg[ARG_MAX];
> > +
> > +  arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
> > +				      0);
> > +  /* Assuming sizeof (unsigned long) == sizeof (size_t).  */
> > +  arg[ARG_LENGTH] = value_from_ulongest
> > +		    (builtin_type (gdbarch)->builtin_unsigned_long, size);
> > +  gdb_assert ((prot & ~7) == 0);
> > +  arg[ARG_PROT] = value_from_longest (builtin_type (gdbarch)->builtin_int,
> > +				      0
> > +				      | ((prot & 4) != 0 ? PROT_READ : 0)
> > +				      | ((prot & 2) != 0 ? PROT_WRITE : 0)
> > +				      | ((prot & 1) != 0 ? PROT_EXEC : 0));
> > +  arg[ARG_FLAGS] = value_from_longest (builtin_type (gdbarch)->builtin_int,
> > +				       MAP_PRIVATE | MAP_ANONYMOUS);
> 
> PROT_READ, PROT_WRITE, PROT_EXEC, MAP_PRIVATE, MAP_ANONYMOUS
> are host values/macros.

Added to arch-utils.h:
+/* Symbols for gdbarch_infcall_mmap; their Linux PROT_* system
+   definitions would be dependent on compilation host.  */
+#define GDB_MMAP_PROT_READ     0x1     /* Page can be read.  */
+#define GDB_MMAP_PROT_WRITE    0x2     /* Page can be written.  */
+#define GDB_MMAP_PROT_EXEC     0x4     /* Page can be executed.  */

Added to linux-tdep.c:
+/* Symbols for linux_infcall_mmap's ARG_FLAGS; their Linux MAP_* system
+   definitions would be dependent on compilation host.  */
+#define GDB_MMAP_MAP_PRIVATE   0x02            /* Changes are private.  */
+#define GDB_MMAP_MAP_ANONYMOUS 0x20            /* Don't use a file.  */
and
-  gdb_assert ((prot & ~7) == 0);
+  gdb_assert ((prot & ~(GDB_MMAP_PROT_READ | GDB_MMAP_PROT_WRITE
+                       | GDB_MMAP_PROT_EXEC))
+             == 0);

Changed gdbarch.sh comment:
-# PROT has rwx bitmask format - bit 2 (value 4) is for readable memory, bit 1
-# (value 2) is for writable memory and bit 0 (value 1) is for executable memory.
+# PROT has GDB_MMAP_PROT_* bitmask format.

Change changed the magic numbers to GDB_MMAP_PROT_* accordingly:
       // Make the memory always readable.
-      prot = 4;
+      prot = GDB_MMAP_PROT_READ;
       if ((bfd_get_section_flags (abfd, sect) & SEC_READONLY) == 0)
-       prot |= 2;
+       prot |= GDB_MMAP_PROT_WRITE;
       if ((bfd_get_section_flags (abfd, sect) & SEC_CODE) != 0)
-       prot |= 1;
+       prot |= GDB_MMAP_PROT_EXEC;
[...]
-                                       TYPE_LENGTH (regs_type), 4);
+                                       TYPE_LENGTH (regs_type),
+                                       GDB_MMAP_PROT_READ);


> It also likely breaks --enable-targets=all builds on hosts
> that don't have mmap at all.  E.g., this comes out empty on F20:
> 
>  $ grep -rn PROT_READ /usr/i686-w64-mingw32/sys-root/mingw/include/

This could be caught automatically by Gerrit+Jenkins like other projects do
instead of wasting engineering time to do by hand all the parts of reviews
which machines can do.  Moreover such regressions would be caught before the
commit, compared to the GDB regressions happening post-commit as there is no
automatic pre-commit checking.  My Gerrit proposal was denied and replaced by
Patchwork instead.  This also makes regression results comparison difficult to
do as the regressions stack on top of each others.


Thanks,
Jan

  reply	other threads:[~2014-11-23 19:11 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-01 21:45 [PATCH v3 00/14] let gdb reuse gcc's C compiler Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 05/14] add dummy frame destructor Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 07/14] add gnu_triplet_regexp gdbarch method Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 02/14] add gcc/gdb interface files Jan Kratochvil
2014-11-03 12:51   ` Yao Qi
2014-11-03 12:56     ` Jan Kratochvil
2014-11-03 13:24       ` Yao Qi
2014-11-01 21:46 ` [PATCH v3 06/14] add infcall_mmap and gcc_target_options gdbarch methods Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 03/14] add some missing ops to DWARF assembler Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 04/14] add make_unqualified_type Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 08/14] introduce call_function_by_hand_dummy Jan Kratochvil
2014-11-01 21:46 ` [PATCH v3 01/14] introduce ui_file_write_for_put Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 10/14] make dwarf_expr_frame_base_1 public Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 12/14] add linux_infcall_mmap Jan Kratochvil
2014-11-11 16:43   ` Pedro Alves
2014-11-23 19:11     ` Jan Kratochvil [this message]
2014-12-12 14:38       ` Pedro Alves
2014-11-01 21:47 ` [PATCH v3 13/14] add s390_gcc_target_options Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 11/14] export dwarf2_reg_to_regnum_or_error Jan Kratochvil
2014-11-01 21:47 ` [PATCH v3 09/14] split dwarf2_fetch_cfa_info from dwarf2_compile_expr_to_ax Jan Kratochvil
2014-11-01 21:48 ` [PATCH v3 14/14] the "compile" command Jan Kratochvil
2014-11-02 16:03   ` Eli Zaretskii
2014-11-20 21:24     ` Jan Kratochvil
2014-11-21  7:58       ` Eli Zaretskii
2014-11-21 18:41         ` Jan Kratochvil
2014-11-21 19:47           ` Eli Zaretskii
2014-11-03 13:08   ` Yao Qi
2014-11-14 18:43     ` Jan Kratochvil
2014-11-11 18:53   ` Pedro Alves
2014-11-23 18:36     ` Jan Kratochvil
2014-12-12 14:38       ` Pedro Alves
2014-11-01 21:52 ` [PATCH v3 00/14] let gdb reuse gcc's C compiler Jan Kratochvil
2014-11-01 21:56 ` Jan Kratochvil
2014-11-03 12:47 ` Yao Qi
2014-11-03 12:49   ` Jan Kratochvil

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=20141123191136.GA31798@host2.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).