Ok first I hadn't realised my attachment was removed. So I include the
source code below. This is small and self contained.

o The compile error on AIX was removed because I saving via a non const
  variable. ( Note however gcc 4.2.1. on Linux it did not complain.)

o To recap this compiles and runs on Linux with gcc 4.2.1 but
  crashes/exception on AIX V10.1. Because it reckons the derived/base
  relationship has not been registered.
             ... oserializer.hpp
             // convert pointer to more derived type. if this is thrown
             // it means that the base/derived relationship hasn't be registered
             vp = serialization::void_downcast(
                 *true_type,
                 *this_type,
                 static_cast<const void *>(&t)
             );
             if(NULL == vp){
                 boost::serialization::throw_exception(
   >>>>         archive_exception(archive_exception::unregistered_cast)
                 );
             }

   Note if a save via the derived ptr, then it works.

o If I explicitly register this relationship, (see code below)
  Then I get past the first exception only to get an assert.

             // since true_type is valid, and this only gets made if the
             // pointer oserializer object has been created, this should never
             // fail
             const basic_pointer_oserializer * bpos
                 = archive_pointer_oserializer<Archive>::find(* true_type);
 >>>     assert(NULL != bpos);
             if(NULL == bpos)
                 boost::serialization::throw_exception(
                     archive_exception(archive_exception::unregistered_class)
                 );
             ar.save_pointer(vp, bpos);


o Initially I thought it was compiled without rtti on AIX.
  However this was not the case. Here is compile line.
   xlC -c   -DDEBUG -qcpluscmt -qNOOPTimize -qnoinline -g
            -qfullpath
            -qfuncsect
            -qeh
            -qrtti
            -qtemplatedepth=700
            -I"../SCRATCH/src" -I"/s1a/emos_esuite/emos_data/sms/boost_1_39_0" 
            -o "bin/vacpp/debug/src/TestSerialisation.o"
            "src/TestSerialisation.cpp"

 This is show stopper bug that I must get fixed.
 Are there any more things I can try to debug this ?

 Any help would be much appreciated.

//=============== the example ========================
#include <fstream>
#include <assert.h>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/string.hpp>        
#include <boost/serialization/export.hpp>    

class RepeatBase {
public:
   RepeatBase() {}
   virtual ~RepeatBase() {}
   virtual const std::string& name() const = 0;
private:
   friend class boost::serialization::access;
   template<class Archive>
   void serialize(Archive & ar, const unsigned int version) {}
};

class RepeatDerived : public RepeatBase {
public:
   RepeatDerived( const std::string& name) : name_(name) {}
   RepeatDerived()  {}
   virtual const std::string& name() const { return name_;}
private:
   std::string  name_;
   friend class boost::serialization::access;
   template<class Archive>
   void serialize(Archive & ar, const unsigned int version) {
          // save/load base class information
          ar & boost::serialization::base_object<RepeatBase>(*this);
          ar & name_;
   }
};

class Defs {
public:
   Defs(const std::string& f) : fileName_(f), repeat_(new RepeatDerived(f)) {}
   Defs() : repeat_(NULL) {}
   ~Defs() { delete repeat_;}
   bool operator==(const Defs& rhs) const { return fileName_ == rhs.fileName_;}

   const std::string& fileName() const { return fileName_;}

private:
   std::string fileName_;
   RepeatBase* repeat_;

   friend class boost::serialization::access;
   template<class Archive>
   void serialize(Archive & ar, const unsigned int /*version*/)  {
        ar & fileName_;
        ar & repeat_;
   }
};

BOOST_CLASS_EXPORT(RepeatBase);
BOOST_CLASS_EXPORT(RepeatDerived);
BOOST_SERIALIZATION_ASSUME_ABSTRACT(RepeatBase)

int main()
{
   // With this explicit register, we get a bit further, but still crashes on AIX
   // boost::serialization::void_cast_register<RepeatDerived, RepeatBase>(0,0);

   const Defs saveDefs("saveFile.txt");
   {
           // Save the defs file
           std::ofstream ofs( saveDefs.fileName().c_str() );
           boost::archive::text_oarchive oa( ofs );
           oa << saveDefs;                                             // BOMBS out here on AIX V10.1
   }
   {
         // Restore the defs file
         Defs loadDefs;
         std::ifstream ifs(saveDefs.fileName().c_str());
         boost::archive::text_iarchive ia(ifs);
         ia >> loadDefs;

         assert( saveDefs == loadDefs );
   }
   return 0;
}
//===============================================
  Best regards,
Ta,
   Avi