Date: Tue, 5 Aug 2014 16:47:26 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: How to setup pre-allocated heap stack space? 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
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.