GNU logs - #27782, boring messages


Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: [wishlist] scheme level mmap
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Fri, 21 Jul 2017 13:40:02 +0000
Resent-Message-ID: <handler.27782.B.150064439025677 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: report 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
X-Debbugs-Original-To: bug-guile@HIDDEN
Received: via spool by submit <at> debbugs.gnu.org id=B.150064439025677
          (code B ref -1); Fri, 21 Jul 2017 13:40:02 +0000
Received: (at submit) by debbugs.gnu.org; 21 Jul 2017 13:39:50 +0000
Received: from localhost ([127.0.0.1]:50487 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1dYY9m-0006g5-5c
	for submit <at> debbugs.gnu.org; Fri, 21 Jul 2017 09:39:50 -0400
Received: from eggs.gnu.org ([208.118.235.92]:51454)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1dYY9k-0006fs-Ub
 for submit <at> debbugs.gnu.org; Fri, 21 Jul 2017 09:39:49 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <matt.wette@HIDDEN>) id 1dYY9e-0005Cs-UR
 for submit <at> debbugs.gnu.org; Fri, 21 Jul 2017 09:39:43 -0400
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org
X-Spam-Level: 
X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_40,FREEMAIL_FROM,
 T_DKIM_INVALID autolearn=disabled version=3.3.2
Received: from lists.gnu.org ([2001:4830:134:3::11]:38566)
 by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)
 (Exim 4.71) (envelope-from <matt.wette@HIDDEN>)
 id 1dYY9e-0005Ck-QS
 for submit <at> debbugs.gnu.org; Fri, 21 Jul 2017 09:39:42 -0400
Received: from eggs.gnu.org ([2001:4830:134:3::10]:42405)
 by lists.gnu.org with esmtp (Exim 4.71)
 (envelope-from <matt.wette@HIDDEN>) id 1dYY9d-0008Tg-J2
 for bug-guile@HIDDEN; Fri, 21 Jul 2017 09:39:42 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
 (envelope-from <matt.wette@HIDDEN>) id 1dYY9Z-0005A4-K0
 for bug-guile@HIDDEN; Fri, 21 Jul 2017 09:39:41 -0400
Received: from mail-pf0-x232.google.com ([2607:f8b0:400e:c00::232]:35948)
 by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16)
 (Exim 4.71) (envelope-from <matt.wette@HIDDEN>)
 id 1dYY9Z-000591-CK
 for bug-guile@HIDDEN; Fri, 21 Jul 2017 09:39:37 -0400
Received: by mail-pf0-x232.google.com with SMTP id o88so24324277pfk.3
 for <bug-guile@HIDDEN>; Fri, 21 Jul 2017 06:39:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:message-id:date
 :to; bh=sS7KkSIiDloap3/Fngj0RzmWpbNZ8GCPRUC9HvT4Zpo=;
 b=N/INHmNM5v6UlTpvTPfdc11AgQ4huLTsHGIQLBHhcspHYWcLKV34O7Y+Cty52uso9K
 vY6NZyGHxqm1m+YnTThOi+oYs1fhyoQ6fKfPNQyx4P6LpN5/kegxx5CB/cI/q9v1al1b
 NN3q55iFe8l3PBCbJLwhBjvrYoqx8Rq3wTvMKCZQ+Bl+d7iCEBqqMlaNOsg7jKVL2Ty8
 Cp2HkZed+ojaW6uRZOfp4J3ke0OSjAVEYEpMAGJKzP1Ho0oWRNJGiFuLMlgQiecAN05T
 dJBS2ss9IiNqQV1nmpDxD+2hA829Z4v5ZAwOWItvQzr7lz3ZfO1xLi2OX+trx7Wc9Ec+
 HhcQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:message-id:date:to;
 bh=sS7KkSIiDloap3/Fngj0RzmWpbNZ8GCPRUC9HvT4Zpo=;
 b=CcoqbF0kWJeR7kbyIAKbzlLsh57RfGx6YhpYed8OyHqqKIqpkpw9RSd5K0L2vsDRWb
 wmpS9n6SPJHUKCdZ0vTsKf8CoD18icFBtkPOYpRJ2sC5OdxBmJsJip6sHJ8eH/yD/EWv
 6NMcsQyaYxpOlLoV2hq+j7KGTv2jOxb17FmkbcDExYL6NZo6aHbTLJMgg6taqkbXED9c
 AwUaqJBzSrz7zLQryfWE9N38KTq5wJrsGtbEXq3n3Ikratc5TlzC2vx+xv1tmvhyGzVI
 Jbxdt9RgVsmDXKUi810fuUKoL4YjR8pN4HMKhxyNiMsVUWKqdm5vOChy2MGScN6kbUVH
 +7NA==
X-Gm-Message-State: AIVw110eA2yIPSGlyuYmidiMXpSBYrp1TvV/sQtk2vE1CctVKCwH+iws
 Y83QBfgDGRr5mG0UGcc=
X-Received: by 10.99.152.66 with SMTP id l2mr7251123pgo.93.1500644374140;
 Fri, 21 Jul 2017 06:39:34 -0700 (PDT)
Received: from nautilus.championbroadband.com
 (216-165-236-44.championbroadband.com. [216.165.236.44])
 by smtp.gmail.com with ESMTPSA id v9sm6634161pfi.115.2017.07.21.06.39.33
 for <bug-guile@HIDDEN>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Fri, 21 Jul 2017 06:39:33 -0700 (PDT)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Message-Id: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
Date: Fri, 21 Jul 2017 06:39:32 -0700
X-Mailer: Apple Mail (2.3273)
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
 recognized.
X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x
X-Received-From: 2001:4830:134:3::11
X-Spam-Score: -4.0 (----)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -4.0 (----)

There was an implicit request on the user-guile mailing list (20 Jul =
2017) to provide a scheme language call to mmap.

I am working on a prototype and will post when I get a simple case =
working.  Here is non-working code so far:


Currently I have this in a file =E2=80=9Cmmap.c=E2=80=9D and #including =
into filesys.c.


#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#ifdef HAVE_SYS_MMAN_H
#  include <sys/mman.h>
#endif

#include "libguile/_scm.h"
#include "libguile/smob.h"
#include "libguile/fdes-finalizers.h"
#include "libguile/feature.h"

SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
		      SCM offset);
SCM_API SCM scm_munmap (SCM addr, SCM len);

#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
// python mmap makes the last four args optional
// should use fd=3D-1 default on mac
SCM_DEFINE (scm_mmap, "mmap", 6, 0, 0,=20
            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
	    "See the man page. returns a foreign pointer which one =
would"
	    "ordinarily convert to bytevector using pointer->bytevector. =
 "
	    "Note that the region returned by mmap is not (?) searched "
	    "by the garbage collector."
	    "@example\n(define reg\n (pointer->bytevector\n  "
	    "(mmap %void-pointer #x10000 (logior PROT_READ PROT_WRITE) "
	    "MAP_ANON -1 0) #x1000))"
	    "@end example"
	    )
#define FUNC_NAME s_scm_mmap
{
  void *c_mem, *c_addr;
  size_t c_len;
  int c_prot, c_flags, c_fd;
  scm_t_off c_offset;
  SCM ret;

  SCM_VALIDATE_POINTER (1, addr);
 =20
  c_addr =3D (void *) SCM_POINTER_VALUE (addr);
  c_len =3D scm_to_size_t (len);
  c_prot =3D scm_to_int (prot);
  c_flags =3D scm_to_int (flags);
  c_fd =3D scm_to_int (fd);
  c_offset =3D SCM_UNBNDP (offset) ? 0: scm_to_off_t (offset);
 =20
  c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);

  ret =3D scm_from_pointer (c_mem, NULL);
  return ret;
}

#undef FUNC_NAME
SCM_DEFINE (scm_munmap, "munmap", 2, 0, 0,=20
            (SCM addr, SCM len),
	    "See the man page. Given foreign pointer unmap."
	    )
#define FUNC_NAME s_scm_munmap
{
  void *c_addr;
  size_t c_len;
  int c_res;
  SCM res;

  SCM_VALIDATE_POINTER (1, addr);
 =20
  c_addr =3D (void *) SCM_POINTER_VALUE (addr);
  c_len =3D scm_to_size_t (len);

  c_res =3D munmap(c_addr, c_len);
  res =3D scm_from_int (c_res);
  return res;
}
#endif /* HAVE_SYS_MMAN_H */

#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)

#define MMAP_DEFS					\
  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE)); \
  scm_c_define ("PROT_READ", scm_from_int (PROT_READ)); \
  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE)); \
  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC)); \
  \
  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS)); \
  scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON)); \
  scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE)); \
  scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED)); \
  scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE)); \
  scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE)); \
  scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED)); \
  scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE))

#else
#define MMAP_DEFS /* */
#endif /* HAVE_SYS_MMAN_H */






Message sent:


Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Mailer: MIME-tools 5.505 (Entity 5.505)
Content-Type: text/plain; charset=utf-8
X-Loop: help-debbugs@HIDDEN
From: help-debbugs@HIDDEN (GNU bug Tracking System)
To: Matt Wette <matt.wette@HIDDEN>
Subject: bug#27782: Acknowledgement ([wishlist] scheme level mmap)
Message-ID: <handler.27782.B.150064439025677.ack <at> debbugs.gnu.org>
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
X-Gnu-PR-Message: ack 27782
X-Gnu-PR-Package: guile
Reply-To: 27782 <at> debbugs.gnu.org
Date: Fri, 21 Jul 2017 13:40:02 +0000

Thank you for filing a new bug report with debbugs.gnu.org.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 bug-guile@HIDDEN

If you wish to submit further information on this problem, please
send it to 27782 <at> debbugs.gnu.org.

Please do not send mail to help-debbugs@HIDDEN unless you wish
to report a problem with the Bug-tracking system.

--=20
27782: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D27782
GNU Bug Tracking System
Contact help-debbugs@HIDDEN with problems


Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: Acknowledgement ([wishlist] scheme level mmap)
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Fri, 21 Jul 2017 14:36:01 +0000
Resent-Message-ID: <handler.27782.B27782.150064774231289 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.150064774231289
          (code B ref 27782); Fri, 21 Jul 2017 14:36:01 +0000
Received: (at 27782) by debbugs.gnu.org; 21 Jul 2017 14:35:42 +0000
Received: from localhost ([127.0.0.1]:51345 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1dYZ1p-00088b-Sd
	for submit <at> debbugs.gnu.org; Fri, 21 Jul 2017 10:35:42 -0400
Received: from mail-pf0-f170.google.com ([209.85.192.170]:34023)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1dYZ1o-00088P-30
 for 27782 <at> debbugs.gnu.org; Fri, 21 Jul 2017 10:35:40 -0400
Received: by mail-pf0-f170.google.com with SMTP id q85so24886604pfq.1
 for <27782 <at> debbugs.gnu.org>; Fri, 21 Jul 2017 07:35:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:date:references
 :to:in-reply-to:message-id;
 bh=tndBSRmlKBtcRNG/2KZbAu8xymotB4VCxVwliIg0WaU=;
 b=lJnCg6kwv9TamVwdzkXrCjZ8VBnh1uRJQTE2yz3a4HNcqTF23YuR+IjqvKQKJJzhfm
 W3p4er3Q3gG3kdY35r74yJvzgJ/Pgb2F2r9Fje88oDv+7S4kAEpdn6CTDzSgtZUcspI8
 0VBL9R2S5Y2YFUSOzgUyo8a1kCjg6SKdDi3yU8xUU8sZOTqg5Wl2STNAhKKFphJ/FqUV
 k5npjDpIJLEgTLmrag+KIaE7qo3054AIRNJoqllyT9QxBbhq8ik771EyUZf+aYXeDP/Q
 1cgTnnBNfLgnxCd/neF/neSd5VJhCXSVJsU3cOQ1PYPCk+9Z5IhKqJJ5NG+zZ7qQfA8x
 S/0A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:date:references:to:in-reply-to:message-id;
 bh=tndBSRmlKBtcRNG/2KZbAu8xymotB4VCxVwliIg0WaU=;
 b=jPyMPCFtmQ9dTvzTq8BEsgw2ekYELsbTQMFi/WzDGdGtuK28ljKNJ9Mj/w+MDNa/vJ
 sgiZ+u4523tQ5GzdKckslyQiRh8Dm/HqweDOb6DcLwEASuAgfyz9HS98k+WIa4wMjoqv
 cw/NU+HWVYTPyIAi/sjBE0XhYHzzb+UnF9M+Hcmn3OMh0u14TsI/O/pIjRE2MqFg3/1J
 XCvl5IyhUP7nTYFldwfPj1Kaf9UbmfegpT4GknLR126L3MAlrJhwRCrUDLPXMxCxa1XZ
 DK84k/DzifCUGINVZ4qAKRpHNzoy9H8KVq8xi7JbJFy8k9SIOe4/B//5qMSdJ00HB2xu
 2i6Q==
X-Gm-Message-State: AIVw113axFwVtaIy+QHSQENAGZnW/9ZwBL5IX14/IGY5iY4CHfMiqR3u
 TlpEvTDuJeOlTl6ZBuY=
X-Received: by 10.84.149.197 with SMTP id a5mr8360951plh.3.1500647733442;
 Fri, 21 Jul 2017 07:35:33 -0700 (PDT)
Received: from nautilus.championbroadband.com
 (216-165-236-44.championbroadband.com. [216.165.236.44])
 by smtp.gmail.com with ESMTPSA id v18sm9730043pfg.164.2017.07.21.07.35.32
 for <27782 <at> debbugs.gnu.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Fri, 21 Jul 2017 07:35:32 -0700 (PDT)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Date: Fri, 21 Jul 2017 07:35:31 -0700
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
 <handler.27782.B.150064439025677.ack <at> debbugs.gnu.org>
In-Reply-To: <handler.27782.B.150064439025677.ack <at> debbugs.gnu.org>
Message-Id: <417DAD59-E2A0-43D3-9364-41660CFCD31B@HIDDEN>
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: -2.8 (--)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.8 (--)

Works on guile-2.2.2:
> (use-modules (system foreign))
> (define raw (mmap %null-pointer #x1000 (logior PROT_READ PROT_WRITE)
     (logior MAP_ANON MAP_PRIVATE) -1 0))
> (munmap raw #x1000)

  
$ diff filesys.c.orig filesys.c
+ #include "mmap.c"
+ 
  void
  scm_init_filesys ()
  {
+   MMAP_DEFS;
  #ifdef HAVE_POSIX
    scm_tc16_dir = scm_make_smob_type ("directory", 0);
    scm_set_smob_free (scm_tc16_dir, scm_dir_free);


mmap.c-post2: 

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#ifdef HAVE_SYS_MMAN_H
#  include <sys/mman.h>
#  include <errno.h>
#endif

#include "libguile/_scm.h"
#include "libguile/smob.h"
#include "libguile/fdes-finalizers.h"
#include "libguile/feature.h"

SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
		      SCM offset);
SCM_API SCM scm_munmap (SCM addr, SCM len);

#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
// python mmap makes the last four args optional
// should use fd=-1 default on mac
// The following works:
// > (use-modules (system foreign))
// > (define raw (mmap %null-pointer #x1000 (logior PROT_READ PROT_WRITE)
//      (logior MAP_ANON MAP_PRIVATE) -1 0))
// > (munmap raw #x1000)
SCM_DEFINE (scm_mmap, "mmap", 6, 0, 0, 
            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM offset),
	    "See the man page. returns a foreign pointer which one would"
	    "ordinarily convert to bytevector using pointer->bytevector.  "
	    "Note that the region returned by mmap is not (?) searched "
	    "by the garbage collector."
	    "@example\n(define reg\n (pointer->bytevector\n  "
	    "(mmap %null-pointer #x10000 (logior PROT_READ PROT_WRITE) "
	    "(logior MAP_ANON MAP_PRIVATE) -1 0) #x1000))"
	    "@end example"
	    )
#define FUNC_NAME s_scm_mmap
{
  void *c_mem, *c_addr;
  size_t c_len;
  int c_prot, c_flags, c_fd;
  scm_t_off c_offset;

  SCM_VALIDATE_POINTER (1, addr);
  
  c_addr = (void *) SCM_POINTER_VALUE (addr);
  c_len = scm_to_size_t (len);
  c_prot = scm_to_int (prot);
  c_flags = scm_to_int (flags);
  c_fd = scm_to_int (fd);
  c_offset = SCM_UNBNDP (offset) ? 0: scm_to_off_t (offset);

  c_mem = mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);
  if (c_mem == MAP_FAILED)
    SCM_SYSERROR; /* errno set */
  else 
    return scm_from_pointer (c_mem, NULL);
}

