On Fri, Oct 9, 2015 at 11:37 AM, Dimitry Andric <d...@freebsd.org> wrote:
> > I have committed a (hopefully temporary) workaround in r289072. If you > don't want to do a full buildworld, first rebuild clang and install it, > then rebuild libc++ and install it. > After some back-and-forth about the cause, I am now reasonably convinced > that it is due to a bug in clang 3.7.0, as I noted in the commit message: > > Some further explanation: libc++'s iostream.cpp contains the definitions > of std::cout, std::cerr and so on. These global objects are effectively > declared with an alignment of 8 bytes. When an executable is linked > against libc++.so, it can sometimes get a copy of the global object, > which is then at the same alignment. > > However, with clang 3.7.0, the initialization of these global objects > will incorrectly use SSE instructions (e.g. movdqa), whenever the > optimization level is high enough, and SSE is enabled, such as on amd64. > When any of these objects is not aligned to 16 bytes, this will result > in a SIGBUS during iostream initialization. In contrast, clang 3.6.x > and earlier took the 8 byte alignment into consideration, and avoided > SSE for those particular operations. > > After bisecting of upstream changes, I found that the above revision > [llvm r240144] caused the change of this behavior, so I am reverting it > now as a workaround, while a discussion and test case is being prepared > for upstream. > > -Dimitry > > Thank you for analyzing and fixing the problem. You have excellent detective skills and worked hard to fix this! -- Craig _______________________________________________ firstname.lastname@example.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"