From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/12151 Path: news.gmane.org!.POSTED!not-for-mail From: Nicholas Wilson Newsgroups: gmane.linux.lib.musl.general Subject: [PATCH] Wasm support patch 1 (support systems without mmap) Date: Tue, 28 Nov 2017 11:50:08 +0000 Message-ID: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable X-Trace: blaine.gmane.org 1511869826 8879 195.159.176.226 (28 Nov 2017 11:50:26 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 28 Nov 2017 11:50:26 +0000 (UTC) To: "musl@lists.openwall.com" Original-X-From: musl-return-12167-gllmg-musl=m.gmane.org@lists.openwall.com Tue Nov 28 12:50:21 2017 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by blaine.gmane.org with smtp (Exim 4.84_2) (envelope-from ) id 1eJeP4-0001mc-VO for gllmg-musl@m.gmane.org; Tue, 28 Nov 2017 12:50:19 +0100 Original-Received: (qmail 32557 invoked by uid 550); 28 Nov 2017 11:50:23 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Original-Received: (qmail 32521 invoked from network); 28 Nov 2017 11:50:22 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=realvnc.onmicrosoft.com; s=selector1-realvnc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=torgt3hW4dSjXngHiuJpPRk5yzPRxINxA+bGtSGvzWo=; b=Dzm9Ca8W+T6KZlEmlorNMy58UAApYigE5yWyf1OJrJBnTsqCjowSqZdkJMq+0cfARDPbI4zyBKx4LA47LgIKd9DmGjh1+V3In/CoTCDxySeiiic7BYGuX+FbpAW28OOd8PK1lCkJ/Rhl9UpctZZeguDlxuAgQp1tZ58LUUeZ2tk= Thread-Topic: [PATCH] Wasm support patch 1 (support systems without mmap) Thread-Index: AQHTaD5ihFuxGjOePUWt0iLA2VAUUw== Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [2a02:390:a001:192:d6be:d9ff:fe9c:1892] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;VI1PR0502MB3886;6:fWw352Y/QFlkg5BlTrB7UZlqoPeSpxvrbqxNWGoykyrul2SHyPqqnY3sYViqrN292XwKkvFws5vwJDkZhWASFKagcBWb9R8wsphhwF9FioL+q6PIVx7jWS0sdXtxYvarQVy7dhbQxjhT3hn2Npf+nfCMGsp+7ugiCAk+L0K49rDwZT+Yrb1mR7+qTng98Gd6dLHt4zNY7Esa4FXMleBqWmOK+TFlaXfHgvy6kaYZ/A4wXf7hQ0FYNoxWIxHhlo//qDxnixLQC0GczFp+aJfx4ql1VW7U1KPmzqJ8wAn8vVckTLxAzljgydulS9Z7FefTpogQLLLdQrzpIgKs8Le8Zji9E7AEUHmpUtFwsNplrC4=;5:1u4CKmVLVeXSQSRi+OZtTcQTL5LJJReB1BCrpmHqpHSHXv2GhxOkEzTUy8PbqfGnx6q9fy6r9qZjw/EACxvmxff7id2eurWu+0zY+akXxqVOu5/pggLJlU6yfSXUpFwzcZf70nfbJs/jlmnaeHLoJDqP0GX1jfh/Q/R7SiCLE3c=;24:TjMwn1OMPCyKDwU8BuAWo14WCdV3+bXvdP7ETea3+h5Y/lANZZfQl+E+NEiUdliiYZmdBgq4U8+1fj8PTQUL+RAv+mR2qs9WiwXGbYw6Sk8=;7:L3sMi/CTPe6+Mlw7IryfzbRU36j8AwINIl/Az2hox5m2/O4oLM40PRvTcPwRfLzFvH9MUgF0tqmdhQ9V1bw6w88iuSkf OtcX28sDdLWUJjLntgDe4VXy+FUUNF8yMaFVSTBjtNL4E0m0KNbtbEb9dDcOxFIN+NUV8Tjii64Ou5KFLFkpW6VtUMFcaIMhLR x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 243bae6f-5a7e-4795-1300-08d536562c7a x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4603075)(4627115)(201702281549075)(5600026)(4604075)(2017052603258);SRVR:VI1PR0502MB3886; x-ms-traffictypediagnostic: VI1PR0502MB3886: authentication-results: spf=none (sender IP is ) smtp.mailfrom=nicholas.wilson@realvnc.com; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231022)(93006095)(93001095)(6041248)(20161123558100)(20161123564025)(20161123562025)(20161123560025)(2016111802025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6043046)(6072148)(201708071742011);SRVR:VI1PR0502MB3886;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:VI1PR0502MB3886; x-forefront-prvs: 0505147DDB x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(366004)(346002)(376002)(199003)(189002)(33656002)(7736002)(86362001)(6116002)(74316002)(8936002)(8676002)(102836003)(305945005)(97736004)(106356001)(2906002)(101416001)(478600001)(55016002)(316002)(6436002)(6506006)(189998001)(7696005)(25786009)(50986999)(14454004)(54356999)(3280700002)(3660700001)(68736007)(99286004)(5660300001)(53936002)(2351001)(2900100001)(2501003)(9686003)(81156014)(6916009)(81166006)(1730700003)(105586002)(5640700003)(5250100002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0502MB3886;H:VI1PR0502MB3885.eurprd05.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: realvnc.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM X-MS-Exchange-CrossTenant-Network-Message-Id: 243bae6f-5a7e-4795-1300-08d536562c7a X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2017 11:50:08.2672 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9ad766d3-c6a5-4458-8c58-244e7c118728 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0502MB3886 X-OriginatorOrg: realvnc.com Xref: news.gmane.org gmane.linux.lib.musl.general:12151 Archived-At: I'm hoping the first patch is uncontroversial. WebAssembly has a linear/flat memory model, whereby it's simply impossible = for the addressable memory to contain "holes". Therefore, mmap can't really= be emulated, and all memory has to be allocated via brk. I've done this by allowing malloc to fall back to brk (even for allocations= above MMAP_THRESHOLD) if mmap returns ENOSYS. It's one line of code that will do harm in "normal" systems, and allows pla= tforms that are emulating syscalls to choose not to support mmap, and still= get a working malloc if brk is working. All the best, Nick diff --git a/src/malloc/malloc.c b/src/malloc/malloc.c index 9e05e1d6..572232e1 100644 --- a/src/malloc/malloc.c +++ b/src/malloc/malloc.c @@ -328,13 +328,17 @@ void *malloc(size_t n) size_t len =3D n + OVERHEAD + PAGE_SIZE - 1 & -PAGE_SIZE; char *base =3D __mmap(0, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); - if (base =3D=3D (void *)-1) return 0; + if (base =3D=3D MAP_FAILED) { + if (errno =3D=3D ENOSYS) goto nommap; + return 0; + } c =3D (void *)(base + SIZE_ALIGN - OVERHEAD); c->csize =3D len - (SIZE_ALIGN - OVERHEAD); c->psize =3D SIZE_ALIGN - OVERHEAD; return CHUNK_TO_MEM(c); } =20 +nommap: i =3D bin_index_up(n); for (;;) { uint64_t mask =3D mal.binmap & -(1ULL<csize =3D newlen - extra;=