#undef FUNC_NAME
SCM_DEFINE (scm_munmap, "munmap", 2, 0, 0, 
            (SCM addr, SCM len),
	    "See the man page. Given foreign pointer unmap."
	    )
#define FUNC_NAME s_scm_munmap
{
  void *c_addr;
  size_t c_len;
  int c_res;

  SCM_VALIDATE_POINTER (1, addr);
  
  c_addr = (void *) SCM_POINTER_VALUE (addr);
  c_len = scm_to_size_t (len);

  c_res = munmap(c_addr, c_len);
  if (c_res == -1)
    SCM_SYSERROR; /* errno set */
  else
    return scm_from_int (c_res);
}
#endif /* HAVE_SYS_MMAN_H */

#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)

#define MMAP_DEFS					\
  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE)); \
  scm_c_define ("PROT_READ", scm_from_int (PROT_READ)); \
  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE)); \
  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC)); \
  \
  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS)); \
  scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON)); \
  scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE)); \
  scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED)); \
  scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE)); \
  scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE)); \
  scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED)); \
  scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE))

#else
#define MMAP_DEFS /* */
#endif /* HAVE_SYS_MMAN_H */





Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile 2.2.2
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
In-Reply-To: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Sat, 28 Oct 2017 15:26:02 +0000
Resent-Message-ID: <handler.27782.B27782.150920433727291 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.150920433727291
          (code B ref 27782); Sat, 28 Oct 2017 15:26:02 +0000
