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. Have you reported it? This does more than remove the cast :-) What if the s_addr field is not at the start of the structure? I know it hasn't moved in 25+ years, but I don't like tossing correctness [even if only pedantic] away. Maybe there's another way to solve this. Does it happen on arm[el]? -- ------------------------------------------------------------ Gary Thomas | Consulting for the MLB Associates | Embedded world ------------------------------------------------------------
