Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 5 Aug 2014 16:47:26 -0400
From: Rich Felker <>
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.


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.