16-byte-aligned malloc()?

Jonathan S. Shapiro shap@eros-os.com
Fri Sep 7 03:58:00 GMT 2007


Rick:

Is this a machine where one of the hardware datatypes is 16-byte
aligned?

For the linker script, here is an example of one that does cache line
alignment. Look around line 139

http://dev.eros-os.com/hg/coyotos/file/b6a415342299/src/sys/arch/i386/kernel/ldscript.S

The corresponding declaration support is in

http://dev.eros-os.com/hg/coyotos/file/b6a415342299/src/sys/kerninc/ccs.h

Look at the CACHE_ALIGN macro. Usage is to change the definition (not
the declaration) with:

   CACHE_ALIGN type name;

You should be able to adapt this example to other sizes and use it for
all of your static declarations.


For dynamic allocation, have a look at memalign in the C library.

On Thu, 2007-09-06 at 18:18 -0700, Rick Mann wrote:
> Hi. To make some of the hardware on the PXA320 happy, I need to  
> allocate buffers on 16 byte boundaries (lower four bits of address  
> should be zero. Does anyone have any suggestions on the best way to  
> accomplish this?
> 
> In certain cases, I could probably have the linker script create  
> sections (for example, I need to put a couple of frame buffers in  
> external memory; I think the linker script is expressive enough to  
> let me define a couple symbols with those addresses, and give me the  
> added benefit of preventing BSS data from encroaching into those, but  
> that's really a question for the GCC list).
> 
> In other cases, I need to declare static structures or malloc() space  
> for them. They are much smaller (16 bytes), but still need to be 16  
> byte-aligned.
> 
> Will I need to modify malloc() to do this?
> 
> TIA,
-- 
Jonathan S. Shapiro
Managing Director
The EROS Group, LLC
www.coyotos.org, www.eros-os.org



More information about the Newlib mailing list