On Sun, Sep 24, 2006 at 10:06:51PM +0200, Daniel Smolik wrote:
 
> Hi,
> when I compile eeprom.c with gcc-3.3 works without fix. May be  this isn't 
> problem in eeprom.c but in gcc or gcc usage. What do you mean ?

Hi Daniel,

The fix works because once you declare something as int, compiler *has* to 
align 
it at a 4-byte boundary, if it would not do that, that would be a bug. For a 
char 
array there is probably no alignment requirement, so it's perfectly ok for it 
to 
be unaligned. The fact that you do not see the same behaviour with gcc-3.3 is 
not 
surprising either: depending on the implemented optimizations different 
compilers 
may use different layouts of variables in memory, so in some cases buf2 may be 
aligned. Note that compiling eeprom.c with gcc-4.1 and -O0 instead of -O2 also 
does not trigger the bug.

You can force alignment of variables in gcc using the alignment attribute, for 
example writing something like

char foo __attribute__ ((aligned(4)));

should cause foo to be aligned on a 4-byte boundary. Hm, it's confusing, 
because I
think I tried this before on buf2 and it did not work (got a gcc warning about 
ignored attribute, maybe I did not spell it correctly?). Now it appears to work 
though :-/. I guess I need to rework my solution to use this instead.

Best regards,
-- 
Jurij Smakov                                        [EMAIL PROTECTED]
Key: http://www.wooyd.org/pgpkey/                   KeyID: C99E03CC


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to