Received: (at 27782) by debbugs.gnu.org; 28 Oct 2017 15:25:37 +0000
Received: from localhost ([127.0.0.1]:39355 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1e8SzR-000767-GV
	for submit <at> debbugs.gnu.org; Sat, 28 Oct 2017 11:25:37 -0400
Received: from mail-pf0-f170.google.com ([209.85.192.170]:48109)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1e8SzQ-00075u-AA
 for 27782 <at> debbugs.gnu.org; Sat, 28 Oct 2017 11:25:36 -0400
Received: by mail-pf0-f170.google.com with SMTP id z11so7131267pfk.4
 for <27782 <at> debbugs.gnu.org>; Sat, 28 Oct 2017 08:25:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:message-id:date
 :to; bh=cVZJG3tyGqFNaJMiho1SoCxe3qumfUS0KPdbm7l6hL8=;
 b=DqHxEKPan31ItFHmd9mLSTFXTLx/YefHGQzo2oztsb6K8+TiVEWmnaSJbKBRF4R/L0
 7v+thzNbUj1vcGNI776HHtF13UR2NbKD2wQoiHA9fqQDe/K8EYPYz0qQyxXgR6tmb2c6
 uTREHpE51OeSkI8VDqlVfRnpbJkV+6YtNzAr3OJchMxhU2PQvBL4jC0TOmGsdCOMBZ7r
 moRQtrJGF9x+7MvlQ6LUmUFUjJUqM3k0PRbAyfXoUyqIc5VRvEVYglZhV65Qbs6cjkJQ
 de5goxscS8A440YBu5CsxLsaSkwJfY0IqLjVkfb6ODs2TOu3jLyIyOMlQ8QcKG1tWVpn
 lvqw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:message-id:date:to;
 bh=cVZJG3tyGqFNaJMiho1SoCxe3qumfUS0KPdbm7l6hL8=;
 b=PcHNFI22Odn9Q07sO92q6tszhBBMBDFuyrzRHu8OAsyxxN/NBuyljNu/pd8FZMTXu1
 7tQKyJB7nVlk91EtHh5+8WJvvUqvTlR1afu6GDDl0bIDcy926PF1KLdKSyn5ergAarBB
 DMtG3c+NEtKtOnqD4JTEdBlO40rJU3kXfn/xMZh8YmifRukudGBD3YEbXvjZ3WfqOFgL
 RnO46+WyeydFypjmXzAgD8CjxZEBdk6/DDPXPa2nzP0YHe9srNhJ+8NiHas8bpMnRYao
 GuKIVwXXnEU7wYeQE9lwZHXIwUFYA5k6G6jFfYLdYLEDRT2PqE/o/nZNcs31LVDv77ar
 QaDw==
X-Gm-Message-State: AMCzsaVQjqFpmHZxdwRj4VHNHGmeWiMNForISeid8/rU4alURqdGTTKJ
 RoVQk1thMZERlI8MR1P96Ov9fZ+F
X-Google-Smtp-Source: ABhQp+QtKd0JdSxYVtRnT7RHCOtVbdFA9rqYH78uvcYzuuIQs/phMI+UaqP6GUNUHpFrwg/05j8rfg==
X-Received: by 10.98.34.22 with SMTP id i22mr3685367pfi.340.1509204329940;
 Sat, 28 Oct 2017 08:25:29 -0700 (PDT)
Received: from nautilus.championbroadband.com
 (216-165-229-229.championbroadband.com. [216.165.229.229])
 by smtp.gmail.com with ESMTPSA id u7sm17899657pfh.142.2017.10.28.08.25.28
 for <27782 <at> debbugs.gnu.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Sat, 28 Oct 2017 08:25:29 -0700 (PDT)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Message-Id: <68E9A19E-CC14-4FEF-96C3-4FCB6F6AD74A@HIDDEN>
Date: Sat, 28 Oct 2017 08:25:27 -0700
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: -2.8 (--)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.8 (--)

I worked on the code a bit more.  It is currently implemented as a =
#include "mman.c" in filesys.c=20
and another file "mman.c".

I believe this needs to be reviewed by someone who understands the =
constraints on foriegn pointers=20
and finalization better than I do.  Also, there is a comment to add a =
procedure mmap/no-search to=20
guarantee that the allocated region is not searched by the GC for =
pointers.

The following patch is against guile-2.2.2:

--- libguile/filesys.c.orig	2017-07-21 06:14:18.000000000 -0700
+++ libguile/filesys.c	2017-10-27 15:40:04.000000000 -0700
@@ -1828,9 +1828,14 @@
=20
 =0C
=20
+#include "mman.c"
+
 void
 scm_init_filesys ()
 {
+#ifdef HAVE_SYS_MMAN_H
+  init_mman();
+#endif
 #ifdef HAVE_POSIX
   scm_tc16_dir =3D scm_make_smob_type ("directory", 0);
   scm_set_smob_free (scm_tc16_dir, scm_dir_free);
--- libguile/mman.c.orig	2017-07-20 17:06:55.000000000 -0700
+++ libguile/mman.c	2017-10-28 08:12:46.000000000 -0700
@@ -0,0 +1,165 @@
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+#  include <sys/mman.h>
+#  include <errno.h>
+#endif
+
+#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
+
+#include "libguile/_scm.h"
+#include "libguile/smob.h"
+#include "libguile/fdes-finalizers.h"
+#include "libguile/feature.h"
+
+SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
+		      SCM offset);
+SCM_API SCM scm_munmap (SCM bvec);
+void init_mman(void);
+static void mmap_finalizer (void *ptr, void *data);
+
+
+SCM_DEFINE (scm_mmap, "mmap", 2, 4, 0,=20
+            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
+	    "mmap addr len [prot [flags [fd [offset]]]]"
+	    "See the man page.  Returns a bytevector."
+	    "ordinarily convert to bytevector using pointer->bytevector. =
 "
+	    "Note that the region returned by mmap is not (?) searched "
+	    "by the garbage collector.  Defaults:\n"
+	    "  PROT   (logior PROT_READ PROT_WRITE)\n"
+	    "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
+	    "  FD     -1\n"
+	    "  OFFSET 0\n"
+	    "@example\n(define reg (mmap %null-pointer #x1000)\n"
+	    "@end example"
+	    )
+#define FUNC_NAME s_scm_mmap
+{
+  void *c_mem, *c_addr;
+  size_t c_len;
+  int c_prot, c_flags, c_fd;
+  scm_t_off c_offset;
+  SCM pointer, bvec;
+
+  if (SCM_POINTER_P (addr))
+    c_addr =3D SCM_POINTER_VALUE (addr);
+  else if (scm_is_integer (addr))
+    c_addr =3D (void*) scm_to_uintptr_t (addr);
+  else
+    SCM_MISC_ERROR("bad addr", addr);
+
+  c_len =3D scm_to_size_t (len);
+ =20
+  if (SCM_UNBNDP (prot))
+    c_prot =3D PROT_READ | PROT_WRITE;
+  else=20
+    c_prot =3D scm_to_int (prot);
+
+  if (SCM_UNBNDP (flags))
+    c_flags =3D MAP_ANON | MAP_PRIVATE;
+  else
+    c_flags =3D scm_to_int (flags);
+
+  if (SCM_UNBNDP (fd))
+    c_fd =3D -1;
+  else
+    c_fd =3D scm_to_int (fd);
+
+  if (SCM_UNBNDP (fd))
+    c_offset =3D 0;
+  else
+    c_offset =3D scm_to_off_t (offset);
+
+  c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);
+  if (c_mem =3D=3D MAP_FAILED)
+    SCM_SYSERROR;			/* errno set */
+
+  pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);
+  bvec =3D scm_c_take_typed_bytevector((signed char *) c_mem + =
c_offset, c_len,
+				     SCM_ARRAY_ELEMENT_TYPE_VU8, =
pointer);
+  /* if sizeof(void*) < sizeof(size_t) we are in trouble: */
+  scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) c_len);
+  return bvec;
+}
+static void
+mmap_finalizer (void *ptr, void *data)
+{
+  void *c_addr;
+  intptr_t c_len;
+  int res;
+
+  c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr));
+  c_len =3D (intptr_t) data;
+  res =3D munmap(c_addr, c_len);
+  if (res !=3D 0) SCM_SYSERROR;
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_munmap, "munmap", 1, 0, 0,=20
+            (SCM bvec),
+	    "See the man page. Given bytevector unmap."
+	    )
+#define FUNC_NAME s_scm_munmap
+{
+  void *c_addr;
+  size_t c_len;
+  int c_res;
+
+  SCM_VALIDATE_BYTEVECTOR (1, bvec);
+ =20
+  c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);
+  c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);
+
+  c_res =3D munmap(c_addr, c_len);
+  if (c_res =3D=3D -1)
+    SCM_SYSERROR;			/* errno set */
+
+  // TODO: clean up bytevector
+  return SCM_UNSPECIFIED;
+}
+#undef FUNC_NAME
+
+void init_mman(void) {
+#ifdef PROT_NONE
+  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_READ", scm_from_int (PROT_READ));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));
+#endif
+
+#ifdef MAP_ANONYMOUS
+  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));
+#endif
+#ifdef MAP_ANON
+  scm_c_define ("MAP_ANO=




Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile 2.2.2
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Sat, 28 Oct 2017 17:11:01 +0000
Resent-Message-ID: <handler.27782.B27782.15092106024928 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.15092106024928
          (code B ref 27782); Sat, 28 Oct 2017 17:11:01 +0000
Received: (at 27782) by debbugs.gnu.org; 28 Oct 2017 17:10:02 +0000
Received: from localhost ([127.0.0.1]:39418 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1e8UcT-0001HI-EK
	for submit <at> debbugs.gnu.org; Sat, 28 Oct 2017 13:10:02 -0400
Received: from mail-pg0-f49.google.com ([74.125.83.49]:48554)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1e8UcR-0001H6-CA
 for 27782 <at> debbugs.gnu.org; Sat, 28 Oct 2017 13:09:59 -0400
Received: by mail-pg0-f49.google.com with SMTP id v78so7720578pgb.5
 for <27782 <at> debbugs.gnu.org>; Sat, 28 Oct 2017 10:09:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:date:references
 :to:in-reply-to:message-id;
 bh=vrWA8FdyGEhjvlvR6CMPIZYqnbqc+an9Q5n0Fcq4H6k=;
 b=Fq6iZDvXdO9LfV5RdHzFoJGfozjT76//msK8upmZuZ3LrppiwNQkgnLL0p4Zz6roYy
 Ioqr/67r9FBsJl1AxlSxgfwblrzM3d4hYBUfU9hYxKCQBrWimwfPBiAwxIrVKQd0VthA
 ftkHudYSB1Kl4b/iPyInVnLfmjoxORmaXPaMJ4XsjMX2mtBZpxIx7vq40Nb87OAlvr/f
 p8QSD9y3xKsI+NLoUfVFiHQlCN89O0lLZCoAcuppqjiryAAZKwEt0wh/Isr72iZjt7x+
 TpMtnsGs7xlsgw3Mb2YiO0B032YW0yjleCNfcKLIu2jBtyhLaE4iEHlKiU6rF7j1z7N4
 8UhA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:date:references:to:in-reply-to:message-id;
 bh=vrWA8FdyGEhjvlvR6CMPIZYqnbqc+an9Q5n0Fcq4H6k=;
 b=fOWE9EBJK6v2O/0vlDqqOiClck4Jm58t6KWRzHAiUJoXG8o5DaICBDxNMuWJVizYGA
 lFZfWYeP6xnFEIrVQe/hkVrDsd1KKKsU2OO8RwZlrx1bNoijzv+wcFIgHpo4kANKvuA2
 s81AUuDnbUP06MTLfcb4S6rmyENx/9b0Q6HsyYH4gE81yrKXM4LnmGuCQQm+WtiYEEP9
 RT0BBeUS7zm+A5bleW2MG5rYnhkMngPDTfoIxWuwJUuHD6oXs8ZudhlLu4REDHE7R68G
 W9Ujfudo/jAB07iVUWebOOAn73qILSV9nAmtMM/GOT0OJlEfh+9MoVJghptYdc4KqDH/
 2NWw==
X-Gm-Message-State: AMCzsaX8O1ZezFjlcYFEJhZUnEW3r/sN1KlaiggPbmTcUu9JX6+sAejX
 etcouVUlUK51ug3hwwAFuKw6iYQT
X-Google-Smtp-Source: ABhQp+RTomTqV0G7ZNRkLwaI3mLsiL+0r2z4cZ2RrAJ1obrYjP5sNp6G1/8BIEOiA2vxDR3af4GLcA==
X-Received: by 10.98.80.69 with SMTP id e66mr3840485pfb.112.1509210593173;
 Sat, 28 Oct 2017 10:09:53 -0700 (PDT)
Received: from nautilus.championbroadband.com
 (216-165-229-229.championbroadband.com. [216.165.229.229])
 by smtp.gmail.com with ESMTPSA id l22sm21413493pfk.45.2017.10.28.10.09.52
 for <27782 <at> debbugs.gnu.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Sat, 28 Oct 2017 10:09:52 -0700 (PDT)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Date: Sat, 28 Oct 2017 10:09:51 -0700
References: <68E9A19E-CC14-4FEF-96C3-4FCB6F6AD74A@HIDDEN>
In-Reply-To: <68E9A19E-CC14-4FEF-96C3-4FCB6F6AD74A@HIDDEN>
Message-Id: <A6DBC060-D85F-44B8-ADE7-04075AE00033@HIDDEN>
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: -0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

I located GC_exclude_static_roots() call for the collector.

Now mmap/search will run allocate a bytevector as in the previously =
provided patch.
And mmap will call mmap/search and then apply GC_exclude_static_roots() =
to the mmap'd region.






Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
In-Reply-To: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Fri, 24 Nov 2017 15:55:02 +0000
Resent-Message-ID: <handler.27782.B27782.15115388609679 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.15115388609679
          (code B ref 27782); Fri, 24 Nov 2017 15:55:02 +0000
Received: (at 27782) by debbugs.gnu.org; 24 Nov 2017 15:54:20 +0000
Received: from localhost ([127.0.0.1]:56132 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1eIGJ1-0002W2-Kt
	for submit <at> debbugs.gnu.org; Fri, 24 Nov 2017 10:54:19 -0500
Received: from mail-pg0-f43.google.com ([74.125.83.43]:39085)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1eIGIz-0002Vp-BA
 for 27782 <at> debbugs.gnu.org; Fri, 24 Nov 2017 10:54:18 -0500
Received: by mail-pg0-f43.google.com with SMTP id 70so15541114pgf.6
 for <27782 <at> debbugs.gnu.org>; Fri, 24 Nov 2017 07:54:17 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:message-id:date
 :to; bh=8CHxkERYU2lWrfMn+NcDkTlhedhgfy/Ic7K4vFtOPKs=;
 b=Nbl6qMAawI4/uH4kSScN++r/lHLtIOeKIm8ZN/D+BpNmFQXXTK0xDR6QDnfJmnJWUo
 xvAfJbbedQfp3rSVtBC0mAfl5fyv3IX0OBQV0TAn3AbW22C+8nQZ5joC3BG1MHnWhlJ1
 RvzeELZ5mWChPkwB1KkzkgIbdcsgh/bwh22D2usTvwdWoxiL0Njj8q9szTjH+2FhQKTO
 W1zVzBhGddJoKmJwxz0NmeochlHsv/nF2ZNtR2gMaIPobWLEhd23nKj4nEASFwT4J2HG
 DMU3aEl6anACoxtoutTzJx+bXVcWcT4OYjwNTCOKuE0IqI6xyDvxRZx5AnPtf00WVUJI
 1OlQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:message-id:date:to;
 bh=8CHxkERYU2lWrfMn+NcDkTlhedhgfy/Ic7K4vFtOPKs=;
 b=l2Ux4mnLjNwnxdmDUokSs1XfZyr9E0VW1yaHT5t1rYekT6XVNK2liNkKhxbtbjGcxG
 hiFbYFVQ/mF1y5xd2DMoOv06Xs+swtPwYRW/kSckqbphM3NsuB/NNyas3/d9VT9+MBSy
 dGJk3mvwvyG4uPtrH+F1Fzv26TRE5H8f0GyvjOmUcpq8LaLyJp6GBap4CninE1AMeHjs
 H275lAMWfYhN5Og7MFnctbDFoZM7j5PPEZ59HVd8uDXqLjBTCs5hwkfSvdDWKe+EgGXc
 +Iexw6vs1sN7Vubuwph8c173wqJAUepNXEkLPc+oolGg3Xw1OG2czL7ImQPPjFytr8fp
 LrSQ==
X-Gm-Message-State: AJaThX6qDRYTUUxp4dS3+qHFIb1/B8ZRigeXUfO/+6gwTfEAD/UvRAec
 5OJg6CzSUVpT2/GCREFjtmiChR4W
X-Google-Smtp-Source: AGs4zMbJgjTMh1nC15dtg9hMREjx7r7t7+PjrNIEvGmh/cXF0PgMPXpSxQcX/krxY+PJrPGRwyeucA==
X-Received: by 10.101.80.8 with SMTP id f8mr8436813pgo.24.1511538850652;
 Fri, 24 Nov 2017 07:54:10 -0800 (PST)
Received: from nautilus.championbroadband.com
 (216-165-229-229.championbroadband.com. [216.165.229.229])
 by smtp.gmail.com with ESMTPSA id o10sm25364361pgq.89.2017.11.24.07.54.09
 for <27782 <at> debbugs.gnu.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Fri, 24 Nov 2017 07:54:10 -0800 (PST)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Message-Id: <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
Date: Fri, 24 Nov 2017 07:54:07 -0800
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.0 (/)






I did a little more on this.  Here is the latest.
It provides mmap (not searched) and mmap/search (searched for pointers =
to GC).


--- libguile/filesys.c.orig	2017-03-01 10:54:31.000000000 -0800
+++ libguile/filesys.c	2017-10-28 10:05:10.000000000 -0700
@@ -1828,9 +1828,14 @@
=20
 =0C
=20
+#include "mman.c"
+
 void
 scm_init_filesys ()
 {
+#ifdef HAVE_SYS_MMAN_H
+  init_mman();
+#endif
 #ifdef HAVE_POSIX
   scm_tc16_dir =3D scm_make_smob_type ("directory", 0);
   scm_set_smob_free (scm_tc16_dir, scm_dir_free);
--- libguile/mman.c.orig	2017-10-28 10:05:10.000000000 -0700
+++ libguile/mman.c	2017-11-04 09:23:35.000000000 -0700
@@ -0,0 +1,199 @@
+// mman.c - v171104a
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+#  include <sys/mman.h>
+#  include <errno.h>
+#endif
+
+#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
+
+#include "libguile/_scm.h"
+#include "libguile/smob.h"
+#include "libguile/fdes-finalizers.h"
+#include "libguile/feature.h"
+
+SCM_API SCM scm_mmap_search (SCM addr, SCM len, SCM prot, SCM flags, =
SCM fd,
+		             SCM offset);
+SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
+		      SCM offset);
+SCM_API SCM scm_munmap (SCM bvec);
+void init_mman(void);
+static void mmap_finalizer (void *ptr, void *data);
+
+SCM_DEFINE (scm_mmap_search, "mmap/search", 2, 4, 0,=20
+            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
+	    "mmap addr len [prot [flags [fd [offset]]]]"
+	    "See the unix man page for mmap.  Returns a bytevector."
+	    "Note that the region allocated will be searched by the =
garbage"
+	    "collector for pointers.  \n"
+	    " Defaults:\n"
+	    "  PROT   (logior PROT_READ PROT_WRITE)\n"
+	    "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
+	    "  FD     -1\n"
+	    "  OFFSET 0\n"
+	    "@example\n(define reg (mmap/search %null-pointer #x1000)\n"
+	    "@end example"
+	    )
+#define FUNC_NAME s_scm_mmap_search
+{
+  void *c_mem, *c_addr;
+  size_t c_len;
+  int c_prot, c_flags, c_fd;
+  scm_t_off c_offset;
+  SCM pointer, bvec;
+
+  if (SCM_POINTER_P (addr))
+    c_addr =3D SCM_POINTER_VALUE (addr);
+  else if (scm_is_integer (addr))
+    c_addr =3D (void*) scm_to_uintptr_t (addr);
+  else
+    SCM_MISC_ERROR("bad addr", addr);
+
+  c_len =3D scm_to_size_t (len);
+ =20
+  if (SCM_UNBNDP (prot))
+    c_prot =3D PROT_READ | PROT_WRITE;
+  else=20
+    c_prot =3D scm_to_int (prot);
+
+  if (SCM_UNBNDP (flags))
+    c_flags =3D MAP_ANON | MAP_PRIVATE;
+  else
+    c_flags =3D scm_to_int (flags);
+
+  if (SCM_UNBNDP (fd))
+    c_fd =3D -1;
+  else
+    c_fd =3D scm_to_int (fd);
+
+  if (SCM_UNBNDP (fd))
+    c_offset =3D 0;
+  else
+    c_offset =3D scm_to_off_t (offset);
+
+  c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);
+  if (c_mem =3D=3D MAP_FAILED)
+    SCM_SYSERROR;			/* errno set */
+
+  pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);
+  bvec =3D scm_c_take_typed_bytevector((signed char *) c_mem + =
c_offset, c_len,
+				     SCM_ARRAY_ELEMENT_TYPE_VU8, =
pointer);
+  /* if sizeof(void*) < sizeof(size_t) we are in trouble: */
+  scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) c_len);
+  return bvec;
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_mmap, "mmap", 2, 4, 0,=20
+            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
+	    "mmap addr len [prot [flags [fd [offset]]]]"
+	    "See the man page.  Returns a bytevector."
+	    "Note that the region returned by mmap will NOT be searched =
"
+	    "by the garbage collector for pointers.\n"
+	    "Defaults:\n"
+	    "  PROT   (logior PROT_READ PROT_WRITE)\n"
+	    "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
+	    "  FD     -1\n"
+	    "  OFFSET 0\n"
+	    "@example\n"
+	    "(define bvec-1MB (mmap 0 #x100000)\n"
+	    "@end example"
+	    )
+#define FUNC_NAME s_scm_mmap
+{
+  SCM bvec;
+  void *c_mem;
+  size_t c_len;
+
+  bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);
+  c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);
+  c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);
+
+  /* tell GC not to scan for pointers */
+  GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);
+
+  return bvec;
+}
+static void
+mmap_finalizer (void *ptr, void *data)
+{
+  void *c_addr;
+  intptr_t c_len;
+  int res;
+
+  c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr));
+  c_len =3D (intptr_t) data;
+  res =3D munmap(c_addr, c_len);
+  if (res !=3D 0) SCM_SYSERROR;
+}
+#undef FUNC_NAME
+
+SCM_DEFINE (scm_munmap, "munmap", 1, 0, 0,=20
+            (SCM bvec),
+	    "See the man page. Given bytevector unmap."
+	    )
+#define FUNC_NAME s_scm_munmap
+{
+  void *c_addr;
+  size_t c_len;
+  int c_res;
+
+  SCM_VALIDATE_BYTEVECTOR (1, bvec);
+ =20
+  c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);
+  c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);
+
+  c_res =3D munmap(c_addr, c_len);
+  if (c_res =3D=3D -1)
+    SCM_SYSERROR;			/* errno set */
+
+  // TODO: clean up bytevector
+  return SCM_UNSPECIFIED;
+}
+#undef FUNC_NAME
+
+void init_mman(void) {
+#ifdef PROT_NONE
+  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_READ", scm_from_int (PROT_READ));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));
+#endif
+#ifdef PROT_
+  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));
+#endif
+
+#ifdef MAP_ANONYMOUS
+  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));
+#endif
+#ifdef MAP_ANON
+  scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));
+#endif
+#ifdef MAP_FILE
+  scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));
+#endif
+#ifdef MAP_FIXED
+  scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));
+#endif
+#ifdef MAP_HASSEMAPHORE
+  scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE));
+#endif
+#ifdef MAP_PRIVATE
+  scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));
+#endif
+#ifdef MAP_SHARED
+  scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));
+#endif
+#ifdef MAP_NOCACHE
+  scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));
+#endif
+  scm_c_define ("PAGE_SIZE", scm_from_int (getpagesize()));
+}
+
+#endif /* HAVE_SYS_MMAN_H */





Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile
Resent-From: Nala Ginrut <nalaginrut@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Fri, 24 Nov 2017 16:23:01 +0000
Resent-Message-ID: <handler.27782.B27782.151154054312273 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: Matt Wette <matt.wette@HIDDEN>
Cc: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.151154054312273
          (code B ref 27782); Fri, 24 Nov 2017 16:23:01 +0000
