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
This commit is contained in:
Jason Merrill 2000-01-31 21:27:42 +00:00 committed by Jason Merrill
parent 5e19c05390
commit ab044c7412
3 changed files with 28 additions and 29 deletions

View File

@ -1,3 +1,8 @@
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>
* cp-tree.h (BINFO_VIRTUALS): Tweak documentation.

View File

@ -31,34 +31,6 @@
#include "tinfo.h"
#include "new" // for placement new
namespace
{
// ADDR is a pointer to an object. Convert it to a pointer to a base,
// using OFFSET.
inline void*
convert_to_base (void *addr, bool is_virtual, USItype offset)
{
if (!addr)
return NULL;
if (!is_virtual)
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
// to the virtual base.
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.
@ -70,6 +42,26 @@ std::type_info::
#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100
// original (old) abi
namespace
{
// ADDR is a pointer to an object. Convert it to a pointer to a base,
// using OFFSET.
inline void*
convert_to_base (void *addr, bool is_virtual, myint32 offset)
{
if (!addr)
return NULL;
if (!is_virtual)
return (char *) addr + offset;
// Under the old ABI, the offset gives us the address of a pointer
// to the virtual base.
return *((void **) ((char *) addr + offset));
}
}
// We can't rely on common symbols being shared between shared objects.
bool std::type_info::
operator== (const std::type_info& arg) const

View File

@ -171,6 +171,8 @@ public:
// type_info for a general class.
// Kludge, kludge, kludge.
#include "tconfig.h"
#if BITS_PER_UNIT == 8
typedef int myint32 __attribute__ ((mode (SI)));
#elif BITS_PER_UNIT == 16
@ -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
// -3: src_type is a multiple public non-virtual base of dst_type
}; // namespace std
} // namespace std
#endif