X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Virus-Scanned: Debian amavisd-new at medvecky.net X-Spam-Flag: NO X-Spam-Score: -2.823 X-Spam-Level: X-Spam-Status: No, score=-2.823 tagged_above=-999 required=3.8 tests=[ALL_TRUSTED=-1, BAYES_00=-1.9, TW_CR=0.077] autolearn=ham To: djgpp AT delorie DOT com From: "Rudolf Marek (r DOT marek AT assembler DOT cz) [via djgpp AT delorie DOT com]" Subject: valloc() returns NULL for larger requests, but malloc works fine Message-ID: <3459b672-8f4d-9840-5a01-246db011ed06@assembler.cz> Date: Fri, 29 Dec 2017 13:39:22 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Language: en-US Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id vBTCe3wb032496 Reply-To: djgpp AT delorie DOT com Hi, I was testing the flashrom DOS port before new release, and it turns out there is something wrong with the valloc(). It refuses to allocate larger areas, but malloc with same size works fine. The very same code was working fine with the 2.04 from 2009. I performed my experiment with following rpms installed: djcross-binutils-2.29.1-1ap.x86_64.rpm djcross-gcc-7.2.0-1ap.x86_64.rpm djcrx-2.05-5.x86_64.rpm #include #include #include int main(void) { printf("VALLOC %lx\n", valloc(1024*1024)); /* Fails with 0 */ printf("MALLOC %lx\n", malloc(1024)); /* Works fine */ printf("MALLOC %lx\n", malloc(1024*1024)); /* Works fine */ printf("VALLOC %lx\n", valloc(1024)); /* Fails with 0 */ printf("MEMALIGN %lx\n", memalign(4096, 1024)); /* Fails with 0 */ printf("MEMALIGN %lx\n", memalign(64, 1024)); /* Fails with 0 */ printf("MEMALIGN %lx\n", memalign(32, 64)); /* Works fine */ } I suspect something went wrong with memalign() internally, as for larger allocations it does some advanced trickery. Thanks Rudolf