Commit ab044c74 by Jason Merrill Committed by Jason Merrill

tinfo.h (old abi): #include "tconfig.h".

        * tinfo.h (old abi): #include "tconfig.h".
        * tinfo.cc (convert_to_base): Move into old abi section.

From-SVN: r31725
parent 5e19c053
2000-01-31 Jason Merrill <jason@casey.cygnus.com>
* tinfo.h (old abi): #include "tconfig.h".
* tinfo.cc (convert_to_base): Move into old abi section.
2000-01-31 Mark Mitchell <mark@codesourcery.com> 2000-01-31 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (BINFO_VIRTUALS): Tweak documentation. * cp-tree.h (BINFO_VIRTUALS): Tweak documentation.
......
...@@ -31,12 +31,23 @@ ...@@ -31,12 +31,23 @@
#include "tinfo.h" #include "tinfo.h"
#include "new" // for placement new #include "new" // for placement new
// This file contains the minimal working set necessary to link with code
// that uses virtual functions and -frtti but does not actually use RTTI
// functionality.
std::type_info::
~type_info ()
{ }
#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100
// original (old) abi
namespace namespace
{ {
// ADDR is a pointer to an object. Convert it to a pointer to a base, // ADDR is a pointer to an object. Convert it to a pointer to a base,
// using OFFSET. // using OFFSET.
inline void* inline void*
convert_to_base (void *addr, bool is_virtual, USItype offset) convert_to_base (void *addr, bool is_virtual, myint32 offset)
{ {
if (!addr) if (!addr)
return NULL; return NULL;
...@@ -44,32 +55,13 @@ convert_to_base (void *addr, bool is_virtual, USItype offset) ...@@ -44,32 +55,13 @@ convert_to_base (void *addr, bool is_virtual, USItype offset)
if (!is_virtual) if (!is_virtual)
return (char *) addr + offset; return (char *) addr + offset;
#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100
// Under the new ABI, the offset gives us an index into the vtable,
// which contains an offset to the virtual base. The vptr is always
// the first thing in the object.
std::ptrdiff_t *vtable = *((std::ptrdiff_t **) addr);
return ((char *) addr) + vtable[offset];
#else
// Under the old ABI, the offset gives us the address of a pointer // Under the old ABI, the offset gives us the address of a pointer
// to the virtual base. // to the virtual base.
return *((void **) ((char *) addr + offset)); return *((void **) ((char *) addr + offset));
#endif
} }
} }
// This file contains the minimal working set necessary to link with code
// that uses virtual functions and -frtti but does not actually use RTTI
// functionality.
std::type_info::
~type_info ()
{ }
#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100
// original (old) abi
// We can't rely on common symbols being shared between shared objects. // We can't rely on common symbols being shared between shared objects.
bool std::type_info:: bool std::type_info::
operator== (const std::type_info& arg) const operator== (const std::type_info& arg) const
......
...@@ -171,6 +171,8 @@ public: ...@@ -171,6 +171,8 @@ public:
// type_info for a general class. // type_info for a general class.
// Kludge, kludge, kludge. // Kludge, kludge, kludge.
#include "tconfig.h"
#if BITS_PER_UNIT == 8 #if BITS_PER_UNIT == 8
typedef int myint32 __attribute__ ((mode (SI))); typedef int myint32 __attribute__ ((mode (SI)));
#elif BITS_PER_UNIT == 16 #elif BITS_PER_UNIT == 16
...@@ -428,6 +430,6 @@ void *__dynamic_cast (const void *src_ptr, // object started from ...@@ -428,6 +430,6 @@ void *__dynamic_cast (const void *src_ptr, // object started from
// -2: src_type is not a public base of dst_type // -2: src_type is not a public base of dst_type
// -3: src_type is a multiple public non-virtual base of dst_type // -3: src_type is a multiple public non-virtual base of dst_type
}; // namespace std } // namespace std
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment