
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?