Gary Thomas <[email protected]> writes: > Jose Vasconcellos wrote: >> Redboot gets an exception when trying to set any IP address with fconfig >> when using gcc-4.3.2 on an ixp425 target (armeb). The issue seems to be >> an alignment problem as val_ptr contains an odd address; it looks like gcc >> is optimizing and trying to do a copy on a word boundary. The removal of >> the cast fixes the problem. >> >> >> --- fconfig.c 2009-01-18 14:34:11.000000000 -0500 >> +++ fconfig.c.new 2009-01-18 14:35:22.000000000 -0500 >> @@ -388,7 +388,7 @@ >> break; >> #ifdef CYGPKG_REDBOOT_NETWORKING >> case CONFIG_IP: >> - memcpy(&hold_ip_val.s_addr, &((in_addr_t >> *)val_ptr)->s_addr, sizeof(in_addr_t)); >> + memcpy(&hold_ip_val.s_addr, val_ptr, sizeof(in_addr_t)); >> if (!_gethostbyname(line, &new_ip_val)) { >> return CONFIG_BAD; >> } >> > > Sounds like a *BUG* in the compiler.
I don'think so -- standard behaviour is undefined when converting from a pointer to one type to a pointer to another type that has more stringent alignment requirements (e.g. from "void *" to "in_addr_t *"). Regards, -- Daniel Néri <[email protected]> Sigicom AB, Stockholm, Sweden
