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 */
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
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 */
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=
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.
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 */
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,"bitstream vera sans"= ;,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"Matt Wette" <<a href=3D"mailto:matt.wette@gm= ail.com">matt.wette@HIDDEN</a>>=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 "mman.c"<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 ("directory", 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 <config.h><br> +#endif<br> +<br> +#ifdef HAVE_SYS_MMAN_H<br> +#=C2=A0 include <sys/mman.h><br> +#=C2=A0 include <errno.h><br> +#endif<br> +<br> +#if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MAP_ANONYMOUS)<br> +<br> +#include "libguile/_scm.h"<br> +#include "libguile/smob.h"<br> +#include "libguile/fdes-finalizers.h"<br> +#include "libguile/feature.h"<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, "mmap/search", 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"mmap addr len [prot [flags = [fd [offset]]]]"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"See the unix man page for m= map.=C2=A0 Returns a bytevector."<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"Note that the region alloca= ted will be searched by the garbage"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"collector for pointers.=C2= =A0 \n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0" Defaults:\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 PROT=C2=A0 =C2=A0(lo= gior PROT_READ PROT_WRITE)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 FLAGS=C2=A0 (logior = MAP_ANON MAP_PRIVATE)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 FD=C2=A0 =C2=A0 =C2= =A0-1\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 OFFSET 0\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"@example\n(define reg (mmap= /search %null-pointer #x1000)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"@end example"<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("bad addr", 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*) < 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, "mmap", 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"mmap addr len [prot [flags = [fd [offset]]]]"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"See the man page.=C2=A0 Ret= urns a bytevector."<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"Note that the region return= ed by mmap will NOT be searched "<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"by the garbage collector fo= r pointers.\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"Defaults:\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 PROT=C2=A0 =C2=A0(lo= gior PROT_READ PROT_WRITE)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 FLAGS=C2=A0 (logior = MAP_ANON MAP_PRIVATE)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 FD=C2=A0 =C2=A0 =C2= =A0-1\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"=C2=A0 OFFSET 0\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"@example\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"(define bvec-1MB (mmap 0 #x= 100000)\n"<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"@end example"<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, "munmap", 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"See the man page. Given byt= evector unmap."<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 ("PROT_NONE", scm_from_int (PROT_NONE));<br> +#endif<br> +#ifdef PROT_<br> +=C2=A0 scm_c_define ("PROT_READ", scm_from_int (PROT_READ));<br> +#endif<br> +#ifdef PROT_<br> +=C2=A0 scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));<b= r> +#endif<br> +#ifdef PROT_<br> +=C2=A0 scm_c_define ("PROT_EXEC", scm_from_int (PROT_EXEC));<br> +#endif<br> +<br> +#ifdef MAP_ANONYMOUS<br> +=C2=A0 scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOU= S));<br> +#endif<br> +#ifdef MAP_ANON<br> +=C2=A0 scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));<br> +#endif<br> +#ifdef MAP_FILE<br> +=C2=A0 scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));<br> +#endif<br> +#ifdef MAP_FIXED<br> +=C2=A0 scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));<br> +#endif<br> +#ifdef MAP_HASSEMAPHORE<br> +=C2=A0 scm_c_define ("MAP_HASSEMAPHORE", scm_from_int (MAP_HASSE= MAPHORE));<br> +#endif<br> +#ifdef MAP_PRIVATE<br> +=C2=A0 scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));= <br> +#endif<br> +#ifdef MAP_SHARED<br> +=C2=A0 scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));<b= r> +#endif<br> +#ifdef MAP_NOCACHE<br> +=C2=A0 scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));= <br> +#endif<br> +=C2=A0 scm_c_define ("PAGE_SIZE", scm_from_int (getpagesize()));= <br> +}<br> +<br> +#endif /* HAVE_SYS_MMAN_H */<br> <br> <br> <br> <br> </blockquote></div></div> --94eb2c061e16aad101055ebcf4cd--
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 <<a href=3D"mailto:nalaginrut@HIDDEN" = class=3D"">nalaginrut@HIDDEN</a>> 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 <span = style=3D"color:rgb(85,85,85);font-family:verdana,"bitstream vera = sans",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" <<a = href=3D"mailto:matt.wette@HIDDEN" = class=3D"">matt.wette@HIDDEN</a>>=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. 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 2017-03-01 = 10:54:31.000000000 -0800<br class=3D""> +++ libguile/filesys.c 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""> void<br class=3D""> scm_init_filesys ()<br class=3D""> {<br class=3D""> +#ifdef HAVE_SYS_MMAN_H<br class=3D""> + init_mman();<br class=3D""> +#endif<br class=3D""> #ifdef HAVE_POSIX<br class=3D""> scm_tc16_dir =3D scm_make_smob_type ("directory", 0);<br = class=3D""> scm_set_smob_free (scm_tc16_dir, scm_dir_free);<br = class=3D""> --- libguile/mman.c.orig 2017-10-28 = 10:05:10.000000000 -0700<br class=3D""> +++ libguile/mman.c 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""> +# include <config.h><br class=3D""> +#endif<br class=3D""> +<br class=3D""> +#ifdef HAVE_SYS_MMAN_H<br class=3D""> +# include <sys/mman.h><br class=3D""> +# include <errno.h><br class=3D""> +#endif<br class=3D""> +<br class=3D""> +#if defined(HAVE_SYS_MMAN_H) && 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""> + = SCM offset);<br class=3D""> +SCM_API SCM scm_mmap (SCM addr, SCM len, SCM prot, SCM flags, SCM = fd,<br class=3D""> + = 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""> + (SCM addr, SCM len, SCM prot, = SCM flags, SCM fd, SCM offset),<br class=3D""> + "mmap addr len [prot [flags = [fd [offset]]]]"<br class=3D""> + "See the unix man page for = mmap. Returns a bytevector."<br class=3D""> + "Note that the region = allocated will be searched by the garbage"<br class=3D""> + "collector for pointers. = \n"<br class=3D""> + " Defaults:\n"<br class=3D""> + " PROT = (logior PROT_READ PROT_WRITE)\n"<br class=3D""> + " FLAGS (logior = MAP_ANON MAP_PRIVATE)\n"<br class=3D""> + " FD = -1\n"<br class=3D""> + " OFFSET 0\n"<br = class=3D""> + "@example\n(define reg = (mmap/search %null-pointer #x1000)\n"<br class=3D""> + "@end example"<br class=3D""> + )<br class=3D""> +#define FUNC_NAME s_scm_mmap_search<br class=3D""> +{<br class=3D""> + void *c_mem, *c_addr;<br class=3D""> + size_t c_len;<br class=3D""> + int c_prot, c_flags, c_fd;<br class=3D""> + scm_t_off c_offset;<br class=3D""> + SCM pointer, bvec;<br class=3D""> +<br class=3D""> + if (SCM_POINTER_P (addr))<br class=3D""> + c_addr =3D SCM_POINTER_VALUE (addr);<br class=3D""> + else if (scm_is_integer (addr))<br class=3D""> + c_addr =3D (void*) scm_to_uintptr_t (addr);<br class=3D""> + else<br class=3D""> + SCM_MISC_ERROR("bad addr", addr);<br class=3D""> +<br class=3D""> + c_len =3D scm_to_size_t (len);<br class=3D""> +<br class=3D""> + if (SCM_UNBNDP (prot))<br class=3D""> + c_prot =3D PROT_READ | PROT_WRITE;<br class=3D""> + else<br class=3D""> + c_prot =3D scm_to_int (prot);<br class=3D""> +<br class=3D""> + if (SCM_UNBNDP (flags))<br class=3D""> + c_flags =3D MAP_ANON | MAP_PRIVATE;<br class=3D""> + else<br class=3D""> + c_flags =3D scm_to_int (flags);<br class=3D""> +<br class=3D""> + if (SCM_UNBNDP (fd))<br class=3D""> + c_fd =3D -1;<br class=3D""> + else<br class=3D""> + c_fd =3D scm_to_int (fd);<br class=3D""> +<br class=3D""> + if (SCM_UNBNDP (fd))<br class=3D""> + c_offset =3D 0;<br class=3D""> + else<br class=3D""> + c_offset =3D scm_to_off_t (offset);<br class=3D""> +<br class=3D""> + c_mem =3D mmap(c_addr, c_len, c_prot, c_flags, c_fd, = c_offset);<br class=3D""> + if (c_mem =3D=3D MAP_FAILED)<br class=3D""> + SCM_SYSERROR; = /* errno set */<br class=3D""> +<br class=3D""> + pointer =3D scm_cell (scm_tc7_pointer, (scm_t_bits) c_mem);<br = class=3D""> + bvec =3D scm_c_take_typed_bytevector((<wbr class=3D"">signed = char *) c_mem + c_offset, c_len,<br class=3D""> + = = SCM_ARRAY_ELEMENT_TYPE_VU8, pointer);<br class=3D""> + /* if sizeof(void*) < sizeof(size_t) we are in trouble: */<br = class=3D""> + scm_i_set_finalizer (SCM2PTR (bvec), mmap_finalizer, (void*) = c_len);<br class=3D""> + 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""> + (SCM addr, SCM len, SCM prot, = SCM flags, SCM fd, SCM offset),<br class=3D""> + "mmap addr len [prot [flags = [fd [offset]]]]"<br class=3D""> + "See the man page. = Returns a bytevector."<br class=3D""> + "Note that the region returned = by mmap will NOT be searched "<br class=3D""> + "by the garbage collector for = pointers.\n"<br class=3D""> + "Defaults:\n"<br class=3D""> + " PROT = (logior PROT_READ PROT_WRITE)\n"<br class=3D""> + " FLAGS (logior = MAP_ANON MAP_PRIVATE)\n"<br class=3D""> + " FD = -1\n"<br class=3D""> + " OFFSET 0\n"<br = class=3D""> + "@example\n"<br class=3D""> + "(define bvec-1MB (mmap 0 = #x100000)\n"<br class=3D""> + "@end example"<br class=3D""> + )<br class=3D""> +#define FUNC_NAME s_scm_mmap<br class=3D""> +{<br class=3D""> + SCM bvec;<br class=3D""> + void *c_mem;<br class=3D""> + size_t c_len;<br class=3D""> +<br class=3D""> + bvec =3D scm_mmap_search(addr, len, prot, flags, fd, offset);<br = class=3D""> + c_mem =3D SCM_BYTEVECTOR_CONTENTS(bvec);<br class=3D""> + c_len =3D SCM_BYTEVECTOR_LENGTH(bvec);<br class=3D""> +<br class=3D""> + /* tell GC not to scan for pointers */<br class=3D""> + GC_exclude_static_roots(c_mem, (char*) c_mem + c_len);<br = class=3D""> +<br class=3D""> + 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""> + void *c_addr;<br class=3D""> + intptr_t c_len;<br class=3D""> + int res;<br class=3D""> +<br class=3D""> + c_addr =3D (void *) SCM_POINTER_VALUE (SCM_PACK_POINTER = (ptr));<br class=3D""> + c_len =3D (intptr_t) data;<br class=3D""> + res =3D munmap(c_addr, c_len);<br class=3D""> + 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""> + (SCM bvec),<br class=3D""> + "See the man page. Given = bytevector unmap."<br class=3D""> + )<br class=3D""> +#define FUNC_NAME s_scm_munmap<br class=3D""> +{<br class=3D""> + void *c_addr;<br class=3D""> + size_t c_len;<br class=3D""> + int c_res;<br class=3D""> +<br class=3D""> + SCM_VALIDATE_BYTEVECTOR (1, bvec);<br class=3D""> +<br class=3D""> + c_addr =3D (void *) SCM_BYTEVECTOR_CONTENTS (bvec);<br class=3D"">= + c_len =3D SCM_BYTEVECTOR_LENGTH (bvec);<br class=3D""> +<br class=3D""> + c_res =3D munmap(c_addr, c_len);<br class=3D""> + if (c_res =3D=3D -1)<br class=3D""> + SCM_SYSERROR; = /* errno set */<br class=3D""> +<br class=3D""> + // TODO: clean up bytevector<br class=3D""> + 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""> + scm_c_define ("PROT_NONE", scm_from_int (PROT_NONE));<br = class=3D""> +#endif<br class=3D""> +#ifdef PROT_<br class=3D""> + scm_c_define ("PROT_READ", scm_from_int (PROT_READ));<br = class=3D""> +#endif<br class=3D""> +#ifdef PROT_<br class=3D""> + scm_c_define ("PROT_WRITE", scm_from_int (PROT_WRITE));<br = class=3D""> +#endif<br class=3D""> +#ifdef PROT_<br class=3D""> + 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""> + scm_c_define ("MAP_ANONYMOUS", scm_from_int (MAP_ANONYMOUS));<br = class=3D""> +#endif<br class=3D""> +#ifdef MAP_ANON<br class=3D""> + scm_c_define ("MAP_ANON", scm_from_int (MAP_ANON));<br class=3D"">= +#endif<br class=3D""> +#ifdef MAP_FILE<br class=3D""> + scm_c_define ("MAP_FILE", scm_from_int (MAP_FILE));<br class=3D"">= +#endif<br class=3D""> +#ifdef MAP_FIXED<br class=3D""> + scm_c_define ("MAP_FIXED", scm_from_int (MAP_FIXED));<br = class=3D""> +#endif<br class=3D""> +#ifdef MAP_HASSEMAPHORE<br class=3D""> + scm_c_define ("MAP_HASSEMAPHORE", scm_from_int = (MAP_HASSEMAPHORE));<br class=3D""> +#endif<br class=3D""> +#ifdef MAP_PRIVATE<br class=3D""> + scm_c_define ("MAP_PRIVATE", scm_from_int (MAP_PRIVATE));<br = class=3D""> +#endif<br class=3D""> +#ifdef MAP_SHARED<br class=3D""> + scm_c_define ("MAP_SHARED", scm_from_int (MAP_SHARED));<br = class=3D""> +#endif<br class=3D""> +#ifdef MAP_NOCACHE<br class=3D""> + scm_c_define ("MAP_NOCACHE", scm_from_int (MAP_NOCACHE));<br = class=3D""> +#endif<br class=3D""> + 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--
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 ---
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'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.<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"Matt Wette" <<a href=3D"ma= ilto:matt.wette@HIDDEN">matt.wette@HIDDEN</a>>=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'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 "mmap"<br> +<br> +=C2=A0 (pass-if "basics"<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--
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.