Received: (at 27782) by debbugs.gnu.org; 24 Nov 2017 16:22:23 +0000
Received: from localhost ([127.0.0.1]:56157 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1eIGkA-0003Bs-KB
	for submit <at> debbugs.gnu.org; Fri, 24 Nov 2017 11:22:23 -0500
Received: from mail-yb0-f176.google.com ([209.85.213.176]:34521)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <nalaginrut@HIDDEN>) id 1eIGk8-0003Bg-Uq
 for 27782 <at> debbugs.gnu.org; Fri, 24 Nov 2017 11:22:21 -0500
Received: by mail-yb0-f176.google.com with SMTP id k40so8430722ybj.1
 for <27782 <at> debbugs.gnu.org>; Fri, 24 Nov 2017 08:22:20 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=V4cNgaurF9cbLgMRZmHUoQM3RX8Y/QYV84MN32xzCsg=;
 b=JF6Z0JXdPdLp1Q/h0DbzxezfuaVWKxWWL9CNto/+dsXm0bFuF/CveYxUqDZ3tf7fgY
 xnqvHFplgJhQheWEzgy5s6fQR1ZssK5ZHKKi+j7HQFvF4le8Ihjz98MX/TW3xDEKjegJ
 K5LwCREhVjOdrPAc7IslTFSLqfyNVX/bzQBrhfnE1ecKih3QwZ5TGlY0rY6QXHyLC02C
 PbuSryUJcGU7h5VIx8UWOdNMYERNNSWabl0i9X3jEibe/k4TycA3DH19tz5Fu9yF4Q2d
 YWLXDO8ZbZozqj1NFw0fZp4v5slejLOpwi2MNj2IsG1HuPUQ5nIfevpOncEunobqSX9W
 9bLQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=V4cNgaurF9cbLgMRZmHUoQM3RX8Y/QYV84MN32xzCsg=;
 b=rtLFBL53x64mbJSImLw+/zn20sD4aIv9tOQxR1w/pL7zetuPIGxriHZHLWQF1BYAD6
 E9/fEXAt5a0R70tcYrv+7sndWUTz0rkBaAT3T1sWTGygWIMFZl4c+6Jq7P6OCPvtLfex
 LbHQD99PFyd+d/R3/QPXRyCzX7nBYCnv5DuulDHMWp/5u1ggKXjCtOuaX6ndb/XxtK/S
 hhtiC/+7zt8Fd77qLMrh3kdW3JEZeN6K/rT4tOHg23EgVRoV8vV3rN3huhEtee2K6fzZ
 5WTD0vgoN1oW5olEgoV5ZwCpA/Mb80v45EhI79nz+fIyp1OrqHAhy3JazoHTQL33Y8c5
 zMtw==
X-Gm-Message-State: AJaThX4AoQCqh33kISUfW0lB+POTmort75K0QOcZBpPfEndLIlaUQK4i
 God0CAlFy5W+ZrSFA9jOY1uErIx9XMhtLiRfIb4=
X-Google-Smtp-Source: AGs4zMbCRjNdA9OtECYp6MNvDlHrXJtASZYja55UYJ+XS9LvRKi2ce+vlQkPhvTVh6ZWUDb/r5aTwoQ+7ASamgUAXTk=
X-Received: by 10.37.216.137 with SMTP id p131mr17613971ybg.397.1511540535249; 
 Fri, 24 Nov 2017 08:22:15 -0800 (PST)
MIME-Version: 1.0
Received: by 10.37.45.94 with HTTP; Fri, 24 Nov 2017 08:22:14 -0800 (PST)
Received: by 10.37.45.94 with HTTP; Fri, 24 Nov 2017 08:22:14 -0800 (PST)
In-Reply-To: <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
 <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
From: Nala Ginrut <nalaginrut@HIDDEN>
Date: Sat, 25 Nov 2017 00:22:14 +0800
Message-ID: <CAPjoZoeWyRx5_eTogzhuUbARZyPtp4OsbCjtGnkp_TGvYfkfag@HIDDEN>
Content-Type: multipart/alternative; boundary="94eb2c061e16aad101055ebcf4cd"
X-Spam-Score: 0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: 0.0 (/)

--94eb2c061e16aad101055ebcf4cd
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Thanks for the work! Could you please add MAP_POPULATE too?

2017=E5=B9=B411=E6=9C=8824=E6=97=A5 =E4=B8=8B=E5=8D=8811:55=EF=BC=8C"Matt W=
ette" <matt.wette@HIDDEN>=E5=86=99=E9=81=93=EF=BC=9A

>
>
>
>
>
> I did a little more on this.  Here is the latest.
> It provides mmap (not searched) and mmap/search (searched for pointers to
> GC).
>
>
> --- libguile/filesys.c.orig     2017-03-01 10:54:31.000000000 -0800
> +++ libguile/filesys.c  2017-10-28 10:05:10.000000000 -0700
> @@ -1828,9 +1828,14 @@
>
>
>
> +#include "mman.c"
> +
>  void
>  scm_init_filesys ()
>  {
> +#ifdef HAVE_SYS_MMAN_H
> +  init_mman();
> +#endif
>  #ifdef HAVE_POSIX
>    scm_tc16_dir =3D scm_make_smob_type ("directory", 0);
>    scm_set_smob_free (scm_tc16_dir, scm_dir_free);
> --- libguile/mman.c.orig        2017-10-28 10:05:10.000000000 -0700
> +++ libguile/mman.c     2017-11-04 09:23:35.000000000 -0700
> @@ -0,0 +1,199 @@
> +// mman.c - v171104a
> +#ifdef HAVE_CONFIG_H
> +#  include <config.h>
> +#endif
> +
> +#ifdef HAVE_SYS_MMAN_H
> +#  include <sys/mman.h>
> +#  include <errno.h>
> +#endif
> +
> +#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
> +
> +#include "libguile/_scm.h"
> +#include "libguile/smob.h"
> +#include "libguile/fdes-finalizers.h"
> +#include "libguile/feature.h"
> +
> +SCM_API SCM scm_mmap_search (SCM addr, SCM len, SCM prot, SCM flags, SCM
> fd,
> +                            SCM offset);
> +SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
> +                     SCM offset);
> +SCM_API SCM scm_munmap (SCM bvec);
> +void init_mman(void);
> +static void mmap_finalizer (void *ptr, void *data);
> +
> +SCM_DEFINE (scm_mmap_search, "mmap/search", 2, 4, 0,
> +            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM offset)=
,
> +           "mmap addr len [prot [flags [fd [offset]]]]"
> +           "See the unix man page for mmap.  Returns a bytevector."
> +           "Note that the region allocated will be searched by the
> garbage"
> +           "collector for pointers.  \n"
> +           " Defaults:\n"
> +           "  PROT   (logior PROT_READ PROT_WRITE)\n"
> +           "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
> +           "  FD     -1\n"
> +           "  OFFSET 0\n"
> +           "@example\n(define reg (mmap/search %null-pointer #x1000)\n"
> +           "@end example"
> +           )
> +#define FUNC_NAME s_scm_mmap_search
> +{
> +  void *c_mem, *c_addr;
> +  size_t c_len;
> +  int c_prot, c_flags, c_fd;
> +  scm_t_off c_offset;
> +  SCM pointer, bvec;
> +
> +  if (SCM_POINTER_P (addr))
> +    c_addr =3D SCM_POINTER_VALUE (addr);
> +  else if (scm_is_integer (addr))
> +    c_addr =3D (void*) scm_to_uintptr_t (addr);
> +  else
> +    SCM_MISC_ERROR("bad addr", addr);
> +
> +  c_len =3D scm_to_size_t (len);
> +
> +  if (SCM_UNBNDP (prot))
> +    c_prot =3D PROT_READ | PROT_WRITE;
> +  else
> +    c_prot =3D scm_to_int (prot);
> +
> +  if (SCM_UNBNDP (flags))
> +    c_flags =3D MAP_ANON | MAP_PRIVATE;
> +  else
> +    c_flags =3D scm_to_int (flags);
> +
> +  if (SCM_UNBNDP (fd))
> +    c_fd =3D -1;
> +  else
> +    c_fd =3D scm_to_int (fd);
> +
> +  if (SCM_UNBNDP (fd))
> +    c_offset =3D 0;
> +  else
> +    c_offset =3D scm_to_off_t (offset);
> +
> +  c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);
> +  if (c_mem =3D=3D MAP_FAILED)
> +    SCM_SYSERROR;                      /* errno set */
> +
> +  pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);
> +  bvec =3D scm_c_take_typed_bytevector((signed char *) c_mem + c_offset,
> c_len,
> +                                    SCM_ARRAY_ELEMENT_TYPE_VU8, pointer)=
;
> +  /* if sizeof(void*) < sizeof(size_t) we are in trouble: */
> +  scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) c_len);
> +  return bvec;
> +}
> +#undef FUNC_NAME
> +
> +SCM_DEFINE (scm_mmap, "mmap", 2, 4, 0,
> +            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM offset)=
,
> +           "mmap addr len [prot [flags [fd [offset]]]]"
> +           "See the man page.  Returns a bytevector."
> +           "Note that the region returned by mmap will NOT be searched "
> +           "by the garbage collector for pointers.\n"
> +           "Defaults:\n"
> +           "  PROT   (logior PROT_READ PROT_WRITE)\n"
> +           "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
> +           "  FD     -1\n"
> +           "  OFFSET 0\n"
> +           "@example\n"
> +           "(define bvec-1MB (mmap 0 #x100000)\n"
> +           "@end example"
> +           )
> +#define FUNC_NAME s_scm_mmap
> +{
> +  SCM bvec;
> +  void *c_mem;
> +  size_t c_len;
> +
> +  bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);
> +  c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);
> +  c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);
> +
> +  /* tell GC not to scan for pointers */
> +  GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);
> +
> +  return bvec;
> +}
> +static void
> +mmap_finalizer (void *ptr, void *data)
> +{
> +  void *c_addr;
> +  intptr_t c_len;
> +  int res;
> +
> +  c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr));
> +  c_len =3D (intptr_t) data;
> +  res =3D munmap(c_addr, c_len);
> +  if (res !=3D 0) SCM_SYSERROR;
> +}
> +#undef FUNC_NAME
> +
> +SCM_DEFINE (scm_munmap, "munmap", 1, 0, 0,
> +            (SCM bvec),
> +           "See the man page. Given bytevector unmap."
> +           )
> +#define FUNC_NAME s_scm_munmap
> +{
> +  void *c_addr;
> +  size_t c_len;
> +  int c_res;
> +
> +  SCM_VALIDATE_BYTEVECTOR (1, bvec);
> +
> +  c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);
> +  c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);
> +
> +  c_res =3D munmap(c_addr, c_len);
> +  if (c_res =3D=3D -1)
> +    SCM_SYSERROR;                      /* errno set */
> +
> +  // TODO: clean up bytevector
> +  return SCM_UNSPECIFIED;
> +}
> +#undef FUNC_NAME
> +
> +void init_mman(void) {
> +#ifdef PROT_NONE
> +  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_READ", scm_from_int (PROT_READ));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));
> +#endif
> +
> +#ifdef MAP_ANONYMOUS
> +  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));
> +#endif
> +#ifdef MAP_ANON
> +  scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));
> +#endif
> +#ifdef MAP_FILE
> +  scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));
> +#endif
> +#ifdef MAP_FIXED
> +  scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));
> +#endif
> +#ifdef MAP_HASSEMAPHORE
> +  scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE));
> +#endif
> +#ifdef MAP_PRIVATE
> +  scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));
> +#endif
> +#ifdef MAP_SHARED
> +  scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));
> +#endif
> +#ifdef MAP_NOCACHE
> +  scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));
> +#endif
> +  scm_c_define ("PAGE_SIZE", scm_from_int (getpagesize()));
> +}
> +
> +#endif /* HAVE_SYS_MMAN_H */
>
>
>
>
>

