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:
parent
5e19c05390
commit
ab044c7412
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user