OSDN Git Service

* libsupc++/cxxabi-internal.h: Remove, to be replaced by...
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 May 2007 06:50:32 +0000 (06:50 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 8 May 2007 06:50:32 +0000 (06:50 +0000)
        * libsupc++/cxxabi-forced.h: ...this new file.
        * include/ext/vstring.tcc: Include cxxabi-forced.h instead.
        * include/bits/istream.tcc: Likewise.
        * include/bits/ostream.tcc: Likewise.
        * include/bits/basic_string.tcc: Likewise.
        * include/bits/ostream_insert.h: Likewise.
        * include/bits/fstream.tcc: Likewise.
        * include/std/bitset: Likewise.
        * libsupc++/cxxabi.h: Restore previous contents.
        * Makefile.am (headers): Add cxxabi-forced.h.
        * Makefile.in: Regenerate.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124539 138bc75d-0d04-0410-961f-82ee72b054a4

14 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
libstdc++-v3/include/bits/basic_string.tcc
libstdc++-v3/include/bits/fstream.tcc
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/include/bits/ostream.tcc
libstdc++-v3/include/bits/ostream_insert.h
libstdc++-v3/include/ext/vstring.tcc
libstdc++-v3/include/std/bitset
libstdc++-v3/libsupc++/Makefile.am
libstdc++-v3/libsupc++/Makefile.in
libstdc++-v3/libsupc++/cxxabi-forced.h [new file with mode: 0644]
libstdc++-v3/libsupc++/cxxabi-internal.h [deleted file]
libstdc++-v3/libsupc++/cxxabi.h

index 9c0b8b7..d5bb6af 100644 (file)
@@ -1,3 +1,18 @@
+2007-05-08  Jason Merrill  <jason@redhat.com>
+
+       * libsupc++/cxxabi-internal.h: Remove, to be replaced by...
+       * libsupc++/cxxabi-forced.h: ...this new file.
+       * include/ext/vstring.tcc: Include cxxabi-forced.h instead.
+       * include/bits/istream.tcc: Likewise.
+       * include/bits/ostream.tcc: Likewise.
+       * include/bits/basic_string.tcc: Likewise.
+       * include/bits/ostream_insert.h: Likewise.
+       * include/bits/fstream.tcc: Likewise.
+       * include/std/bitset: Likewise.
+       * libsupc++/cxxabi.h: Restore previous contents.
+       * Makefile.am (headers): Add cxxabi-forced.h.
+       * Makefile.in: Regenerate.
+
 2007-05-08  Benjamin Kosnik  <bkoz@redhat.com>
 
        * testsuite/util/testsuite_abi.cc: Add CXXABI_1.3.2.
index 6e049f0..4613f4e 100644 (file)
@@ -1,6 +1,6 @@
 ## Linker script for GNU namespace versioning.
 ##
-## Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+## Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
 ##
 ## This file is part of the libstdc++ version 3 distribution.
 ##
index 4c68293..062b02b 100644 (file)
@@ -46,7 +46,7 @@
 
 #pragma GCC system_header
 
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
index f9b84bf..2653d6f 100644 (file)
@@ -1,6 +1,7 @@
 // File based streams -*- C++ -*-
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+// 2007
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -42,7 +43,7 @@
 
 #pragma GCC system_header
 
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
index e6b18cd..2e65b48 100644 (file)
@@ -43,7 +43,7 @@
 
 #pragma GCC system_header
 
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
index c8bb8f6..06facc0 100644 (file)
@@ -43,7 +43,7 @@
 
 #pragma GCC system_header
 
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
index 5815de9..5f63263 100644 (file)
@@ -38,7 +38,7 @@
 #pragma GCC system_header
 
 #include <iosfwd>
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(std)
 
index 7f3478a..8d5b1b5 100644 (file)
@@ -38,7 +38,7 @@
 
 #pragma GCC system_header
 
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
 
index 09f05e1..61cad28 100644 (file)
@@ -56,7 +56,7 @@
 #include <bits/functexcept.h>   // For invalid_argument, out_of_range,
                                 // overflow_error
 #include <iosfwd>
-#include <cxxabi-internal.h>
+#include <cxxabi-forced.h>
 
 #define _GLIBCXX_BITSET_BITS_PER_WORD  (__CHAR_BIT__ * sizeof(unsigned long))
 #define _GLIBCXX_BITSET_WORDS(__n) \
index 7bc48b7..366efa2 100644 (file)
@@ -1,6 +1,6 @@
 ## Makefile for the GNU C++ Support library.
 ##
-## Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
+## Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007
 ## Free Software Foundation, Inc.
 ##
 ## Process this file with automake to produce Makefile.in.
@@ -33,7 +33,7 @@ noinst_LTLIBRARIES = libsupc++convenience.la
 
 
 headers = \
-       exception new typeinfo cxxabi.h exception_defines.h
+       exception new typeinfo cxxabi.h cxxabi-forced.h exception_defines.h
 
 if GLIBCXX_HOSTED
   c_sources = \
index 6863127..85ae200 100644 (file)
@@ -335,7 +335,7 @@ toolexeclib_LTLIBRARIES = libsupc++.la
 # 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a
 noinst_LTLIBRARIES = libsupc++convenience.la
 headers = \
-       exception new typeinfo cxxabi.h exception_defines.h
+       exception new typeinfo cxxabi.h cxxabi-forced.h exception_defines.h
 
 @GLIBCXX_HOSTED_TRUE@c_sources = \
 @GLIBCXX_HOSTED_TRUE@  cp-demangle.c 
diff --git a/libstdc++-v3/libsupc++/cxxabi-forced.h b/libstdc++-v3/libsupc++/cxxabi-forced.h
new file mode 100644 (file)
index 0000000..523ccba
--- /dev/null
@@ -0,0 +1,51 @@
+// cxxabi.h subset for inclusion by other library headers -*- C++ -*-
+  
+// Copyright (C) 2007 Free Software Foundation, Inc.
+//
+// This file is part of GCC.
+//
+// GCC is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+// 
+// GCC is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with GCC; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+// As a special exception, you may use this file as part of a free software
+// library without restriction.  Specifically, if other files instantiate
+// templates or use macros or inline functions from this file, or you compile
+// this file and link it with other files to produce an executable, this
+// file does not by itself cause the resulting executable to be covered by
+// the GNU General Public License.  This exception does not however
+// invalidate any other reasons why the executable file might be covered by
+// the GNU General Public License.
+
+#ifndef _CXXABI_FORCED_H
+#define _CXXABI_FORCED_H 1
+
+#pragma GCC visibility push(default)
+
+#ifdef __cplusplus
+namespace __cxxabiv1
+{  
+  // A magic placeholder class that can be caught by reference
+  // to recognize forced unwinding.
+  class __forced_unwind
+  {
+    virtual ~__forced_unwind() throw();
+    virtual void __pure_dummy() = 0; // prevent catch by value
+  };
+}
+#endif // __cplusplus
+
+#pragma GCC visibility pop
+
+#endif // __CXXABI_FORCED_H 
diff --git a/libstdc++-v3/libsupc++/cxxabi-internal.h b/libstdc++-v3/libsupc++/cxxabi-internal.h
deleted file mode 100644 (file)
index dbe2e32..0000000
+++ /dev/null
@@ -1,555 +0,0 @@
-// new abi support -*- C++ -*-
-  
-// Copyright (C) 2000, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
-//
-// This file is part of GCC.
-//
-// GCC is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2, or (at your option)
-// any later version.
-// 
-// GCC is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with GCC; see the file COPYING.  If not, write to
-// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-// Boston, MA 02110-1301, USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction.  Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License.  This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
-/* This file declares the new abi entry points into the runtime. It is not
-   normally necessary for user programs to include this header, or use the
-   entry points directly. However, this header is available should that be
-   needed.
-   
-   Some of the entry points are intended for both C and C++, thus this header
-   is includable from both C and C++. Though the C++ specific parts are not
-   available in C, naturally enough.  */
-
-/** @file cxxabi.h
- *  The header provides an interface to the C++ ABI.
- */
-
-#ifndef _CXXABI_INTERNAL_H
-#define _CXXABI_INTERNAL_H 1
-
-#pragma GCC visibility push(default)
-
-#include <stddef.h>
-#include <bits/cxxabi_tweaks.h>
-#ifdef __cplusplus
-namespace __cxxabiv1
-{  
-  extern "C" 
-  {
-#endif
-
-  typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
-
-  // Allocate array.
-  void* 
-  __cxa_vec_new(size_t __element_count, size_t __element_size, 
-               size_t __padding_size, __cxa_cdtor_type constructor,
-               __cxa_cdtor_type destructor);
-
-  void*
-  __cxa_vec_new2(size_t __element_count, size_t __element_size,
-                size_t __padding_size, __cxa_cdtor_type constructor,
-                __cxa_cdtor_type destructor, void *(*__alloc) (size_t), 
-                void (*__dealloc) (void*));
-
-  void*
-  __cxa_vec_new3(size_t __element_count, size_t __element_size,
-                size_t __padding_size, __cxa_cdtor_type constructor,
-                __cxa_cdtor_type destructor, void *(*__alloc) (size_t), 
-                void (*__dealloc) (void*, size_t));
-
-  // Construct array.
-  __cxa_vec_ctor_return_type
-  __cxa_vec_ctor(void* __array_address, size_t __element_count,
-                size_t __element_size, __cxa_cdtor_type constructor,
-                __cxa_cdtor_type destructor);
-
-  __cxa_vec_ctor_return_type
-  __cxa_vec_cctor(void* dest_array, void* src_array, size_t element_count, 
-                 size_t element_size, 
-                 __cxa_cdtor_return_type (*constructor) (void*, void*), 
-                 __cxa_cdtor_type destructor);
-  // Destruct array.
-  void 
-  __cxa_vec_dtor(void* __array_address, size_t __element_count,
-                size_t __element_size, __cxa_cdtor_type destructor);
-  
-  void 
-  __cxa_vec_cleanup(void* __array_address, size_t __element_count,
-                   size_t __element_size, __cxa_cdtor_type destructor);
-  
-  // Destruct and release array.
-  void 
-  __cxa_vec_delete(void* __array_address, size_t __element_size,
-                  size_t __padding_size, __cxa_cdtor_type destructor);
-
-  void 
-  __cxa_vec_delete2(void* __array_address, size_t __element_size,
-                   size_t __padding_size, __cxa_cdtor_type destructor,
-                   void (*__dealloc) (void*));
-                  
-  void 
-  __cxa_vec_delete3(void* __array_address, size_t __element_size,
-                   size_t __padding_size, __cxa_cdtor_type destructor,
-                   void (*__dealloc) (void*, size_t));
-
-  int 
-  __cxa_guard_acquire(__guard*);
-
-  void 
-  __cxa_guard_release(__guard*);
-
-  void 
-  __cxa_guard_abort(__guard*);
-
-  // Pure virtual functions.
-  void
-  __cxa_pure_virtual(void);
-
-  // Exception handling.
-  void
-  __cxa_bad_cast();
-
-  void
-  __cxa_bad_typeid();
-
-  // DSO destruction.
-  int
-  __cxa_atexit(void (*)(void*), void*, void*)
-#ifdef __cplusplus
-    throw ()
-#endif
-    ;
-
-  int
-  __cxa_finalize(void*);
-
-  // Demangling routines. 
-  char*
-  __cxa_demangle(const char* __mangled_name, char* __output_buffer,
-                size_t* __length, int* __status);
-#ifdef __cplusplus
-  }
-} // namespace __cxxabiv1
-#endif
-
-#ifdef __cplusplus
-
-#include <typeinfo>
-
-namespace __cxxabiv1
-{
-  // Type information for int, float etc.
-  class __fundamental_type_info : public std::type_info
-  {
-  public:
-    explicit 
-    __fundamental_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual 
-    ~__fundamental_type_info();
-  };
-
-  // Type information for array objects.
-  class __array_type_info : public std::type_info
-  {
-  public:
-    explicit 
-    __array_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual 
-    ~__array_type_info();
-  };
-
-  // Type information for functions (both member and non-member).
-  class __function_type_info : public std::type_info
-  {
-  public:
-    explicit 
-    __function_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual 
-    ~__function_type_info();
-
-  protected:
-    // Implementation defined member function.
-    virtual bool 
-    __is_function_p() const;
-  };
-
-  // Type information for enumerations.
-  class __enum_type_info : public std::type_info
-  {
-  public:
-    explicit 
-    __enum_type_info(const char* __n) : std::type_info(__n) { }
-
-    virtual 
-    ~__enum_type_info();
-  };
-
-  // Common type information for simple pointers and pointers to member.
-  class __pbase_type_info : public std::type_info
-  {
-  public:
-    unsigned int               __flags; // Qualification of the target object.
-    const std::type_info*      __pointee; // Type of pointed to object.
-
-    explicit 
-    __pbase_type_info(const char* __n, int __quals, 
-                     const std::type_info* __type)
-    : std::type_info(__n), __flags(__quals), __pointee(__type)
-    { }
-    
-    virtual 
-    ~__pbase_type_info();
-
-    // Implementation defined type.
-    enum __masks 
-      {
-       __const_mask = 0x1,
-       __volatile_mask = 0x2,
-       __restrict_mask = 0x4,
-       __incomplete_mask = 0x8,
-       __incomplete_class_mask = 0x10
-      };
-
-  protected:
-    __pbase_type_info(const __pbase_type_info&);
-
-    __pbase_type_info&
-    operator=(const __pbase_type_info&);
-
-    // Implementation defined member functions.
-    virtual bool 
-    __do_catch(const std::type_info* __thr_type, void** __thr_obj, 
-              unsigned int __outer) const;
-
-    inline virtual bool 
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
-                   unsigned __outer) const;
-  };
-
-  // Type information for simple pointers.
-  class __pointer_type_info : public __pbase_type_info
-  {
-  public:
-    explicit 
-    __pointer_type_info(const char* __n, int __quals, 
-                       const std::type_info* __type)
-    : __pbase_type_info (__n, __quals, __type) { }
-
-
-    virtual 
-    ~__pointer_type_info();
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool 
-    __is_pointer_p() const;
-
-    virtual bool 
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj, 
-                   unsigned __outer) const;
-  };
-
-  class __class_type_info;
-
-  // Type information for a pointer to member variable.
-  class __pointer_to_member_type_info : public __pbase_type_info
-  {
-  public:
-    __class_type_info* __context;   // Class of the member.
-
-    explicit 
-    __pointer_to_member_type_info(const char* __n, int __quals,
-                                 const std::type_info* __type, 
-                                 __class_type_info* __klass)
-    : __pbase_type_info(__n, __quals, __type), __context(__klass) { }
-
-    virtual 
-    ~__pointer_to_member_type_info();
-
-  protected:
-    __pointer_to_member_type_info(const __pointer_to_member_type_info&);
-
-    __pointer_to_member_type_info&
-    operator=(const __pointer_to_member_type_info&);
-
-    // Implementation defined member function.
-    virtual bool 
-    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
-                   unsigned __outer) const;
-  };
-
-  // Helper class for __vmi_class_type.
-  class __base_class_type_info
-  {
-  public:
-    const __class_type_info*   __base_type;  // Base class type.
-    long                       __offset_flags;  // Offset and info.
-
-    enum __offset_flags_masks 
-      {
-       __virtual_mask = 0x1,
-       __public_mask = 0x2,
-       __hwm_bit = 2,
-       __offset_shift = 8          // Bits to shift offset.
-      };
-  
-    // Implementation defined member functions.
-    bool 
-    __is_virtual_p() const
-    { return __offset_flags & __virtual_mask; }
-
-    bool 
-    __is_public_p() const
-    { return __offset_flags & __public_mask; }
-
-    ptrdiff_t 
-    __offset() const
-    { 
-      // This shift, being of a signed type, is implementation
-      // defined. GCC implements such shifts as arithmetic, which is
-      // what we want.
-      return static_cast<ptrdiff_t>(__offset_flags) >> __offset_shift;
-    }
-  };
-
-  // Type information for a class.
-  class __class_type_info : public std::type_info
-  {
-  public:
-    explicit 
-    __class_type_info (const char *__n) : type_info(__n) { }
-
-    virtual 
-    ~__class_type_info ();
-
-    // Implementation defined types.
-    // The type sub_kind tells us about how a base object is contained
-    // within a derived object. We often do this lazily, hence the
-    // UNKNOWN value. At other times we may use NOT_CONTAINED to mean
-    // not publicly contained.
-    enum __sub_kind
-      {
-       // We have no idea.
-       __unknown = 0, 
-
-       // Not contained within us (in some circumstances this might
-       // mean not contained publicly)
-       __not_contained, 
-
-       // Contained ambiguously.
-       __contained_ambig, 
-    
-       // Via a virtual path.
-       __contained_virtual_mask = __base_class_type_info::__virtual_mask, 
-
-       // Via a public path.
-       __contained_public_mask = __base_class_type_info::__public_mask,   
-
-       // Contained within us.
-       __contained_mask = 1 << __base_class_type_info::__hwm_bit,
-    
-       __contained_private = __contained_mask,
-       __contained_public = __contained_mask | __contained_public_mask
-      };
-
-    struct __upcast_result;
-    struct __dyncast_result;
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool 
-    __do_upcast(const __class_type_info* __dst_type, void**__obj_ptr) const;
-
-    virtual bool 
-    __do_catch(const type_info* __thr_type, void** __thr_obj, 
-              unsigned __outer) const;
-
-  public:
-    // Helper for upcast. See if DST is us, or one of our bases. 
-    // Return false if not found, true if found. 
-    virtual bool 
-    __do_upcast(const __class_type_info* __dst, const void* __obj,
-               __upcast_result& __restrict __result) const;
-
-    // Indicate whether SRC_PTR of type SRC_TYPE is contained publicly
-    // within OBJ_PTR. OBJ_PTR points to a base object of our type,
-    // which is the destination type. SRC2DST indicates how SRC
-    // objects might be contained within this type.  If SRC_PTR is one
-    // of our SRC_TYPE bases, indicate the virtuality. Returns
-    // not_contained for non containment or private containment.
-    inline __sub_kind 
-    __find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-                     const __class_type_info* __src_type, 
-                     const void* __src_ptr) const;
-
-    // Helper for dynamic cast. ACCESS_PATH gives the access from the
-    // most derived object to this base. DST_TYPE indicates the
-    // desired type we want. OBJ_PTR points to a base of our type
-    // within the complete object. SRC_TYPE indicates the static type
-    // started from and SRC_PTR points to that base within the most
-    // derived object. Fill in RESULT with what we find. Return true
-    // if we have located an ambiguous match.
-    virtual bool 
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-                const __class_type_info* __dst_type, const void* __obj_ptr, 
-                const __class_type_info* __src_type, const void* __src_ptr, 
-                __dyncast_result& __result) const;
-    
-    // Helper for find_public_subobj. SRC2DST indicates how SRC_TYPE
-    // bases are inherited by the type started from -- which is not
-    // necessarily the current type. The current type will be a base
-    // of the destination type.  OBJ_PTR points to the current base.
-    virtual __sub_kind 
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-                        const __class_type_info* __src_type,
-                        const void* __src_ptr) const;
-  };
-
-  // Type information for a class with a single non-virtual base.
-  class __si_class_type_info : public __class_type_info
-  {
-  public:
-    const __class_type_info* __base_type;
-
-    explicit 
-    __si_class_type_info(const char *__n, const __class_type_info *__base)
-    : __class_type_info(__n), __base_type(__base) { }
-
-    virtual 
-    ~__si_class_type_info();
-
-  protected:
-    __si_class_type_info(const __si_class_type_info&);
-
-    __si_class_type_info&
-    operator=(const __si_class_type_info&);
-
-    // Implementation defined member functions.
-    virtual bool 
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-                const __class_type_info* __dst_type, const void* __obj_ptr,
-                const __class_type_info* __src_type, const void* __src_ptr,
-                __dyncast_result& __result) const;
-
-    virtual __sub_kind 
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
-                        const __class_type_info* __src_type,
-                        const void* __sub_ptr) const;
-
-    virtual bool 
-    __do_upcast(const __class_type_info*__dst, const void*__obj,
-               __upcast_result& __restrict __result) const;
-  };
-
-  // Type information for a class with multiple and/or virtual bases.
-  class __vmi_class_type_info : public __class_type_info 
-  {
-  public:
-    unsigned int               __flags;  // Details about the class hierarchy.
-    unsigned int               __base_count;  // Number of direct bases.
-
-    // The array of bases uses the trailing array struct hack so this
-    // class is not constructable with a normal constructor. It is
-    // internally generated by the compiler.
-    __base_class_type_info     __base_info[1];  // Array of bases.
-
-    explicit 
-    __vmi_class_type_info(const char* __n, int ___flags)
-    : __class_type_info(__n), __flags(___flags), __base_count(0) { }
-
-    virtual 
-    ~__vmi_class_type_info();
-
-    // Implementation defined types.
-    enum __flags_masks 
-      {
-       __non_diamond_repeat_mask = 0x1, // Distinct instance of repeated base.
-       __diamond_shaped_mask = 0x2, // Diamond shaped multiple inheritance.
-       __flags_unknown_mask = 0x10
-      };
-
-  protected:
-    // Implementation defined member functions.
-    virtual bool 
-    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
-                const __class_type_info* __dst_type, const void* __obj_ptr,
-                const __class_type_info* __src_type, const void* __src_ptr,
-                __dyncast_result& __result) const;
-
-    virtual __sub_kind 
-    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr, 
-                        const __class_type_info* __src_type,
-                        const void* __src_ptr) const;
-    
-    virtual bool 
-    __do_upcast(const __class_type_info* __dst, const void* __obj,
-               __upcast_result& __restrict __result) const;
-  };
-
-  // Dynamic cast runtime.
-  // src2dst has the following possible values
-  //  >-1: src_type is a unique public non-virtual base of dst_type
-  //       dst_ptr + src2dst == src_ptr
-  //   -1: unspecified relationship
-  //   -2: src_type is not a public base of dst_type
-  //   -3: src_type is a multiple public non-virtual base of dst_type
-  extern "C" void*
-  __dynamic_cast(const void* __src_ptr, // Starting object.
-                const __class_type_info* __src_type, // Static type of object.
-                const __class_type_info* __dst_type, // Desired target type.
-                ptrdiff_t __src2dst); // How src and dst are related.
-
-
-  // Returns the type_info for the currently handled exception [15.3/8], or
-  // null if there is none.
-  extern "C" std::type_info*
-  __cxa_current_exception_type();
-
-  // A magic placeholder class that can be caught by reference
-  // to recognize forced unwinding.
-  class __forced_unwind
-  {
-    virtual ~__forced_unwind() throw();
-    virtual void __pure() = 0; // prevent catch by value
-  };
-
-  // A magic placeholder class that can be caught by reference
-  // to recognize foreign exceptions.
-  class __foreign_exception
-  {
-    virtual ~__foreign_exception() throw();
-    virtual void __pure_virtual() = 0; // prevent catch by value
-  };
-
-} // namespace __cxxabiv1
-
-#endif // __cplusplus
-
-#pragma GCC visibility pop
-
-#endif // __CXXABI_INTERNAL_H 
index 184eff6..7f03078 100644 (file)
@@ -1,6 +1,6 @@
 // new abi support -*- C++ -*-
   
