
"Peter Dimov" <pdimov@mmltd.net> writes:
Peter Dimov wrote:
John Maddock wrote:
Program received signal SIGSEGV, Segmentation fault si_code: 1 - SEGV_MAPERR - Address not mapped to object. 0x40601e1 in boost::detail::atomic_decrement (pw=0x40014bd4) at sp_counted_base_gcc_ia64.hpp:52
The problem is that in
__asm__ (" fetchadd4.rel %0=[%2],-1 ;; \n"
the %2 register (r15 in my test) contains 0x40014bd4, while the address of *pw is actually 0x2000000040014bd4. Apparently g++ needs to be informed of the fact that %2 is an address register, not a data register. Now I only need to find out how to do that.
I fixed it. shared_ptr_test with -O0 -g still segfaults on td176, but this has nothing to do with the inline asm, as the same fault occurs with -DBOOST_SP_DISABLE_THREADS. shared_ptr_test -O2 works fine, as does smart_ptr_test. I tested the fix on the other IA64 testdrives as well, all seem to work. Committed to trunk.
OK to commit to branch?
Bugfixes on the release branch are always OK until the release manager freezes it. -- Dave Abrahams Boost Consulting www.boost-consulting.com