> movl $(((_end-_edata)+3)>>2),%ecx > This looks very suspicious to me. The symbols `_end' and `_edata' are not known to the assembler, so doing arithmetic on them is pretty bogus. I'd say this should actually be coded as: movl $_end, %ecx subl $_edata, %ecx addl $3, %ecx shr $2, %ecx -pk