-// Copyright (C) 2000, 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
 //
 // This file is part of GCC.
 //
 
 #pragma GCC visibility push(default)
 
-#include <cxxabi-internal.h>
+#include <stddef.h>
+#include <bits/cxxabi_tweaks.h>
+#include <cxxabi-forced.h>
  
 #ifdef __cplusplus
+namespace __cxxabiv1
+{  
+  extern "C" 
+  {
+#endif
+
+  typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
+
+  // Allocate array.
+  void* 
+  __cxa_vec_new(size_t __element_count, size_t __element_size, 
+               size_t __padding_size, __cxa_cdtor_type constructor,
+               __cxa_cdtor_type destructor);
+
+  void*
+  __cxa_vec_new2(size_t __element_count, size_t __element_size,
+                size_t __padding_size, __cxa_cdtor_type constructor,
+                __cxa_cdtor_type destructor, void *(*__alloc) (size_t), 
+                void (*__dealloc) (void*));
+
+  void*
+  __cxa_vec_new3(size_t __element_count, size_t __element_size,
+                size_t __padding_size, __cxa_cdtor_type constructor,
+                __cxa_cdtor_type destructor, void *(*__alloc) (size_t), 
+                void (*__dealloc) (void*, size_t));
+
+  // Construct array.
+  __cxa_vec_ctor_return_type
+  __cxa_vec_ctor(void* __array_address, size_t __element_count,
+                size_t __element_size, __cxa_cdtor_type constructor,
+                __cxa_cdtor_type destructor);
+
+  __cxa_vec_ctor_return_type
+  __cxa_vec_cctor(void* dest_array, void* src_array, size_t element_count, 
+                 size_t element_size, 
+                 __cxa_cdtor_return_type (*constructor) (void*, void*), 
+                 __cxa_cdtor_type destructor);
+  // Destruct array.
+  void 
+  __cxa_vec_dtor(void* __array_address, size_t __element_count,
+                size_t __element_size, __cxa_cdtor_type destructor);
+  
+  void 
+  __cxa_vec_cleanup(void* __array_address, size_t __element_count,
+                   size_t __element_size, __cxa_cdtor_type destructor);
+  
+  // Destruct and release array.
+  void 
+  __cxa_vec_delete(void* __array_address, size_t __element_size,
+                  size_t __padding_size, __cxa_cdtor_type destructor);
+
+  void 
+  __cxa_vec_delete2(void* __array_address, size_t __element_size,
+                   size_t __padding_size, __cxa_cdtor_type destructor,
+                   void (*__dealloc) (void*));
+                  
+  void 
+  __cxa_vec_delete3(void* __array_address, size_t __element_size,
+                   size_t __padding_size, __cxa_cdtor_type destructor,
+                   void (*__dealloc) (void*, size_t));
+
+  int 
+  __cxa_guard_acquire(__guard*);
+
+  void 
+  __cxa_guard_release(__guard*);
+
+  void 
+  __cxa_guard_abort(__guard*);
+
+  // Pure virtual functions.
+  void
+  __cxa_pure_virtual(void);
+
+  // Exception handling.
+  void
+  __cxa_bad_cast();
+
+  void
+  __cxa_bad_typeid();
+
+  // DSO destruction.
+  int
+  __cxa_atexit(void (*)(void*), void*, void*)
+#ifdef __cplusplus
+    throw ()
+#endif
+    ;
+
+  int
+  __cxa_finalize(void*);
+
+  // Demangling routines. 
+  char*
+  __cxa_demangle(const char* __mangled_name, char* __output_buffer,
+                size_t* __length, int* __status);
+#ifdef __cplusplus
+  }
+} // namespace __cxxabiv1
+#endif
+
+#ifdef __cplusplus
+
+#include <typeinfo>
+
+namespace __cxxabiv1
+{
+  // Type information for int, float etc.
+  class __fundamental_type_info : public std::type_info
+  {
+  public:
+    explicit 
+    __fundamental_type_info(const char* __n) : std::type_info(__n) { }
+
+    virtual 
+    ~__fundamental_type_info();
+  };
+
+  // Type information for array objects.
+  class __array_type_info : public std::type_info
+  {
+  public:
+    explicit 
+    __array_type_info(const char* __n) : std::type_info(__n) { }
+
+    virtual 
+    ~__array_type_info();
+  };
+
+  // Type information for functions (both member and non-member).
+  class __function_type_info : public std::type_info
+  {
+  public:
+    explicit 
+    __function_type_info(const char* __n) : std::type_info(__n) { }
+
+    virtual 
+    ~__function_type_info();
+
+  protected:
+    // Implementation defined member function.
+    virtual bool 
+    __is_function_p() const;
+  };
+
+  // Type information for enumerations.
+  class __enum_type_info : public std::type_info
+  {
+  public:
+    explicit 
+    __enum_type_info(const char* __n) : std::type_info(__n) { }
+
+    virtual 
+    ~__enum_type_info();
+  };
+
+  // Common type information for simple pointers and pointers to member.
+  class __pbase_type_info : public std::type_info
+  {
+  public:
+    unsigned int               __flags; // Qualification of the target object.
+    const std::type_info*      __pointee; // Type of pointed to object.
+
+    explicit 
+    __pbase_type_info(const char* __n, int __quals, 
+                     const std::type_info* __type)
+    : std::type_info(__n), __flags(__quals), __pointee(__type)
+    { }
+    
+    virtual 
+    ~__pbase_type_info();
+
+    // Implementation defined type.
+    enum __masks 
+      {
+       __const_mask = 0x1,
+       __volatile_mask = 0x2,
+       __restrict_mask = 0x4,
+       __incomplete_mask = 0x8,
+       __incomplete_class_mask = 0x10
+      };
+
+  protected:
+    __pbase_type_info(const __pbase_type_info&);
+
+    __pbase_type_info&
+    operator=(const __pbase_type_info&);
+
+    // Implementation defined member functions.
+    virtual bool 
+    __do_catch(const std::type_info* __thr_type, void** __thr_obj, 
+              unsigned int __outer) const;
+
+    inline virtual bool 
+    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
+                   unsigned __outer) const;
+  };
+
+  // Type information for simple pointers.
+  class __pointer_type_info : public __pbase_type_info
+  {
+  public:
+    explicit 
+    __pointer_type_info(const char* __n, int __quals, 
+                       const std::type_info* __type)
+    : __pbase_type_info (__n, __quals, __type) { }
+
+
+    virtual 
+    ~__pointer_type_info();
+
+  protected:
+    // Implementation defined member functions.
+    virtual bool 
+    __is_pointer_p() const;
+
+    virtual bool 
+    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj, 
+                   unsigned __outer) const;
+  };
+
+  class __class_type_info;
+
+  // Type information for a pointer to member variable.
+  class __pointer_to_member_type_info : public __pbase_type_info
+  {
+  public:
+    __class_type_info* __context;   // Class of the member.
+
+    explicit 
+    __pointer_to_member_type_info(const char* __n, int __quals,
+                                 const std::type_info* __type, 
+                                 __class_type_info* __klass)
+    : __pbase_type_info(__n, __quals, __type), __context(__klass) { }
+
+    virtual 
+    ~__pointer_to_member_type_info();
+
+  protected:
+    __pointer_to_member_type_info(const __pointer_to_member_type_info&);
+
+    __pointer_to_member_type_info&
+    operator=(const __pointer_to_member_type_info&);
+
+    // Implementation defined member function.
+    virtual bool 
+    __pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
+                   unsigned __outer) const;
+  };
+
+  // Helper class for __vmi_class_type.
+  class __base_class_type_info
+  {
+  public:
+    const __class_type_info*   __base_type;  // Base class type.
+    long                       __offset_flags;  // Offset and info.
+
+    enum __offset_flags_masks 
+      {
+       __virtual_mask = 0x1,
+       __public_mask = 0x2,
+       __hwm_bit = 2,
+       __offset_shift = 8          // Bits to shift offset.
+      };
+  
+    // Implementation defined member functions.
+    bool 
+    __is_virtual_p() const
+    { return __offset_flags & __virtual_mask; }
+
+    bool 
+    __is_public_p() const
+    { return __offset_flags & __public_mask; }
+
+    ptrdiff_t 
+    __offset() const
+    { 
+      // This shift, being of a signed type, is implementation
+      // defined. GCC implements such shifts as arithmetic, which is
+      // what we want.
+      return static_cast<ptrdiff_t>(__offset_flags) >> __offset_shift;
+    }
+  };
+
+  // Type information for a class.
+  class __class_type_info : public std::type_info
+  {
+  public:
+    explicit 
+    __class_type_info (const char *__n) : type_info(__n) { }
+
+    virtual 
+    ~__class_type_info ();
+
+    // Implementation defined types.
+    // The type sub_kind tells us about how a base object is contained
+    // within a derived object. We often do this lazily, hence the
+    // UNKNOWN value. At other times we may use NOT_CONTAINED to mean
+    // not publicly contained.
+    enum __sub_kind
+      {
+       // We have no idea.
+       __unknown = 0, 
+
+       // Not contained within us (in some circumstances this might
+       // mean not contained publicly)
+       __not_contained, 
+
+       // Contained ambiguously.
+       __contained_ambig, 
+    
+       // Via a virtual path.
+       __contained_virtual_mask = __base_class_type_info::__virtual_mask, 
+
+       // Via a public path.
+       __contained_public_mask = __base_class_type_info::__public_mask,   
+
+       // Contained within us.
+       __contained_mask = 1 << __base_class_type_info::__hwm_bit,
+    
+       __contained_private = __contained_mask,
+       __contained_public = __contained_mask | __contained_public_mask
+      };
+
+    struct __upcast_result;
+    struct __dyncast_result;
+
+  protected:
+    // Implementation defined member functions.
+    virtual bool 
+    __do_upcast(const __class_type_info* __dst_type, void**__obj_ptr) const;
+
+    virtual bool 
+    __do_catch(const type_info* __thr_type, void** __thr_obj, 
+              unsigned __outer) const;
+
+  public:
+    // Helper for upcast. See if DST is us, or one of our bases. 
+    // Return false if not found, true if found. 
+    virtual bool 
+    __do_upcast(const __class_type_info* __dst, const void* __obj,
+               __upcast_result& __restrict __result) const;
+
+    // Indicate whether SRC_PTR of type SRC_TYPE is contained publicly
+    // within OBJ_PTR. OBJ_PTR points to a base object of our type,
+    // which is the destination type. SRC2DST indicates how SRC
+    // objects might be contained within this type.  If SRC_PTR is one
+    // of our SRC_TYPE bases, indicate the virtuality. Returns
+    // not_contained for non containment or private containment.
+    inline __sub_kind 
+    __find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
+                     const __class_type_info* __src_type, 
+                     const void* __src_ptr) const;
+
+    // Helper for dynamic cast. ACCESS_PATH gives the access from the
+    // most derived object to this base. DST_TYPE indicates the
+    // desired type we want. OBJ_PTR points to a base of our type
+    // within the complete object. SRC_TYPE indicates the static type
+    // started from and SRC_PTR points to that base within the most
+    // derived object. Fill in RESULT with what we find. Return true
+    // if we have located an ambiguous match.
+    virtual bool 
+    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
+                const __class_type_info* __dst_type, const void* __obj_ptr, 
+                const __class_type_info* __src_type, const void* __src_ptr, 
+                __dyncast_result& __result) const;
+    
+    // Helper for find_public_subobj. SRC2DST indicates how SRC_TYPE
+    // bases are inherited by the type started from -- which is not
+    // necessarily the current type. The current type will be a base
+    // of the destination type.  OBJ_PTR points to the current base.
+    virtual __sub_kind 
+    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
+                        const __class_type_info* __src_type,
+                        const void* __src_ptr) const;
+  };
+
+  // Type information for a class with a single non-virtual base.
+  class __si_class_type_info : public __class_type_info
+  {
+  public:
+    const __class_type_info* __base_type;
+
+    explicit 
+    __si_class_type_info(const char *__n, const __class_type_info *__base)
+    : __class_type_info(__n), __base_type(__base) { }
+
+    virtual 
+    ~__si_class_type_info();
+
+  protected:
+    __si_class_type_info(const __si_class_type_info&);
+
+    __si_class_type_info&
+    operator=(const __si_class_type_info&);
+
+    // Implementation defined member functions.
+    virtual bool 
+    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
+                const __class_type_info* __dst_type, const void* __obj_ptr,
+                const __class_type_info* __src_type, const void* __src_ptr,
+                __dyncast_result& __result) const;
+
+    virtual __sub_kind 
+    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
+                        const __class_type_info* __src_type,
+                        const void* __sub_ptr) const;
+
+    virtual bool 
+    __do_upcast(const __class_type_info*__dst, const void*__obj,
+               __upcast_result& __restrict __result) const;
+  };
+
+  // Type information for a class with multiple and/or virtual bases.
+  class __vmi_class_type_info : public __class_type_info 
+  {
+  public:
+    unsigned int               __flags;  // Details about the class hierarchy.
+    unsigned int               __base_count;  // Number of direct bases.
+
+    // The array of bases uses the trailing array struct hack so this
+    // class is not constructable with a normal constructor. It is
+    // internally generated by the compiler.
+    __base_class_type_info     __base_info[1];  // Array of bases.
+
+    explicit 
+    __vmi_class_type_info(const char* __n, int ___flags)
+    : __class_type_info(__n), __flags(___flags), __base_count(0) { }
+
+    virtual 
+    ~__vmi_class_type_info();
+
+    // Implementation defined types.
+    enum __flags_masks 
+      {
+       __non_diamond_repeat_mask = 0x1, // Distinct instance of repeated base.
+       __diamond_shaped_mask = 0x2, // Diamond shaped multiple inheritance.
+       __flags_unknown_mask = 0x10
+      };
+
+  protected:
+    // Implementation defined member functions.
+    virtual bool 
+    __do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
+                const __class_type_info* __dst_type, const void* __obj_ptr,
+                const __class_type_info* __src_type, const void* __src_ptr,
+                __dyncast_result& __result) const;
+
+    virtual __sub_kind 
+    __do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr, 
+                        const __class_type_info* __src_type,
+                        const void* __src_ptr) const;
+    
+    virtual bool 
+    __do_upcast(const __class_type_info* __dst, const void* __obj,
+               __upcast_result& __restrict __result) const;
+  };
+
+  // Dynamic cast runtime.
+  // src2dst has the following possible values
+  //  >-1: src_type is a unique public non-virtual base of dst_type
+  //       dst_ptr + src2dst == src_ptr
+  //   -1: unspecified relationship
+  //   -2: src_type is not a public base of dst_type
+  //   -3: src_type is a multiple public non-virtual base of dst_type
+  extern "C" void*
+  __dynamic_cast(const void* __src_ptr, // Starting object.
+                const __class_type_info* __src_type, // Static type of object.
+                const __class_type_info* __dst_type, // Desired target type.
+                ptrdiff_t __src2dst); // How src and dst are related.
+
+
+  // Returns the type_info for the currently handled exception [15.3/8], or
+  // null if there is none.
+  extern "C" std::type_info*
+  __cxa_current_exception_type();
+
+  // A magic placeholder class that can be caught by reference
+  // to recognize foreign exceptions.
+  class __foreign_exception
+  {
+    virtual ~__foreign_exception() throw();
+    virtual void __pure_dummy() = 0; // prevent catch by value
+  };
+
+} // namespace __cxxabiv1
 
 // User programs should use the alias `abi'. 
 namespace abi = __cxxabiv1;