From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5729 Path: news.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: How to setup pre-allocated heap stack space? Date: Tue, 5 Aug 2014 16:47:26 -0400 Message-ID: <20140805204726.GK1674@brightrain.aerifal.cx> References: <00a001cfb0eb$97409930$c5c1cb90$@codeaurora.org> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1407271667 842 80.91.229.3 (5 Aug 2014 20:47:47 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 5 Aug 2014 20:47:47 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5734-gllmg-musl=m.gmane.org@lists.openwall.com Tue Aug 05 22:47:41 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1XEldz-0004Jm-Of for gllmg-musl@plane.gmane.org; Tue, 05 Aug 2014 22:47:39 +0200 Original-Received: (qmail 18149 invoked by uid 550); 5 Aug 2014 20:47:39 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 18141 invoked from network); 5 Aug 2014 20:47:38 -0000 Content-Disposition: inline In-Reply-To: <00a001cfb0eb$97409930$c5c1cb90$@codeaurora.org> User-Agent: Mutt/1.5.21 (2010-09-15) Original-Sender: Rich Felker Xref: news.gmane.org gmane.linux.lib.musl.general:5729 Archived-At: On Tue, Aug 05, 2014 at 01:26:51PM -0700, Weiming Zhao wrote: > Hi, > > In musl's crt1.c , I want to let libc to use preallocated heap and stack. > > I can set the SP register in crt1. But how do I specify the base address of > heap? So malloc will starts from there. Are you using musl pretty much as-is on Linux, or on a custom OS, bare-metal setup, etc.? On Linux the stack is *always* pre-allocated (with a constant size of 128k, with more committed only lazily as needed, and with possible failure resulting in process death) so I don't know why you'd need to do your own stack pre-allocation, but like you said, it's not really hard. For the heap, if you have a custom OS, you can just define the SYS_brk syscall to give a pointer to your pre-allocated heap, but beware that musl will start using mmap if this heap runs out of space. If you're using Linux and you just want a pre-allocated heap to ensure that memory is committed at exec-time, so allocations can't fail later, the way to achieve this from crt1 would be to use the strategy reclaim_gaps() uses in the dynamic linker, which essentially amounts to passing the pointer to free() after setting up some adjacent bookkeeping structures. However I would strongly advise AGAINST this approach unless you're static-linking with a known version of musl. If dynamic linking, you would be encoding a dependency on the internal heap representation into your application binary, and things would horribly break if musl is later upgraded and the representation no longer matches. Rich