On Tue, Jul 24, 2012 at 10:08:13PM +0100, David Chisnall wrote: > On 23 Jul 2012, at 20:53, David Chisnall wrote: > > > On 23 Jul 2012, at 20:18, Konstantin Belousov wrote: > > > >> Longer description is that pc_curthread is offset 0 if %gs-based. > >> The dereferenced pointer point to the struct thread, which contains > >> td_proc pointer at offset 8. Instead, clang seems to dereference > >> td_proc from offset 8 based on %gs, or something similar. > > > > This appears to be a bug in the LLVM X86 back end. It is performing an invalid fold of the two loads. I have filed this bug: > > > > http://llvm.org/bugs/show_bug.cgi?id=13438 > > And fixed it in LLVM r160687. Since it's a single-line change, we can probably pull it into our version. > > dim: http://llvm.org/viewvc/llvm-project?view=rev&revision=160687 As kan rightfully notes, the assumption that &%fs:0 == *%fs:0 holds for userspace on amd64, and the same is true for %gs userspace on i386. The change you committed to clang/llvm/whatever it called just breaks useful optimization for FreeBSD. Sigh.
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:29 UTC