ARM memory layout

Sascha Hauer s.hauer at pengutronix.de
Thu Jun 16 06:22:40 PDT 2016


Hi Daniel,

On Thu, Jun 16, 2016 at 12:11:10PM +0200, Daniel Krüger wrote:
> Hello,
> 
> during the porting of barebox to a new i.MX35 board I stumbled over some
> crazy things with the memory layout. The comments in file
> arch/arm/cpu/entry.c seem to be wrong or at least misleading.
> 
> We configured barebox as non-relocatable image. So I think the configured
> TEXT_BASE is very important.
> 
> I use the following configuration with 128 MB RAM:
> CONFIG_TEXT_BASE=0x87000000
> CONFIG_STACK_SIZE=0x100000
> CONFIG_MALLOC_SIZE=0xd00000
> 
> The stack is configured very large in this project, because of other reason.
> 
> I get the following memory layout:
>     0x87ffffff top of RAM
>      |           free-space (see arm_mem_stack() in
>      |                       arch/arm/include/asm/barebox-arm.h)
>     0x87ff0000 start of 64 kB free-space (vector table)
>     0x87feffff top of stack
>      |
>     0x87ef0000 start of 1 MB reserved stack space
>     0x87eeffff
>      |         16 kB early translation table
>     0x87eec000 early TTB (translation table base)
>     0x87eebfff malloc end
>      |          13 MB malloc space
>     0x871ec000 malloc start
>      |         some small free space
>      |         barebox binary
>     0x87000000 TEXT_BASE
> 
> This does not comply to the comment in the above mentioned source file.
> There the malloc space and the vector table are missing.
> 
> I would expect some check in the source code, when TEXT_BASE is too high or
> barebox binary is too large, so they collide with malloc space or stack. By
> reverse engineering the detailed memory layout above, I discovered that in
> another project the TEXT_BASE falls within the malloc space.
> 
> How does is run on other ARM boards? Are they all running with
> CONFIG_RELOCATABLE=Y?

Most of them do, yes.

It seems !CONFIG_RELOCATABLE became broken with:

| commit 65071bd0910ef109c86b9645c570a6ceed7de534
| Author: Markus Pargmann <mpa at pengutronix.de>
| Date:   Tue Dec 8 10:39:29 2015 +0100
|
|   arm: Clarify memory layout calculation

I just sent out a series from which the first patch should fix your
issue. The malloc space should be below the barebox image, not above it.
BTW you shouldn't have to specify the malloc size, barebox can pick a
sensible default for you if you specify it to 0.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list