|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-03-22 17:52:06
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?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk