[ECOS] Network programming for eCos under linux

Andrew Lunn andrew.lunn@ascom.ch
Wed Aug 8 06:51:00 GMT 2001


> I'm not sure this is a compiler bug - I would suspect the linux compiler
> can't access non-aligned memory either, but at a guess the kernel catches
> the exception and emulates it for you. If that is the case, it's best
> avoided as performance would suck.

I don't remeber the exact details. The code was something like...

static int 
func(char * msg, char * name ; short rr_type) {

 char *ptr;
 int len;
        
 strcpy(msg,name);
 ptr = msg + strlen(name);

 *ptr++ = ((char *)&rr_type)[0];
 *ptr++ = ((char *)&rr_type)[1];
 
 len = ptr - msg;

 return len;
}
 
Maybe i don't have the casts correct. Anyway, i found the ptr was not
being incremented when ptr was not word aligned before the first
*ptr++ operation. This could happen because name can be any length. It
worked fine on i386, but not on arm-elf. To me, this is a compile
bug. I got around it by using shifts and ands instead of casts and
array access.


        Andrew



More information about the Ecos-discuss mailing list