--94eb2c061e16aad101055ebcf4cd
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Thanks for the work! Could you please add=C2=A0<span styl=
e=3D"color:rgb(85,85,85);font-family:verdana,&quot;bitstream vera sans&quot=
;,tahoma,helvetica,sans-serif;font-size:21.5951px;background-color:rgb(255,=
255,255)">MAP_POPULATE too?</span></div><div class=3D"gmail_extra"><br><div=
 class=3D"gmail_quote">2017=E5=B9=B411=E6=9C=8824=E6=97=A5 =E4=B8=8B=E5=8D=
=8811:55=EF=BC=8C&quot;Matt Wette&quot; &lt;<a href=3D"mailto:matt.wette@gm=
ail.com">matt.wette@HIDDEN</a>&gt;=E5=86=99=E9=81=93=EF=BC=9A<br type=3D=
"attribution"><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;=
border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
<br>
<br>
<br>
I did a little more on this.=C2=A0 Here is the latest.<br>
It provides mmap (not searched) and mmap/search (searched for pointers to G=
C).<br>
<br>
<br>
--- libguile/filesys.c.orig=C2=A0 =C2=A0 =C2=A02017-03-01 10:54:31.00000000=
0 -0800<br>
+++ libguile/filesys.c=C2=A0 2017-10-28 10:05:10.000000000 -0700<br>
@@ -1828,9 +1828,14 @@<br>
<br>
<br>
<br>
+#include &quot;mman.c&quot;<br>
+<br>
=C2=A0void<br>
=C2=A0scm_init_filesys ()<br>
=C2=A0{<br>
+#ifdef HAVE_SYS_MMAN_H<br>
+=C2=A0 init_mman();<br>
+#endif<br>
=C2=A0#ifdef HAVE_POSIX<br>
=C2=A0 =C2=A0scm_tc16_dir =3D scm_make_smob_type (&quot;directory&quot;, 0)=
;<br>
=C2=A0 =C2=A0scm_set_smob_free (scm_tc16_dir, scm_dir_free);<br>
--- libguile/mman.c.orig=C2=A0 =C2=A0 =C2=A0 =C2=A0 2017-10-28 10:05:10.000=
000000 -0700<br>
+++ libguile/mman.c=C2=A0 =C2=A0 =C2=A02017-11-04 09:23:35.000000000 -0700<=
br>
@@ -0,0 +1,199 @@<br>
+// mman.c - v171104a<br>
+#ifdef HAVE_CONFIG_H<br>
+#=C2=A0 include &lt;config.h&gt;<br>
+#endif<br>
+<br>
+#ifdef HAVE_SYS_MMAN_H<br>
+#=C2=A0 include &lt;sys/mman.h&gt;<br>
+#=C2=A0 include &lt;errno.h&gt;<br>
+#endif<br>
+<br>
+#if defined(HAVE_SYS_MMAN_H) &amp;&amp; defined(HAVE_MAP_ANONYMOUS)<br>
+<br>
+#include &quot;libguile/_scm.h&quot;<br>
+#include &quot;libguile/smob.h&quot;<br>
+#include &quot;libguile/fdes-finalizers.h&quot;<br>
+#include &quot;libguile/feature.h&quot;<br>
+<br>
+SCM_API SCM scm_mmap_search (SCM addr, SCM len, SCM prot, SCM flags, SCM f=
d,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 SCM offset);<br>
+SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0SCM offset);<br>
+SCM_API SCM scm_munmap (SCM bvec);<br>
+void init_mman(void);<br>
+static void mmap_finalizer (void *ptr, void *data);<br>
+<br>
+SCM_DEFINE (scm_mmap_search, &quot;mmap/search&quot;, 2, 4, 0,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (SCM addr, SCM len, SCM prot, SC=
M flags, SCM fd, SCM offset),<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;mmap addr len [prot [flags =
[fd [offset]]]]&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;See the unix man page for m=
map.=C2=A0 Returns a bytevector.&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;Note that the region alloca=
ted will be searched by the garbage&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;collector for pointers.=C2=
=A0 \n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot; Defaults:\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 PROT=C2=A0 =C2=A0(lo=
gior PROT_READ PROT_WRITE)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 FLAGS=C2=A0 (logior =
MAP_ANON MAP_PRIVATE)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 FD=C2=A0 =C2=A0 =C2=
=A0-1\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 OFFSET 0\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;@example\n(define reg (mmap=
/search %null-pointer #x1000)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;@end example&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)<br>
+#define FUNC_NAME s_scm_mmap_search<br>
+{<br>
+=C2=A0 void *c_mem, *c_addr;<br>
+=C2=A0 size_t c_len;<br>
+=C2=A0 int c_prot, c_flags, c_fd;<br>
+=C2=A0 scm_t_off c_offset;<br>
+=C2=A0 SCM pointer, bvec;<br>
+<br>
+=C2=A0 if (SCM_POINTER_P (addr))<br>
+=C2=A0 =C2=A0 c_addr =3D SCM_POINTER_VALUE (addr);<br>
+=C2=A0 else if (scm_is_integer (addr))<br>
+=C2=A0 =C2=A0 c_addr =3D (void*) scm_to_uintptr_t (addr);<br>
+=C2=A0 else<br>
+=C2=A0 =C2=A0 SCM_MISC_ERROR(&quot;bad addr&quot;, addr);<br>
+<br>
+=C2=A0 c_len =3D scm_to_size_t (len);<br>
+<br>
+=C2=A0 if (SCM_UNBNDP (prot))<br>
+=C2=A0 =C2=A0 c_prot =3D PROT_READ | PROT_WRITE;<br>
+=C2=A0 else<br>
+=C2=A0 =C2=A0 c_prot =3D scm_to_int (prot);<br>
+<br>
+=C2=A0 if (SCM_UNBNDP (flags))<br>
+=C2=A0 =C2=A0 c_flags =3D MAP_ANON | MAP_PRIVATE;<br>
+=C2=A0 else<br>
+=C2=A0 =C2=A0 c_flags =3D scm_to_int (flags);<br>
+<br>
+=C2=A0 if (SCM_UNBNDP (fd))<br>
+=C2=A0 =C2=A0 c_fd =3D -1;<br>
+=C2=A0 else<br>
+=C2=A0 =C2=A0 c_fd =3D scm_to_int (fd);<br>
+<br>
+=C2=A0 if (SCM_UNBNDP (fd))<br>
+=C2=A0 =C2=A0 c_offset =3D 0;<br>
+=C2=A0 else<br>
+=C2=A0 =C2=A0 c_offset =3D scm_to_off_t (offset);<br>
+<br>
+=C2=A0 c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);<br>
+=C2=A0 if (c_mem =3D=3D MAP_FAILED)<br>
+=C2=A0 =C2=A0 SCM_SYSERROR;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* errno set */<br>
+<br>
+=C2=A0 pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);<br>
+=C2=A0 bvec =3D scm_c_take_typed_bytevector((<wbr>signed char *) c_mem + c=
_offset, c_len,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 SCM_ARRAY_ELEMENT_TYPE=
_VU8, pointer);<br>
+=C2=A0 /* if sizeof(void*) &lt; sizeof(size_t) we are in trouble: */<br>
+=C2=A0 scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) c_len)=
;<br>
+=C2=A0 return bvec;<br>
+}<br>
+#undef FUNC_NAME<br>
+<br>
+SCM_DEFINE (scm_mmap, &quot;mmap&quot;, 2, 4, 0,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (SCM addr, SCM len, SCM prot, SC=
M flags, SCM fd, SCM offset),<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;mmap addr len [prot [flags =
[fd [offset]]]]&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;See the man page.=C2=A0 Ret=
urns a bytevector.&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;Note that the region return=
ed by mmap will NOT be searched &quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;by the garbage collector fo=
r pointers.\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;Defaults:\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 PROT=C2=A0 =C2=A0(lo=
gior PROT_READ PROT_WRITE)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 FLAGS=C2=A0 (logior =
MAP_ANON MAP_PRIVATE)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 FD=C2=A0 =C2=A0 =C2=
=A0-1\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;=C2=A0 OFFSET 0\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;@example\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;(define bvec-1MB (mmap 0 #x=
100000)\n&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;@end example&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)<br>
+#define FUNC_NAME s_scm_mmap<br>
+{<br>
+=C2=A0 SCM bvec;<br>
+=C2=A0 void *c_mem;<br>
+=C2=A0 size_t c_len;<br>
+<br>
+=C2=A0 bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);<br>
+=C2=A0 c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);<br>
+=C2=A0 c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);<br>
+<br>
+=C2=A0 /* tell GC not to scan for pointers */<br>
+=C2=A0 GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);<br>
+<br>
+=C2=A0 return bvec;<br>
+}<br>
+static void<br>
+mmap_finalizer (void *ptr, void *data)<br>
+{<br>
+=C2=A0 void *c_addr;<br>
+=C2=A0 intptr_t c_len;<br>
+=C2=A0 int res;<br>
+<br>
+=C2=A0 c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr));<br>
+=C2=A0 c_len =3D (intptr_t) data;<br>
+=C2=A0 res =3D munmap(c_addr, c_len);<br>
+=C2=A0 if (res !=3D 0) SCM_SYSERROR;<br>
+}<br>
+#undef FUNC_NAME<br>
+<br>
+SCM_DEFINE (scm_munmap, &quot;munmap&quot;, 1, 0, 0,<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (SCM bvec),<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&quot;See the man page. Given byt=
evector unmap.&quot;<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)<br>
+#define FUNC_NAME s_scm_munmap<br>
+{<br>
+=C2=A0 void *c_addr;<br>
+=C2=A0 size_t c_len;<br>
+=C2=A0 int c_res;<br>
+<br>
+=C2=A0 SCM_VALIDATE_BYTEVECTOR (1, bvec);<br>
+<br>
+=C2=A0 c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);<br>
+=C2=A0 c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);<br>
+<br>
+=C2=A0 c_res =3D munmap(c_addr, c_len);<br>
+=C2=A0 if (c_res =3D=3D -1)<br>
+=C2=A0 =C2=A0 SCM_SYSERROR;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* errno set */<br>
+<br>
+=C2=A0 // TODO: clean up bytevector<br>
+=C2=A0 return SCM_UNSPECIFIED;<br>
+}<br>
+#undef FUNC_NAME<br>
+<br>
+void init_mman(void) {<br>
+#ifdef PROT_NONE<br>
+=C2=A0 scm_c_define (&quot;PROT_NONE&quot;, scm_from_int (PROT_NONE));<br>
+#endif<br>
+#ifdef PROT_<br>
+=C2=A0 scm_c_define (&quot;PROT_READ&quot;, scm_from_int (PROT_READ));<br>
+#endif<br>
+#ifdef PROT_<br>
+=C2=A0 scm_c_define (&quot;PROT_WRITE&quot;, scm_from_int (PROT_WRITE));<b=
r>
+#endif<br>
+#ifdef PROT_<br>
+=C2=A0 scm_c_define (&quot;PROT_EXEC&quot;, scm_from_int (PROT_EXEC));<br>
+#endif<br>
+<br>
+#ifdef MAP_ANONYMOUS<br>
+=C2=A0 scm_c_define (&quot;MAP_ANONYMOUS&quot;, scm_from_int (MAP_ANONYMOU=
S));<br>
+#endif<br>
+#ifdef MAP_ANON<br>
+=C2=A0 scm_c_define (&quot;MAP_ANON&quot;, scm_from_int (MAP_ANON));<br>
+#endif<br>
+#ifdef MAP_FILE<br>
+=C2=A0 scm_c_define (&quot;MAP_FILE&quot;, scm_from_int (MAP_FILE));<br>
+#endif<br>
+#ifdef MAP_FIXED<br>
+=C2=A0 scm_c_define (&quot;MAP_FIXED&quot;, scm_from_int (MAP_FIXED));<br>
+#endif<br>
+#ifdef MAP_HASSEMAPHORE<br>
+=C2=A0 scm_c_define (&quot;MAP_HASSEMAPHORE&quot;, scm_from_int (MAP_HASSE=
MAPHORE));<br>
+#endif<br>
+#ifdef MAP_PRIVATE<br>
+=C2=A0 scm_c_define (&quot;MAP_PRIVATE&quot;, scm_from_int (MAP_PRIVATE));=
<br>
+#endif<br>
+#ifdef MAP_SHARED<br>
+=C2=A0 scm_c_define (&quot;MAP_SHARED&quot;, scm_from_int (MAP_SHARED));<b=
r>
+#endif<br>
+#ifdef MAP_NOCACHE<br>
+=C2=A0 scm_c_define (&quot;MAP_NOCACHE&quot;, scm_from_int (MAP_NOCACHE));=
<br>
+#endif<br>
+=C2=A0 scm_c_define (&quot;PAGE_SIZE&quot;, scm_from_int (getpagesize()));=
<br>
+}<br>
+<br>
+#endif /* HAVE_SYS_MMAN_H */<br>
<br>
<br>
<br>
<br>
</blockquote></div></div>

--94eb2c061e16aad101055ebcf4cd--




Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Fri, 24 Nov 2017 17:10:02 +0000
Resent-Message-ID: <handler.27782.B27782.151154338417095 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: Nala Ginrut <nalaginrut@HIDDEN>
Cc: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.151154338417095
          (code B ref 27782); Fri, 24 Nov 2017 17:10:02 +0000
