Date: Fri, 27 Jun 2008 21:58:31 +0200 From: Christoph Mallon <christoph.mallon@gmx.de> To: Marius Strobl <marius@FreeBSD.org> Cc: cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/sparc64/include in_cksum.h Message-ID: <48654667.1040401@gmx.de> In-Reply-To: <200806252105.m5PL5AUp064418@repoman.freebsd.org> References: <200806252105.m5PL5AUp064418@repoman.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Marius Strobl wrote: > marius 2008-06-25 21:04:59 UTC > > FreeBSD src repository > > Modified files: > sys/sparc64/include in_cksum.h > Log: > SVN rev 180011 on 2008-06-25 21:04:59Z by marius > > Use "__asm __volatile" rather than "__asm" for instruction sequences > that modify condition codes (the carry bit, in this case). Without > "__volatile", the compiler might add the inline assembler instructions > between unrelated code which also uses condition codes, modifying the > latter. > This prevents the TCP pseudo header checksum calculation done in > tcp_output() from having effects on other conditions when compiled > with GCC 4.2.1 at "-O2" and "options INET6" left out. [1] > > Reported & tested by: Boris Kochergin [1] > MFC after: 3 days This approach seems wrong to me and I think it works only by chance. The condition codes ("cc") should be added to the clobbered list of the asm statement instead of making the statement volatile: __asm("..." : $OUT : $IN : "cc"); This very case is also mentioned in the GCC documentation: "If your assembler instruction can alter the condition code register, add `cc' to the list of clobbered registers. GCC on some machines represents the condition codes as a specific hardware register; `cc' serves to name this register. On other machines, the condition code is handled differently, and specifying `cc' has no effect. But it is valid no matter what the machine." (Section 5.35 Assembler Instructions with C Expression Operands) I wrote a letter directly to Marius about this issue two days ago, but I got no response so far. Because this change has a MFC after 3 days, I'm writing to this list. Regards Christoph
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48654667.1040401>