From: Rich Felker <dalias@libc.org>
To: musl@lists.openwall.com
Subject: Re: How to setup pre-allocated heap stack space?
Date: Tue, 5 Aug 2014 16:47:26 -0400 [thread overview]
Message-ID: <20140805204726.GK1674@brightrain.aerifal.cx> (raw)
In-Reply-To: <00a001cfb0eb$97409930$c5c1cb90$@codeaurora.org>
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
next prev parent reply other threads:[~2014-08-05 20:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-05 20:26 Weiming Zhao
2014-08-05 20:47 ` Rich Felker [this message]
2014-08-05 20:59 ` Weiming Zhao
2014-08-05 21:04 ` Rich Felker
2014-08-05 21:07 ` Weiming Zhao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140805204726.GK1674@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).