Received: (at 27782) by debbugs.gnu.org; 24 Nov 2017 17:09:44 +0000
Received: from localhost ([127.0.0.1]:56238 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1eIHTz-0004Rf-PL
	for submit <at> debbugs.gnu.org; Fri, 24 Nov 2017 12:09:44 -0500
Received: from mail-pg0-f52.google.com ([74.125.83.52]:43201)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1eIHTx-0004RP-Kf
 for 27782 <at> debbugs.gnu.org; Fri, 24 Nov 2017 12:09:42 -0500
Received: by mail-pg0-f52.google.com with SMTP id r12so15666463pgu.10
 for <27782 <at> debbugs.gnu.org>; Fri, 24 Nov 2017 09:09:41 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:message-id:mime-version:subject:date:in-reply-to:cc:to
 :references; bh=3x9ftzPvouWiFDG9/Sp1S9Dt4Yx4DFpMGHCcvIRfb64=;
 b=b1HLjTEcU0GP229FQ/GtzaegTB6X9Ju7APQKbBDzHDDL5ghCc51WopYQCWmyF16voz
 KOMfcrjgjJ4eIC7CcIl+Wwfy6sC53bphRUOh+rCNQ7UIXiU9mMzKAApHrXOB1vu+mWTp
 quxg/btxhTuNdwc09BJOxMJAfc3EqokgmfnVrP/AEw6LozCND92u5ttuETVLD0CcpTG7
 QE02fnvtRs98MaCLuol9coeQi8h5NpAEDmI/R+pb1bdegsHA5bMJxvqwp5jm24KFj/Us
 I9ItpM7zob9Sidd6QYSksO46oO7GDHSkUxlFtsBrYi753MI5FCowGSKn/1OhmbwpEatU
 0peg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:message-id:mime-version:subject:date
 :in-reply-to:cc:to:references;
 bh=3x9ftzPvouWiFDG9/Sp1S9Dt4Yx4DFpMGHCcvIRfb64=;
 b=iuq3yjBr29MezrRbu8HiK9bXH4UnSxyIluTPtglWqTbx0d7cOeJHP4a5kU+F7YZjKu
 DwKz5FU/iugTNCkjNHZ9/uglzk5b1U0c1a/0MFa4SVruLZQnVi8RGd2IeAb4ukv0l2SP
 ejbiOjhjEjQ1Dskimu2mR2LMeFDCqTnCYY1RktpOVAYq+kWsjN29Zm2kJBQG/z51Fw0N
 WkWD8z+pSdGQ6LPRRGTkumUzzjgbcvj62YIbwq7ctyCz5AznQnyMAFMhgjiq5w2Cbzfe
 QDig3dGNSnpw7Ctz4zYwRhJHsUE8N72U/xLeR/WBjb6URnt0uRdR0igz3XI3WE7POqwQ
 kFTA==
X-Gm-Message-State: AJaThX755fCZpC69fui65Fp19oR5HMMQZj/2NIrcjMHGyxshOKF/bWbx
 fhv55XmYS+rg7QEr+NFNV9U=
X-Google-Smtp-Source: AGs4zMZyU2SN2669cuswEeADZ0DWQcwWtG6oz08ubjByOtXisgKtqx0ojxmo37sTEQKdQQ+1f4ShOQ==
X-Received: by 10.99.114.30 with SMTP id n30mr28526846pgc.129.1511543375703;
 Fri, 24 Nov 2017 09:09:35 -0800 (PST)
Received: from nautilus.championbroadband.com
 (216-165-229-229.championbroadband.com. [216.165.229.229])
 by smtp.gmail.com with ESMTPSA id m87sm27843812pfi.88.2017.11.24.09.09.34
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Fri, 24 Nov 2017 09:09:34 -0800 (PST)
From: Matt Wette <matt.wette@HIDDEN>
Message-Id: <D32D387D-D1B1-433D-B791-ACDB6859E38D@HIDDEN>
Content-Type: multipart/alternative;
 boundary="Apple-Mail=_705C18C9-0341-466A-9392-6E7A4A94B270"
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Date: Fri, 24 Nov 2017 09:09:33 -0800
In-Reply-To: <CAPjoZoeWyRx5_eTogzhuUbARZyPtp4OsbCjtGnkp_TGvYfkfag@HIDDEN>
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
 <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
 <CAPjoZoeWyRx5_eTogzhuUbARZyPtp4OsbCjtGnkp_TGvYfkfag@HIDDEN>
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: -0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)


--Apple-Mail=_705C18C9-0341-466A-9392-6E7A4A94B270
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

got it.

> On Nov 24, 2017, at 8:22 AM, Nala Ginrut <nalaginrut@HIDDEN> wrote:
>=20
> Thanks for the work! Could you please add MAP_POPULATE too?
>=20
> 2017=E5=B9=B411=E6=9C=8824=E6=97=A5 =E4=B8=8B=E5=8D=8811:55=EF=BC=8C"Mat=
t Wette" <matt.wette@HIDDEN <mailto:matt.wette@HIDDEN>>=E5=86=99=E9=81=
=93=EF=BC=9A
>=20
>=20
>=20
>=20
>=20
> I did a little more on this.  Here is the latest.
> It provides mmap (not searched) and mmap/search (searched for pointers =
to GC).
>=20
>=20
> --- libguile/filesys.c.orig     2017-03-01 10:54:31.000000000 -0800
> +++ libguile/filesys.c  2017-10-28 10:05:10.000000000 -0700
> @@ -1828,9 +1828,14 @@
>=20
>=20
>=20
> +#include "mman.c"
> +
>  void
>  scm_init_filesys ()
>  {
> +#ifdef HAVE_SYS_MMAN_H
> +  init_mman();
> +#endif
>  #ifdef HAVE_POSIX
>    scm_tc16_dir =3D scm_make_smob_type ("directory", 0);
>    scm_set_smob_free (scm_tc16_dir, scm_dir_free);
> --- libguile/mman.c.orig        2017-10-28 10:05:10.000000000 -0700
> +++ libguile/mman.c     2017-11-04 09:23:35.000000000 -0700
> @@ -0,0 +1,199 @@
> +// mman.c - v171104a
> +#ifdef HAVE_CONFIG_H
> +#  include <config.h>
> +#endif
> +
> +#ifdef HAVE_SYS_MMAN_H
> +#  include <sys/mman.h>
> +#  include <errno.h>
> +#endif
> +
> +#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)
> +
> +#include "libguile/_scm.h"
> +#include "libguile/smob.h"
> +#include "libguile/fdes-finalizers.h"
> +#include "libguile/feature.h"
> +
> +SCM_API SCM scm_mmap_search (SCM addr, SCM len, SCM prot, SCM flags, =
SCM fd,
> +                            SCM offset);
> +SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM fd,
> +                     SCM offset);
> +SCM_API SCM scm_munmap (SCM bvec);
> +void init_mman(void);
> +static void mmap_finalizer (void *ptr, void *data);
> +
> +SCM_DEFINE (scm_mmap_search, "mmap/search", 2, 4, 0,
> +            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
> +           "mmap addr len [prot [flags [fd [offset]]]]"
> +           "See the unix man page for mmap.  Returns a bytevector."
> +           "Note that the region allocated will be searched by the =
garbage"
> +           "collector for pointers.  \n"
> +           " Defaults:\n"
> +           "  PROT   (logior PROT_READ PROT_WRITE)\n"
> +           "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
> +           "  FD     -1\n"
> +           "  OFFSET 0\n"
> +           "@example\n(define reg (mmap/search %null-pointer =
#x1000)\n"
> +           "@end example"
> +           )
> +#define FUNC_NAME s_scm_mmap_search
> +{
> +  void *c_mem, *c_addr;
> +  size_t c_len;
> +  int c_prot, c_flags, c_fd;
> +  scm_t_off c_offset;
> +  SCM pointer, bvec;
> +
> +  if (SCM_POINTER_P (addr))
> +    c_addr =3D SCM_POINTER_VALUE (addr);
> +  else if (scm_is_integer (addr))
> +    c_addr =3D (void*) scm_to_uintptr_t (addr);
> +  else
> +    SCM_MISC_ERROR("bad addr", addr);
> +
> +  c_len =3D scm_to_size_t (len);
> +
> +  if (SCM_UNBNDP (prot))
> +    c_prot =3D PROT_READ | PROT_WRITE;
> +  else
> +    c_prot =3D scm_to_int (prot);
> +
> +  if (SCM_UNBNDP (flags))
> +    c_flags =3D MAP_ANON | MAP_PRIVATE;
> +  else
> +    c_flags =3D scm_to_int (flags);
> +
> +  if (SCM_UNBNDP (fd))
> +    c_fd =3D -1;
> +  else
> +    c_fd =3D scm_to_int (fd);
> +
> +  if (SCM_UNBNDP (fd))
> +    c_offset =3D 0;
> +  else
> +    c_offset =3D scm_to_off_t (offset);
> +
> +  c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, c_offset);
> +  if (c_mem =3D=3D MAP_FAILED)
> +    SCM_SYSERROR;                      /* errno set */
> +
> +  pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);
> +  bvec =3D scm_c_take_typed_bytevector((signed char *) c_mem + =
c_offset, c_len,
> +                                    SCM_ARRAY_ELEMENT_TYPE_VU8, =
pointer);
> +  /* if sizeof(void*) < sizeof(size_t) we are in trouble: */
> +  scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) =
c_len);
> +  return bvec;
> +}
> +#undef FUNC_NAME
> +
> +SCM_DEFINE (scm_mmap, "mmap", 2, 4, 0,
> +            (SCM addr, SCM len, SCM prot, SCM flags, SCM fd, SCM =
offset),
> +           "mmap addr len [prot [flags [fd [offset]]]]"
> +           "See the man page.  Returns a bytevector."
> +           "Note that the region returned by mmap will NOT be =
searched "
> +           "by the garbage collector for pointers.\n"
> +           "Defaults:\n"
> +           "  PROT   (logior PROT_READ PROT_WRITE)\n"
> +           "  FLAGS  (logior MAP_ANON MAP_PRIVATE)\n"
> +           "  FD     -1\n"
> +           "  OFFSET 0\n"
> +           "@example\n"
> +           "(define bvec-1MB (mmap 0 #x100000)\n"
> +           "@end example"
> +           )
> +#define FUNC_NAME s_scm_mmap
> +{
> +  SCM bvec;
> +  void *c_mem;
> +  size_t c_len;
> +
> +  bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);
> +  c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);
> +  c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);
> +
> +  /* tell GC not to scan for pointers */
> +  GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);
> +
> +  return bvec;
> +}
> +static void
> +mmap_finalizer (void *ptr, void *data)
> +{
> +  void *c_addr;
> +  intptr_t c_len;
> +  int res;
> +
> +  c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER (ptr));
> +  c_len =3D (intptr_t) data;
> +  res =3D munmap(c_addr, c_len);
> +  if (res !=3D 0) SCM_SYSERROR;
> +}
> +#undef FUNC_NAME
> +
> +SCM_DEFINE (scm_munmap, "munmap", 1, 0, 0,
> +            (SCM bvec),
> +           "See the man page. Given bytevector unmap."
> +           )
> +#define FUNC_NAME s_scm_munmap
> +{
> +  void *c_addr;
> +  size_t c_len;
> +  int c_res;
> +
> +  SCM_VALIDATE_BYTEVECTOR (1, bvec);
> +
> +  c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);
> +  c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);
> +
> +  c_res =3D munmap(c_addr, c_len);
> +  if (c_res =3D=3D -1)
> +    SCM_SYSERROR;                      /* errno set */
> +
> +  // TODO: clean up bytevector
> +  return SCM_UNSPECIFIED;
> +}
> +#undef FUNC_NAME
> +
> +void init_mman(void) {
> +#ifdef PROT_NONE
> +  scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_READ", scm_from_int (PROT_READ));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));
> +#endif
> +#ifdef PROT_
> +  scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));
> +#endif
> +
> +#ifdef MAP_ANONYMOUS
> +  scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));
> +#endif
> +#ifdef MAP_ANON
> +  scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));
> +#endif
> +#ifdef MAP_FILE
> +  scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));
> +#endif
> +#ifdef MAP_FIXED
> +  scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));
> +#endif
> +#ifdef MAP_HASSEMAPHORE
> +  scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSEMAPHORE));
> +#endif
> +#ifdef MAP_PRIVATE
> +  scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));
> +#endif
> +#ifdef MAP_SHARED
> +  scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));
> +#endif
> +#ifdef MAP_NOCACHE
> +  scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));
> +#endif
> +  scm_c_define ("PAGE_SIZE", scm_from_int (getpagesize()));
> +}
> +
> +#endif /* HAVE_SYS_MMAN_H */
>=20
>=20
>=20
>=20


