On Fri, 2013-08-30 at 16:49 +0200, Rainer Orth wrote: > Torvald Riegel <trie...@redhat.com> writes: > > > On Mon, 2013-08-26 at 09:49 -0700, Richard Henderson wrote: > >> On 08/22/2013 02:57 PM, Torvald Riegel wrote: > >> > On Thu, 2013-08-22 at 12:05 -0700, Richard Henderson wrote: > >> >> On 08/22/2013 11:39 AM, Torvald Riegel wrote: > >> >>> + /* Store edi for future HTM fast path retries. We use a stack > >> >>> slot > >> >>> + lower than the jmpbuf so that the jmpbuf's rip field will > >> >>> overlap > >> >>> + with the proper return address on the stack. */ > >> >>> + movl %edi, -64(%rsp) > >> >> > >> >> You havn't allocated the stack frame here, and you're storing > >> >> outside the redzone. This is invalid. > >> >> > >> >> Two possibilities: > >> >> > >> >> (1) always allocate the stack frame on entry to > >> >> the function (adds two register additions to > >> >> the htm fast path -- in the noise i'd think) > >> >> > >> >> (2) store the edi value in the non-htm path, with > >> >> the pr_HTMRetryableAbort bit or'd in. (adds an > >> >> extra store to the non-htm path; probably noise). > >> >> You'd want to mask out that bit when you reload it. > >> > > >> > Oops. Picked fix (2). Better now? > >> > > >> > >> Move the andl of edi down into the HAVE_AS_RTM block, above the orl of > >> HTMRetriedAfterAbort. Ok with that change. > > > > Committed as r202101. > > > > The patch has broken Solaris/x86 bootstrap:
Sorry about that. I'll try to remember to test on non-Linux / non-futex systems too next time. I committed the attached patch as r202116. (Please note that I'll be offline for two weeks starting in about an hour (yes, bad timing), so I hope I didn't miss anything else...) Torvald
commit 29006efcecde6ec0366f6c88a662d30b9efb931f Author: torvald <torvald@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Fri Aug 30 17:13:05 2013 +0000 libitm: Fix wrong initialization order introduced with r202101. * config/posix/rwlock.cc: Fix initialization order. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202116 138bc75d-0d04-0410-961f-82ee72b054a4 diff --git a/libitm/config/posix/rwlock.cc b/libitm/config/posix/rwlock.cc index 488e9c2..61b6ad9 100644 --- a/libitm/config/posix/rwlock.cc +++ b/libitm/config/posix/rwlock.cc @@ -30,11 +30,11 @@ namespace GTM HIDDEN { // ??? Move this back to the header file when constexpr is implemented. gtm_rwlock::gtm_rwlock() - : mutex (PTHREAD_MUTEX_INITIALIZER), + : summary (0), + mutex (PTHREAD_MUTEX_INITIALIZER), c_readers (PTHREAD_COND_INITIALIZER), c_writers (PTHREAD_COND_INITIALIZER), c_confirmed_writers (PTHREAD_COND_INITIALIZER), - summary (0), a_readers (0), w_readers (0), w_writers (0)