GNATS-1110: in_cksum_hdr error in PC386 BSP

Thomas Doerfler (nt) Thomas.Doerfler at imd-systems.de
Sat Jul 1 17:34:40 UTC 2006


Till,

congratulations!

It seems it is really necessary to review ALL "asm" inserts for memory
barrier requirements.
wkr,
Thomas.

Till Straumann schrieb:
> I believe I caught this one.
> Thanks to Danilliu for reporting this and his/(her?)
> perseverance.
> 
> It is definitely a toolchain/optimization issue:
> 
> The BSD code does
> 
> header->checksum = 0;
> header->checksum = ip_cksum_hdr(&header);
> 
> The inline ip_cksum_hdr() routine has inline assembly
> and gcc doesn't consider that the assembly actually
> could read 'header->checksum' (which it does) so it thinks the
> header->checksum = 0 assignment is unnecessary
> and optimizes it away :-(
> 
> Confirmed by disassembly of Danilliu's broken
> and a working binary.
> 
> [ As soon as any 'real' subroutine (like a printf)
> is called from ip_cksum_hdr() gcc realizes that
> the header->checksum=0 assigment could have
> side-effects and the problem goes away].
> 
> A memory barrier could resolve this.
> 
> 
> -- Till
> 
> 
> Ralf Corsepius wrote:
> 
>> On Wed, 2006-06-28 at 09:54 -0500, Eric Norum wrote:
>>  
>>
>>> On Jun 28, 2006, at 9:39 AM, Ralf Corsepius wrote:
>>>
>>>   
>>>
>>>> On Wed, 2006-06-28 at 08:47 -0500, Eric Norum wrote:
>>>>
>>>>
>>>>     
>>>>
>>>>> The checksum routines are very heavily used so it's really
>>>>> important  that they be as fast as possible.  Do you have an
>>>>> estimate of the
>>>>>
>>>>> relative times of the old and new versions of this code?
>>>>>       
>>>>
>>>> heavily used and broken don't align smoothly.
>>>>     
>>>
>>> Yes, I think that they might in this case.
>>> 1) This problem may have just shown up as a result of the change from
>>> gcc-3.x to gcc-4.x.
>>> 2) Joel has reported for some time that qemu has been broken.
>>>   
>>
>> Somebody might want to test on real hardware.
>>
>>  
>>
>>>> Either these routines have been heavily used, then they must have
>>>> been
>>>> working, or not - Then I don't understand why nobody has tripped
>>>> over
>>>> this issue in the years this code is in place.
>>>>     
>>>
>>> Because in previous years they were using a different tool chain.
>>>   
>>
>> It's always a comfortable excuse to accuse the toolchain :-)
>>
>> Did you check the asm being generated?
>>
>>  
>>
>>>> IMO, the PR is way to vague to give any trust in it.
>>>>     
>>>
>>> Others have reported problems with networking on the pc386.
>>>   
>>
>> This doesn't mean much, esp. because most networking on little endian
>> targets always is a magnitude difficult than on big endian ones.
>>
>>  
>>
>>>  This is the first time I've seen a patch though.
>>>   
>>
>> I presume, explicitly testing this checksum code on real hardware with
>> somebody being familiar to i386s isn't much of a problem.
>>
>> Ralf
>>
>>
>>
>>  
>>


-- 
--------------------------------------------
IMD Ingenieurbuero fuer Microcomputertechnik
Thomas Doerfler           Herbststrasse 8
D-82178 Puchheim          Germany
email:    Thomas.Doerfler at imd-systems.de
PGP public key available at:
     http://www.imd-systems.de/pgpkey_en.html



More information about the users mailing list