--Apple-Mail=_705C18C9-0341-466A-9392-6E7A4A94B270
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" =
class=3D"">got it.<div class=3D""><br class=3D""><div><blockquote =
type=3D"cite" class=3D""><div class=3D"">On Nov 24, 2017, at 8:22 AM, =
Nala Ginrut &lt;<a href=3D"mailto:nalaginrut@HIDDEN" =
class=3D"">nalaginrut@HIDDEN</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div dir=3D"auto" =
class=3D"">Thanks for the work! Could you please add&nbsp;<span =
style=3D"color:rgb(85,85,85);font-family:verdana,&quot;bitstream vera =
sans&quot;,tahoma,helvetica,sans-serif;font-size:21.5951px;background-colo=
r:rgb(255,255,255)" class=3D"">MAP_POPULATE too?</span></div><div =
class=3D"gmail_extra"><br class=3D""><div =
class=3D"gmail_quote">2017=E5=B9=B411=E6=9C=8824=E6=97=A5 =
=E4=B8=8B=E5=8D=8811:55=EF=BC=8C"Matt Wette" &lt;<a =
href=3D"mailto:matt.wette@HIDDEN" =
class=3D"">matt.wette@HIDDEN</a>&gt;=E5=86=99=E9=81=93=EF=BC=9A<br =
type=3D"attribution" class=3D""><blockquote class=3D"gmail_quote" =
style=3D"margin:0 0 0 .8ex;border-left:1px #ccc =
solid;padding-left:1ex"><br class=3D"">
<br class=3D"">
<br class=3D"">
<br class=3D"">
<br class=3D"">
I did a little more on this.&nbsp; Here is the latest.<br class=3D"">
It provides mmap (not searched) and mmap/search (searched for pointers =
to GC).<br class=3D"">
<br class=3D"">
<br class=3D"">
--- libguile/filesys.c.orig&nbsp; &nbsp; &nbsp;2017-03-01 =
10:54:31.000000000 -0800<br class=3D"">
+++ libguile/filesys.c&nbsp; 2017-10-28 10:05:10.000000000 -0700<br =
class=3D"">
@@ -1828,9 +1828,14 @@<br class=3D"">
<br class=3D"">
<br class=3D"">
<br class=3D"">
+#include "mman.c"<br class=3D"">
+<br class=3D"">
&nbsp;void<br class=3D"">
&nbsp;scm_init_filesys ()<br class=3D"">
&nbsp;{<br class=3D"">
+#ifdef HAVE_SYS_MMAN_H<br class=3D"">
+&nbsp; init_mman();<br class=3D"">
+#endif<br class=3D"">
&nbsp;#ifdef HAVE_POSIX<br class=3D"">
&nbsp; &nbsp;scm_tc16_dir =3D scm_make_smob_type ("directory", 0);<br =
class=3D"">
&nbsp; &nbsp;scm_set_smob_free (scm_tc16_dir, scm_dir_free);<br =
class=3D"">
--- libguile/mman.c.orig&nbsp; &nbsp; &nbsp; &nbsp; 2017-10-28 =
10:05:10.000000000 -0700<br class=3D"">
+++ libguile/mman.c&nbsp; &nbsp; &nbsp;2017-11-04 09:23:35.000000000 =
-0700<br class=3D"">
@@ -0,0 +1,199 @@<br class=3D"">
+// mman.c - v171104a<br class=3D"">
+#ifdef HAVE_CONFIG_H<br class=3D"">
+#&nbsp; include &lt;config.h&gt;<br class=3D"">
+#endif<br class=3D"">
+<br class=3D"">
+#ifdef HAVE_SYS_MMAN_H<br class=3D"">
+#&nbsp; include &lt;sys/mman.h&gt;<br class=3D"">
+#&nbsp; include &lt;errno.h&gt;<br class=3D"">
+#endif<br class=3D"">
+<br class=3D"">
+#if defined(HAVE_SYS_MMAN_H) &amp;&amp; defined(HAVE_MAP_ANONYMOUS)<br =
class=3D"">
+<br class=3D"">
+#include "libguile/_scm.h"<br class=3D"">
+#include "libguile/smob.h"<br class=3D"">
+#include "libguile/fdes-finalizers.h"<br class=3D"">
+#include "libguile/feature.h"<br class=3D"">
+<br class=3D"">
+SCM_API SCM scm_mmap_search (SCM addr, SCM len, SCM prot, SCM flags, =
SCM fd,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; SCM offset);<br class=3D"">
+SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM =
fd,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;SCM offset);<br class=3D"">
+SCM_API SCM scm_munmap (SCM bvec);<br class=3D"">
+void init_mman(void);<br class=3D"">
+static void mmap_finalizer (void *ptr, void *data);<br class=3D"">
+<br class=3D"">
+SCM_DEFINE (scm_mmap_search, "mmap/search", 2, 4, 0,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (SCM addr, SCM len, SCM prot, =
SCM flags, SCM fd, SCM offset),<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"mmap addr len [prot [flags =
[fd [offset]]]]"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"See the unix man page for =
mmap.&nbsp; Returns a bytevector."<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"Note that the region =
allocated will be searched by the garbage"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"collector for pointers.&nbsp; =
\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" Defaults:\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; PROT&nbsp; =
&nbsp;(logior PROT_READ PROT_WRITE)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; FLAGS&nbsp; (logior =
MAP_ANON MAP_PRIVATE)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; FD&nbsp; &nbsp; =
&nbsp;-1\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; OFFSET 0\n"<br =
class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"@example\n(define reg =
(mmap/search %null-pointer #x1000)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"@end example"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)<br class=3D"">
+#define FUNC_NAME s_scm_mmap_search<br class=3D"">
+{<br class=3D"">
+&nbsp; void *c_mem, *c_addr;<br class=3D"">
+&nbsp; size_t c_len;<br class=3D"">
+&nbsp; int c_prot, c_flags, c_fd;<br class=3D"">
+&nbsp; scm_t_off c_offset;<br class=3D"">
+&nbsp; SCM pointer, bvec;<br class=3D"">
+<br class=3D"">
+&nbsp; if (SCM_POINTER_P (addr))<br class=3D"">
+&nbsp; &nbsp; c_addr =3D SCM_POINTER_VALUE (addr);<br class=3D"">
+&nbsp; else if (scm_is_integer (addr))<br class=3D"">
+&nbsp; &nbsp; c_addr =3D (void*) scm_to_uintptr_t (addr);<br class=3D"">
+&nbsp; else<br class=3D"">
+&nbsp; &nbsp; SCM_MISC_ERROR("bad addr", addr);<br class=3D"">
+<br class=3D"">
+&nbsp; c_len =3D scm_to_size_t (len);<br class=3D"">
+<br class=3D"">
+&nbsp; if (SCM_UNBNDP (prot))<br class=3D"">
+&nbsp; &nbsp; c_prot =3D PROT_READ | PROT_WRITE;<br class=3D"">
+&nbsp; else<br class=3D"">
+&nbsp; &nbsp; c_prot =3D scm_to_int (prot);<br class=3D"">
+<br class=3D"">
+&nbsp; if (SCM_UNBNDP (flags))<br class=3D"">
+&nbsp; &nbsp; c_flags =3D MAP_ANON | MAP_PRIVATE;<br class=3D"">
+&nbsp; else<br class=3D"">
+&nbsp; &nbsp; c_flags =3D scm_to_int (flags);<br class=3D"">
+<br class=3D"">
+&nbsp; if (SCM_UNBNDP (fd))<br class=3D"">
+&nbsp; &nbsp; c_fd =3D -1;<br class=3D"">
+&nbsp; else<br class=3D"">
+&nbsp; &nbsp; c_fd =3D scm_to_int (fd);<br class=3D"">
+<br class=3D"">
+&nbsp; if (SCM_UNBNDP (fd))<br class=3D"">
+&nbsp; &nbsp; c_offset =3D 0;<br class=3D"">
+&nbsp; else<br class=3D"">
+&nbsp; &nbsp; c_offset =3D scm_to_off_t (offset);<br class=3D"">
+<br class=3D"">
+&nbsp; c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, =
c_offset);<br class=3D"">
+&nbsp; if (c_mem =3D=3D MAP_FAILED)<br class=3D"">
+&nbsp; &nbsp; SCM_SYSERROR;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* errno set */<br class=3D"">
+<br class=3D"">
+&nbsp; pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);<br =
class=3D"">
+&nbsp; bvec =3D scm_c_take_typed_bytevector((<wbr class=3D"">signed =
char *) c_mem + c_offset, c_len,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
SCM_ARRAY_ELEMENT_TYPE_VU8, pointer);<br class=3D"">
+&nbsp; /* if sizeof(void*) &lt; sizeof(size_t) we are in trouble: */<br =
class=3D"">
+&nbsp; scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) =
c_len);<br class=3D"">
+&nbsp; return bvec;<br class=3D"">
+}<br class=3D"">
+#undef FUNC_NAME<br class=3D"">
+<br class=3D"">
+SCM_DEFINE (scm_mmap, "mmap", 2, 4, 0,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (SCM addr, SCM len, SCM prot, =
SCM flags, SCM fd, SCM offset),<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"mmap addr len [prot [flags =
[fd [offset]]]]"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"See the man page.&nbsp; =
Returns a bytevector."<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"Note that the region returned =
by mmap will NOT be searched "<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"by the garbage collector for =
pointers.\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"Defaults:\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; PROT&nbsp; =
&nbsp;(logior PROT_READ PROT_WRITE)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; FLAGS&nbsp; (logior =
MAP_ANON MAP_PRIVATE)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; FD&nbsp; &nbsp; =
&nbsp;-1\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"&nbsp; OFFSET 0\n"<br =
class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"@example\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"(define bvec-1MB (mmap 0 =
#x100000)\n"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"@end example"<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)<br class=3D"">
+#define FUNC_NAME s_scm_mmap<br class=3D"">
+{<br class=3D"">
+&nbsp; SCM bvec;<br class=3D"">
+&nbsp; void *c_mem;<br class=3D"">
+&nbsp; size_t c_len;<br class=3D"">
+<br class=3D"">
+&nbsp; bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);<br =
class=3D"">
+&nbsp; c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);<br class=3D"">
+&nbsp; c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);<br class=3D"">
+<br class=3D"">
+&nbsp; /* tell GC not to scan for pointers */<br class=3D"">
+&nbsp; GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);<br =
class=3D"">
+<br class=3D"">
+&nbsp; return bvec;<br class=3D"">
+}<br class=3D"">
+static void<br class=3D"">
+mmap_finalizer (void *ptr, void *data)<br class=3D"">
+{<br class=3D"">
+&nbsp; void *c_addr;<br class=3D"">
+&nbsp; intptr_t c_len;<br class=3D"">
+&nbsp; int res;<br class=3D"">
+<br class=3D"">
+&nbsp; c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER =
(ptr));<br class=3D"">
+&nbsp; c_len =3D (intptr_t) data;<br class=3D"">
+&nbsp; res =3D munmap(c_addr, c_len);<br class=3D"">
+&nbsp; if (res !=3D 0) SCM_SYSERROR;<br class=3D"">
+}<br class=3D"">
+#undef FUNC_NAME<br class=3D"">
+<br class=3D"">
+SCM_DEFINE (scm_munmap, "munmap", 1, 0, 0,<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (SCM bvec),<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"See the man page. Given =
bytevector unmap."<br class=3D"">
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)<br class=3D"">
+#define FUNC_NAME s_scm_munmap<br class=3D"">
+{<br class=3D"">
+&nbsp; void *c_addr;<br class=3D"">
+&nbsp; size_t c_len;<br class=3D"">
+&nbsp; int c_res;<br class=3D"">
+<br class=3D"">
+&nbsp; SCM_VALIDATE_BYTEVECTOR (1, bvec);<br class=3D"">
+<br class=3D"">
+&nbsp; c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);<br class=3D"">=

+&nbsp; c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);<br class=3D"">
+<br class=3D"">
+&nbsp; c_res =3D munmap(c_addr, c_len);<br class=3D"">
+&nbsp; if (c_res =3D=3D -1)<br class=3D"">
+&nbsp; &nbsp; SCM_SYSERROR;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /* errno set */<br class=3D"">
+<br class=3D"">
+&nbsp; // TODO: clean up bytevector<br class=3D"">
+&nbsp; return SCM_UNSPECIFIED;<br class=3D"">
+}<br class=3D"">
+#undef FUNC_NAME<br class=3D"">
+<br class=3D"">
+void init_mman(void) {<br class=3D"">
+#ifdef PROT_NONE<br class=3D"">
+&nbsp; scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef PROT_<br class=3D"">
+&nbsp; scm_c_define ("PROT_READ", scm_from_int (PROT_READ));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef PROT_<br class=3D"">
+&nbsp; scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef PROT_<br class=3D"">
+&nbsp; scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));<br =
class=3D"">
+#endif<br class=3D"">
+<br class=3D"">
+#ifdef MAP_ANONYMOUS<br class=3D"">
+&nbsp; scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef MAP_ANON<br class=3D"">
+&nbsp; scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));<br class=3D"">=

+#endif<br class=3D"">
+#ifdef MAP_FILE<br class=3D"">
+&nbsp; scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));<br class=3D"">=

+#endif<br class=3D"">
+#ifdef MAP_FIXED<br class=3D"">
+&nbsp; scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef MAP_HASSEMAPHORE<br class=3D"">
+&nbsp; scm_c_define ("MAP_HASSEMAPHORE", scm_from_int =
(MAP_HASSEMAPHORE));<br class=3D"">
+#endif<br class=3D"">
+#ifdef MAP_PRIVATE<br class=3D"">
+&nbsp; scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef MAP_SHARED<br class=3D"">
+&nbsp; scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));<br =
class=3D"">
+#endif<br class=3D"">
+#ifdef MAP_NOCACHE<br class=3D"">
+&nbsp; scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));<br =
class=3D"">
+#endif<br class=3D"">
+&nbsp; scm_c_define ("PAGE_SIZE", scm_from_int (getpagesize()));<br =
class=3D"">
+}<br class=3D"">
+<br class=3D"">
+#endif /* HAVE_SYS_MMAN_H */<br class=3D"">
<br class=3D"">
<br class=3D"">
<br class=3D"">
<br class=3D"">
</blockquote></div></div>
</div></blockquote></div><br class=3D""></div></body></html>=

--Apple-Mail=_705C18C9-0341-466A-9392-6E7A4A94B270--




Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile
Resent-From: Matt Wette <matt.wette@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Sat, 25 Nov 2017 14:42:01 +0000
Resent-Message-ID: <handler.27782.B27782.15116208876186 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.15116208876186
          (code B ref 27782); Sat, 25 Nov 2017 14:42:01 +0000
Received: (at 27782) by debbugs.gnu.org; 25 Nov 2017 14:41:27 +0000
Received: from localhost ([127.0.0.1]:56854 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1eIbe3-0001bi-G1
	for submit <at> debbugs.gnu.org; Sat, 25 Nov 2017 09:41:27 -0500
Received: from mail-pg0-f51.google.com ([74.125.83.51]:37341)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <matt.wette@HIDDEN>) id 1eIbe2-0001bT-6W
 for 27782 <at> debbugs.gnu.org; Sat, 25 Nov 2017 09:41:26 -0500
