Boost logo

Boost :

From: SourceForge.net (noreply_at_[hidden])
Date: 2005-09-28 11:47:59


Bugs item #1307106, was opened at 2005-09-28 09:47
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=107586&aid=1307106&group_id=7586

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: serialization
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Robert Ramey (ramey)
Summary: extended_type_info crash on global dtors (arm)

Initial Comment:
Hello,

i'm struggling with boost::serialization lib again ...

I am using RC0_1.33 which has fixed some serialization
stuff for me (1.33 was totally unusable for me due to
that bugs).

Now i seem to have encountered another problem...
I am using the boost framework in cross platform projects:

gcc 3.4.4: cygwin (win32), linux x86, linux arm
gcc 4.0.1: cygwin (win32), linux x86, linux arm
msvc 7.1: win32

After upgrading to 1.33/RC0 i get crashes on linux
"ARM" processor platform (binaries).
"pure virtual function call " -> SIGABRT

The cross compiler is verified to work fine (3.4.4).

After endless hours of debugging (thanks to that
gdb/gdbserver 6.3 trash) i tracked it down to a
specific serialization problem?

Attached is a shortened gdb/server session (target =
arm7tdmi)...

It only occurs on arm platform (little endian), the
same compiler on x86 (gcc 3.4.4) produces valid code.
No crashes.

Boost 1.32 worked flawlessly on all platforms with same
compilers but it doesnt count because serialization has
changed much between 1.32 and 1.33 (= could be anything)

>From what i can see, the "return less_than(rhs);
" operation is called
on"boost::serialization::extended_type_info" object,
resulting in pure virtual function call.

I have no clue where to search/begin for error ... i
can only debug on target (arm processor bord) with
gdbserver which make it a mess (global dtors).

I verified the "extended_type_info_typeid.cpp" code is
linked in and the function:

BOOST_SERIALIZATION_DECL(bool)
extended_type_info_typeid_0::less_than(const
extended_type_info &rhs) const
{
    return 0 != get_eti().before(
        static_cast<const extended_type_info_typeid_0
&>(rhs).get_eti()
    );
}
 
does exist in code.
This is the offending snippet:

-------------------------------------------------

BOOST_SERIALIZATION_DECL(bool)
extended_type_info::operator<(const extended_type_info
&rhs) const {
    int i = type_info_key_cmp(rhs);
    if(i < 0)
        return true;
    if(i > 0)
        return false;
    return less_than(rhs); <---- pure virtual function
call !!!
}

-------------------------------------------------

The object instance itself seems ok, though i dont know
how to validate vtable stuff because im not gdb expert.

What gives?

Regards,

A. Focht

----------------------------------------------------------------------

You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=107586&aid=1307106&group_id=7586

-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
Boost-bugs mailing list
Boost-bugs_at_[hidden]
https://lists.sourceforge.net/lists/listinfo/boost-bugs


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk