[Freeswitch-dev] Freeswitch on ARM, Memory alignment issues

M D nospametor at gmail.com
Thu Jan 20 18:14:26 MSK 2011

On Tue, 18 Jan 2011 15:40:40 -0500
Michael Jerris <mike at jerris.com> wrote:

> On Jan 18, 2011, at 2:42 PM, M D wrote:
> > On Tue, 18 Jan 2011 12:54:53 -0500
> > Michael Jerris <mike at jerris.com> wrote:
> > 
> > In general, should I conclude that this issue has not been
> > encountered before?
> This has certainly been encountered before, on different platforms,
> including arm.  I suspect this is a toolchain issue more than
> anything in this case as we have worked on arm for quite some time.

Sorry for the noise. Looks like a gcc-4.3 issue. I have tested the
following code with gcc-4.3.3, gcc-4.3.5 and gcc-4.4.4 and gcc-4.4.5.
gcc-4.4.4 comes from gentoo crossdev environment, everything else is
from openwrt build system. The 4.4 versions align the buf2 in the code
below with the 32-bit boundary while the 4.3 versions don't. All test
cases compiled with -march=armv5te. No other compiler flags/switches
used. Optimization options -Os vs -O2 do not seem to make a difference.

If anyone has ready access to arm-gcc and an arm machine, I would be
curious to see my experience is consistent with others'.


P.S Code from memory.

----- test_align.c ----
#include <string.h>

typedef struct {
    uint16_t type;
    uint16_t length;
    char id[16];
} switch_stun_packet_header_t;
void main(void)
    uint8_t buf1[260] = {0};
    char j;
    uint8_t buf2[260] = {0};
    //switch_stun_packet_header_t *header;

    printf("buf1 starts at %x\n",buf1);
    printf("j starts at %x\n",&j);
    printf("buf2 starts at %x\n",buf2);

More information about the FreeSWITCH-dev mailing list