Torvald Riegel <[email protected]> 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:
ro@arenal 290 > /bin/ksh ./libtool --tag=CXX --mode=compile
/var/gcc/regression/trunk/11-gcc/build/./gcc/xg++
-B/var/gcc/regression/trunk/11-gcc/build/./gcc/ -nostdinc++ -nostdinc++
-I/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include/i386-pc-solaris2.11
-I/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/libsupc++
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/include/backward
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/util
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/src
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/src/.libs
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/libsupc++/.libs
-B/vol/gcc/i386-pc-solaris2.11/bin/ -B/vol/gcc/i386-pc-solaris2.11/lib/
-isystem /vol/gcc/i386-pc-solaris2.11/include -isystem
/vol/gcc/i386-pc-solaris2.11/sys-include -DHAVE_CONFIG_H -I.
-I/vol/gcc/src/hg/trunk/local/libitm
-I/vol/gcc/src/hg/trunk/local/libitm/config/x86
-I/vol/gcc/src/hg/trunk/local/libitm/config/posix
-I/vol/gcc/src/hg/trunk/local/libitm/config/generic
-I/vol/gcc/src/hg/trunk/local/libitm -march=i486 -mtune=i386
-fomit-frame-pointer -mrtm -Wall -Werror -Wc,-pthread -std=gnu++0x
-funwind-tables -fno-exceptions -fno-rtti -fabi-version=4 -g -O2 -MT rwlock.lo
-MD -MP -MF .deps/rwlock.Tpo -c -o rwlock.lo
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.cc
libtool: compile: /var/gcc/regression/trunk/11-gcc/build/./gcc/xg++
-B/var/gcc/regression/trunk/11-gcc/build/./gcc/ -nostdinc++ -nostdinc++
-I/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include/i386-pc-solaris2.11
-I/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/include
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/libsupc++
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/include/backward
-I/vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/util
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/src
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/src/.libs
-L/var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/libstdc++-v3/libsupc++/.libs
-B/vol/gcc/i386-pc-solaris2.11/bin/ -B/vol/gcc/i386-pc-solaris2.11/lib/
-isystem /vol/gcc/i386-pc-solaris2.11/include -isystem
/vol/gcc/i386-pc-solaris2.11/sys-include -DHAVE_CONFIG_H -I.
-I/vol/gcc/src/hg/trunk/local/libitm
-I/vol/gcc/src/hg/trunk/local/libitm/config/x86
-I/vol/gcc/src/hg/trunk/local/libitm/config/posix
-I/vol/gcc/src/hg/trunk/local/libitm/config/generic
-I/vol/gcc/src/hg/trunk/local/libitm -march=i486 -mtune=i386
-fomit-frame-pointer -mrtm -Wall -pthread -Werror -std=gnu++0x -funwind-tables
-fno-exceptions -fno-rtti -fabi-version=4 -g -O2 -MT rwlock.lo -MD -MP -MF
.deps/rwlock.Tpo -c /vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.cc
-fPIC -DPIC -o .libs/rwlock.o
In file included from /vol/gcc/src/hg/trunk/local/libitm/libitm_i.h:83:0,
from
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.cc:25:
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.h: In constructor
'GTM::gtm_rwlock::gtm_rwlock()':
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.h:64:18: error:
'GTM::gtm_rwlock::c_confirmed_writers' will be initialized after
[-Werror=reorder]
pthread_cond_t c_confirmed_writers; // Writers wait here for readers
^
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.h:59:29: error:
'std::atomic<unsigned int> GTM::gtm_rwlock::summary' [-Werror=reorder]
std::atomic<unsigned int> summary; // Bitmask of the above.
^
/vol/gcc/src/hg/trunk/local/libitm/config/posix/rwlock.cc:32:1: error: when
initialized here [-Werror=reorder]
gtm_rwlock::gtm_rwlock()
^
cc1plus: all warnings being treated as errors
Moving the summary initialization first fixes this.
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University