|
Message-ID: <00ba01cfb0f0$21992d00$64cb8700$@codeaurora.org> Date: Tue, 5 Aug 2014 13:59:21 -0700 From: "Weiming Zhao" <weimingz@...eaurora.org> To: <musl@...ts.openwall.com> Subject: RE: How to setup pre-allocated heap stack space? Hi Rich, I'm using it on a bare-metal setup. So the heap space some fixed address. So I think I should modify __brk() like: uintptr_t __brk(uintptr_t newbrk) { return newbrk == 0 ? HEAP_BASE : newbrk ; // assume heap is large enough } Is that correct? I don't need to worry about free(), right? Thanks, Weiming -----Original Message----- From: Rich Felker [mailto:dalias@...ifal.cx] On Behalf Of Rich Felker Sent: Tuesday, August 05, 2014 1:47 PM To: musl@...ts.openwall.com Subject: Re: [musl] 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.