Received: by mail-pg0-f51.google.com with SMTP id m4so6889811pgc.4
 for <27782 <at> debbugs.gnu.org>; Sat, 25 Nov 2017 06:41:26 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:content-transfer-encoding:mime-version:subject:date:references
 :to:in-reply-to:message-id;
 bh=50IpS0zXCaueIIG4d8jUtXLPD8HLM/XxmrpezXDvf3I=;
 b=vXjHblRmgKhxteY36yVYogM6nEY11tHVoBZhoK2sUVQOsUbA3NZyBrqPUwAA3OIZkB
 dWIA3IE4MyrVwk5UHTr5Fqt4F2mgAOHrVYHprnUCpND05YwHDIGUS2PvO4joQYDBW4Ch
 aj5oGrz0pNIn8hz/0XRnAywvZZWiyoL76RH8wa+SJegU8z2s//pfJKKwNnPyaE3YmCSO
 uSbAVEVNTDQ35BZcoiOCxN1/nzz9TMpIxOvlspAL302Jlxq4cPkF326iI0HutSbqTbe4
 XAG3pKnQfNK9TMeWamypF1ABqyfkT1df1Rh8/bjbd4eT8X5xh5/LsiXBntiMuNrpk074
 Y99Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:content-transfer-encoding:mime-version
 :subject:date:references:to:in-reply-to:message-id;
 bh=50IpS0zXCaueIIG4d8jUtXLPD8HLM/XxmrpezXDvf3I=;
 b=ragMjboZ45+kkzmddLS8fwCKylRw3LEcw30MRHSvlbeVp2uEBBjJV18V6JXgJ/eitM
 GFfNpr5+dWNtgTMsn0aTBue/bH+s0jST4XcKhnKnuRiZk6OsF9L7cQpOUTo45ffmbQ+0
 Qn+6BIYVFCuC/gbZD8jcy2i4Z0HzuRR4Yp2wNuBIF4Hiq6ZpIduLhNTMNYQHtUkGUQzk
 twJG4osJxv+umGTvJmjQz2iyUJRqHv4vi+ha+Gasm5WBgKp3IoUXtsQ6507E4VPOPVPZ
 Haw3T50VYRhoMzADT9POOrDP350Nr2JWGP7tTKPZpsJX5UpVuophuTncOtRPZ/R5uNDF
 T8YQ==
X-Gm-Message-State: AJaThX7YftxeAKzOusHj1i2h6VXdFSAA9TReUmuz6z7jvuhSrH4m8Q59
 HABt1q0xNn30uWhMLMgk7STfatvv
X-Google-Smtp-Source: AGs4zMYqPYHc3a4BVVI0Au+OUgMmgsxJGvhSYhsYAg3fH5btMmw+mQvlXWiNLPkyUtB0XftkzXPRZQ==
X-Received: by 10.98.144.141 with SMTP id q13mr12544526pfk.140.1511620879896; 
 Sat, 25 Nov 2017 06:41:19 -0800 (PST)
Received: from nautilus.championbroadband.com
 (216-165-229-229.championbroadband.com. [216.165.229.229])
 by smtp.gmail.com with ESMTPSA id z86sm46398318pff.4.2017.11.25.06.41.19
 for <27782 <at> debbugs.gnu.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Sat, 25 Nov 2017 06:41:19 -0800 (PST)
From: Matt Wette <matt.wette@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Mime-Version: 1.0 (Mac OS X Mail 10.3 \(3273\))
Date: Sat, 25 Nov 2017 06:41:17 -0800
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
 <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
 <CAPjoZoeWyRx5_eTogzhuUbARZyPtp4OsbCjtGnkp_TGvYfkfag@HIDDEN>
 <D32D387D-D1B1-433D-B791-ACDB6859E38D@HIDDEN>
In-Reply-To: <D32D387D-D1B1-433D-B791-ACDB6859E38D@HIDDEN>
Message-Id: <3F4AACD7-3278-4C4B-90D4-56BCDE5043F6@HIDDEN>
X-Mailer: Apple Mail (2.3273)
X-Spam-Score: -0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

here is a start on test-suite/tests/mmap.test

+;;;; mmap.test --- test suite for Guile's mmap functions  -*- scheme -*-
+;;;;
+
+(define-module (test-mmap)
+  #:use-module (test-suite lib))
+
+(use-modules (rnrs bytevectors))
+
+(with-test-prefix "mmap"
+
+  (pass-if "basics"
+    (let* ((siz #x10000)
+          (reg (mmap 0 siz)))
+      (and (eqv? (bytevector-length reg) siz)
+          (begin (bytevector-u8-set! reg 0 99)
+                 (eqv? (bytevector-u8-ref reg 0) 99))
+          (begin (bytevector-u8-set! reg (1- siz) 98)
+                 (eqv? (bytevector-u8-ref reg (1- siz)) 98))
+          #t)))
+    
+  )
+
+;;;; --- last line ---





Message sent to bug-guile@HIDDEN:


X-Loop: help-debbugs@HIDDEN
Subject: bug#27782: mmap for guile
Resent-From: Nala Ginrut <nalaginrut@HIDDEN>
Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
Resent-CC: bug-guile@HIDDEN
Resent-Date: Sat, 25 Nov 2017 16:18:02 +0000
Resent-Message-ID: <handler.27782.B27782.151162664016269 <at> debbugs.gnu.org>
Resent-Sender: help-debbugs@HIDDEN
X-GNU-PR-Message: followup 27782
X-GNU-PR-Package: guile
X-GNU-PR-Keywords: 
To: Matt Wette <matt.wette@HIDDEN>
Cc: 27782 <at> debbugs.gnu.org
Received: via spool by 27782-submit <at> debbugs.gnu.org id=B27782.151162664016269
          (code B ref 27782); Sat, 25 Nov 2017 16:18:02 +0000
Received: (at 27782) by debbugs.gnu.org; 25 Nov 2017 16:17:20 +0000
Received: from localhost ([127.0.0.1]:58071 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1eId8p-0004EL-Nw
	for submit <at> debbugs.gnu.org; Sat, 25 Nov 2017 11:17:19 -0500
Received: from mail-yb0-f182.google.com ([209.85.213.182]:46256)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <nalaginrut@HIDDEN>) id 1eId8o-0004E5-Ji
 for 27782 <at> debbugs.gnu.org; Sat, 25 Nov 2017 11:17:18 -0500
Received: by mail-yb0-f182.google.com with SMTP id 188so9172351ybd.13
 for <27782 <at> debbugs.gnu.org>; Sat, 25 Nov 2017 08:17:18 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:in-reply-to:references:from:date:message-id:subject:to
 :cc; bh=NHOzK0j8hlT/jzVuIsjgBOgyUClJ+UXobU6BRM9CIGY=;
 b=NMlyw4Q5FTKVrOuLvKom/o7sMw5PVGxIPmiVDhFCaVt8CP2RdE/gtXe75V6oiVikrN
 VDcbuCt1LhPVn20dINxsdYlSXXEHUj7jSJXuUjqYJB6AJl2s+BO3Xm1l2JRLfRYYKJR0
 uO2bjrg5lUduO4y3bdrGIY/2io3hn4Lsn1xGPevCXhARyeohW/724fpWf+WnWaJeUyuV
 breft0WI34fk5+YKU/sN4VER+KmeJjT87j2+dgQipCua0bqWdDuSYOQ4cHKVJC1hgMwP
 Xz4iAgHblPPQBthB0xTupxR+IIPV01ZrDZ/pw6+PifrZKmgTYNJcyEbBHwtu0a6SyU8B
 n63A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:in-reply-to:references:from:date
 :message-id:subject:to:cc;
 bh=NHOzK0j8hlT/jzVuIsjgBOgyUClJ+UXobU6BRM9CIGY=;
 b=qMZmd/elSLhS7GDTD+QbcUr9FoV32/HR+4LGxB44cAkIJu72iVQP/U1k8LHc0acR5t
 QKI1GNaM3/TA/2T10Ta8cXbEEW5/mLKyxPBBVtAgvL/8drSD8W4nkiCktQI8gQsMKaLA
 9hDSnz6nbA3ETBLNumjhat4TKB+L5z8q2Ztgy6PgMugxgVAM7ThItLcUnDH3/BNOGuH6
 uw/l6rsEGVelgy99hpWd2NDiFCOkD6yU03GHRfg9EQ8kS3T6p9CaSn3W32205QtJAdYl
 TXkrD/4wKQ7b9+JnEW+sx0sn9br7VPP8/EaYEtu9bXDSy+2AvzWc2MXm6DALbJv6qvDN
 upiA==
X-Gm-Message-State: AJaThX4yYU+3MhpLmrxuU9RNfG2Av/7oVxyLBI/fCFZai9QCwKKcshYN
 wrSs2SJEZrqzETGY1bFQ+AA3wOZbVQkWJ6yfvls=
X-Google-Smtp-Source: AGs4zMZdNb8zl195qSmR+BsiNw7aUN5ySNpSbUPJPZ5P9MBigoRvZ/X/K/NPp6DXNCvsmqOGnzkSAEQV9mKAMC1jpcE=
X-Received: by 10.37.193.7 with SMTP id r7mr19741467ybf.205.1511626632441;
 Sat, 25 Nov 2017 08:17:12 -0800 (PST)
MIME-Version: 1.0
Received: by 10.37.45.94 with HTTP; Sat, 25 Nov 2017 08:17:11 -0800 (PST)
Received: by 10.37.45.94 with HTTP; Sat, 25 Nov 2017 08:17:11 -0800 (PST)
In-Reply-To: <3F4AACD7-3278-4C4B-90D4-56BCDE5043F6@HIDDEN>
References: <CD68D357-0F0F-471C-BEC1-EB601844A04E@HIDDEN>
 <D6FB4C4A-D4AB-421F-ADD5-CA8ECDA8F37E@HIDDEN>
 <CAPjoZoeWyRx5_eTogzhuUbARZyPtp4OsbCjtGnkp_TGvYfkfag@HIDDEN>
 <D32D387D-D1B1-433D-B791-ACDB6859E38D@HIDDEN>
 <3F4AACD7-3278-4C4B-90D4-56BCDE5043F6@HIDDEN>
From: Nala Ginrut <nalaginrut@HIDDEN>
Date: Sun, 26 Nov 2017 00:17:11 +0800
Message-ID: <CAPjoZoeQ-zdwkogw=b9=rZrjOxcWZqBeNuGpgSRmQZmD6_QM-w@HIDDEN>
Content-Type: multipart/alternative; boundary="94eb2c05528275b515055ed100e2"
X-Spam-Score: -0.0 (/)
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--94eb2c05528275b515055ed100e2
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Actually I've been using a FFI version of mmap in my working code, with my
previous patch to Guile it's very easy to handle errno. Just few lines code
is enough to bind mmap.
I am not sure if C version binding is still the best option to maintain.

2017=E5=B9=B411=E6=9C=8825=E6=97=A5 22:42=EF=BC=8C"Matt Wette" <matt.wette@=
gmail.com>=E5=86=99=E9=81=93=EF=BC=9A

> here is a start on test-suite/tests/mmap.test
>
> +;;;; mmap.test --- test suite for Guile's mmap functions  -*- scheme -*-
> +;;;;
> +
> +(define-module (test-mmap)
> +  #:use-module (test-suite lib))
> +
> +(use-modules (rnrs bytevectors))
> +
> +(with-test-prefix "mmap"
> +
> +  (pass-if "basics"
> +    (let* ((siz #x10000)
> +          (reg (mmap 0 siz)))
> +      (and (eqv? (bytevector-length reg) siz)
> +          (begin (bytevector-u8-set! reg 0 99)
> +                 (eqv? (bytevector-u8-ref reg 0) 99))
> +          (begin (bytevector-u8-set! reg (1- siz) 98)
> +                 (eqv? (bytevector-u8-ref reg (1- siz)) 98))
> +          #t)))
> +
> +  )
> +
> +;;;; --- last line ---
>
>
>
>
>

--94eb2c05528275b515055ed100e2
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Actually I&#39;ve been using a FFI version of mmap in my =
working code, with my previous patch to Guile it&#39;s very easy to handle =
errno. Just few lines code is enough to bind mmap.<div dir=3D"auto">I am no=
t sure if C version binding is still the best option to maintain.</div></di=
v><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2017=E5=B9=B411=
=E6=9C=8825=E6=97=A5 22:42=EF=BC=8C&quot;Matt Wette&quot; &lt;<a href=3D"ma=
ilto:matt.wette@HIDDEN">matt.wette@HIDDEN</a>&gt;=E5=86=99=E9=81=93=
=EF=BC=9A<br type=3D"attribution"><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">here is =
a start on test-suite/tests/mmap.test<br>
<br>
+;;;; mmap.test --- test suite for Guile&#39;s mmap functions=C2=A0 -*- sch=
eme -*-<br>
+;;;;<br>
+<br>
+(define-module (test-mmap)<br>
+=C2=A0 #:use-module (test-suite lib))<br>
+<br>
+(use-modules (rnrs bytevectors))<br>
+<br>
+(with-test-prefix &quot;mmap&quot;<br>
+<br>
+=C2=A0 (pass-if &quot;basics&quot;<br>
+=C2=A0 =C2=A0 (let* ((siz #x10000)<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (reg (mmap 0 siz)))<br>
+=C2=A0 =C2=A0 =C2=A0 (and (eqv? (bytevector-length reg) siz)<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (begin (bytevector-u8-set! reg 0 99)<br=
>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(eqv? (bytev=
ector-u8-ref reg 0) 99))<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (begin (bytevector-u8-set! reg (1- siz)=
 98)<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(eqv? (bytev=
ector-u8-ref reg (1- siz)) 98))<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 #t)))<br>
+<br>
+=C2=A0 )<br>
+<br>
+;;;; --- last line ---<br>
<br>
<br>
<br>
<br>
</blockquote></div></div>

--94eb2c05528275b515055ed100e2--





Last modified: Mon, 25 Nov 2019 12:00:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.