Thursday agenda

Jim Dehnert dehnert at baalbek.engr.sgi.com
Wed Oct 11 00:29:28 UTC 2000


For your preparation purposes, note that the agenda will include:


  2) G-4:  Thread-safe data initialization.  See 3.3.2.  Christophe
     had some ideas for optimization here.  I've updated 3.3.2 a bit,
     but the discussion of potential changes for Christophe's
     concerns is in the open issues page for issue G-4.  Christophe,
     can you take a look at it?

and this subject:

> From: Martin von Loewis <loewis at informatik.hu-berlin.de>
> 
> I have concerns that the current RTTI spec does not allow
> implementations to interoperate. The core of the issue is whether
> there should be a vtable pointer in class type_info.
> 
> The current (modified) draft specifies no virtual functions. I believe
> it is not possible to implement this specification: Inside
> __dynamic_cast, you need to know whether the __class_type_info is a
> __si_class_type_info or a __vmi_class_type_info. Likewise, in
> exception handling, you need to know whether the types are
> __pointer_type_info or not, and whether the __pointee field is a
> __class_type_info.
> 
> In extension of what is specified, the current GCC adds a number of
> virtual functions to the derived type_info classes, such as
> __is_function_p, __do_catch, __pointer_catch, and so on. However,
> unless specified in the ABI, other compilers won't fill the vtable
> pointers of the derived classes to point to gcc's vtables. With the
> current spec, the other compilers won't even allocate a vtable field.
> 
> Furthermore, there is currently no guarantee that there is only a
> single vtable per type_info class if objects from multiple compilers
> are mixed. For example, in gcc, these vtables live in libgcc.a, which
> is incorporated into any shared library. If a different compiler uses
> the same strategy, you'd end up with two definitions for, say, the
> __vmi_class_type_info vtable - and they would have a different layout.
> 
> I see two solutions:
> a) specify exactly which virtual functions must be provided to
>    implement the routines mandated by the ABI (i.e. dynamic cast
>    and EH matching)
> b) provide some basic identification mechanism on top of which
>    these ABI routines can be implemented. 
> 
> I favour alternative b), and propose the following definitions
> 
>   namespace std{
>      class type_info {
>       private:
>         const char *__type_name;
>         virtual ~type_info(); /* to give it a vtable */
>      };
>   }
> 
>    namespace abi{
>      enum ti_kind{ /* in the order of exposition in 2.9.5.3 */
>        /* type_info is abstract */
>        fundamental_type_kind = 0,
>        array_type_kind = 1,
>        function_type_kind = 2, 
>        enum_type_kind = 3,
>        /* __class_type_info is abstract */
>        si_class_type_kind = 4,
>        vmi_class_type_kind = 5,
>        /* __pbase_type_info is abstract */
>        pointer_type_kind = 6,
>        pointer_to_member_type_kind = 7,
>      }
> 
>      class type_info: std::type_info {
>        virtual ti_kind kind();
>      };
>    }
> 
> All other type info classes inherit from abi::type_info. The leaf
> types override the kind() function, so the implementation must provide
> a suitable vtable for them.
> 
> Disclaimer: I haven't actually verified that __dynamic_cast can be
> implement on top of these informations. If required, I'll try to
> produce a sample implementation in gcc.
> 
> Regards,
> Martin
> 
-	    Jim Dehnert		dehnert at sgi.com
				(650)933-4272




More information about the cxx-abi-dev mailing list