forked from OSchip/llvm-project
parent
3c355aa24d
commit
39477c4c8b
|
@ -8,7 +8,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef __CXXABI_H
|
||||
#define __CXXABI_H
|
||||
#define __CXXABI_H
|
||||
|
||||
/*
|
||||
* This header provides the interface to the C++ ABI as defined at:
|
||||
|
@ -32,20 +32,20 @@
|
|||
#ifdef __cplusplus
|
||||
|
||||
namespace std {
|
||||
class type_info; // forward declaration
|
||||
class type_info; // forward declaration
|
||||
}
|
||||
|
||||
|
||||
// runtime routines use C calling conventions, but are in __cxxabiv1 namespace
|
||||
namespace __cxxabiv1 {
|
||||
extern "C" {
|
||||
namespace __cxxabiv1 {
|
||||
extern "C" {
|
||||
|
||||
// 2.4.2 Allocating the Exception Object
|
||||
extern void * __cxa_allocate_exception(size_t thrown_size) throw();
|
||||
extern void __cxa_free_exception(void * thrown_exception) throw();
|
||||
|
||||
// 2.4.3 Throwing the Exception Object
|
||||
extern LIBCXXABI_NORETURN void __cxa_throw(void * thrown_exception,
|
||||
extern LIBCXXABI_NORETURN void __cxa_throw(void * thrown_exception,
|
||||
std::type_info * tinfo, void (*dest)(void *));
|
||||
|
||||
// 2.5.3 Exception Handlers
|
||||
|
@ -88,84 +88,76 @@ extern void __cxa_guard_abort(uint64_t*);
|
|||
#endif
|
||||
|
||||
// 3.3.3 Array Construction and Destruction API
|
||||
extern void* __cxa_vec_new(size_t element_count,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
extern void* __cxa_vec_new(size_t element_count,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*constructor)(void*),
|
||||
void (*destructor)(void*) );
|
||||
void (*destructor)(void*));
|
||||
|
||||
extern void* __cxa_vec_new2(size_t element_count,
|
||||
size_t element_size,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*constructor)(void*),
|
||||
void (*destructor)(void*),
|
||||
void* (*alloc)(size_t),
|
||||
void (*dealloc)(void*) );
|
||||
void* (*alloc)(size_t),
|
||||
void (*dealloc)(void*));
|
||||
|
||||
extern void* __cxa_vec_new3(size_t element_count,
|
||||
size_t element_size,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*constructor)(void*),
|
||||
void (*destructor)(void*),
|
||||
void* (*alloc)(size_t),
|
||||
void (*dealloc)(void*, size_t) );
|
||||
|
||||
extern void __cxa_vec_ctor(void* array_address,
|
||||
void* (*alloc)(size_t),
|
||||
void (*dealloc)(void*, size_t));
|
||||
|
||||
extern void __cxa_vec_ctor(void* array_address,
|
||||
size_t element_count,
|
||||
size_t element_size,
|
||||
size_t element_size,
|
||||
void (*constructor)(void*),
|
||||
void (*destructor)(void*) );
|
||||
void (*destructor)(void*));
|
||||
|
||||
|
||||
extern void __cxa_vec_dtor(void* array_address,
|
||||
extern void __cxa_vec_dtor(void* array_address,
|
||||
size_t element_count,
|
||||
size_t element_size,
|
||||
void (*destructor)(void*) );
|
||||
size_t element_size,
|
||||
void (*destructor)(void*));
|
||||
|
||||
|
||||
extern void __cxa_vec_cleanup(void* array_address,
|
||||
extern void __cxa_vec_cleanup(void* array_address,
|
||||
size_t element_count,
|
||||
size_t element_size,
|
||||
void (*destructor)(void*) );
|
||||
size_t element_size,
|
||||
void (*destructor)(void*));
|
||||
|
||||
extern void __cxa_vec_delete(void* array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*destructor)(void*));
|
||||
|
||||
extern void __cxa_vec_delete(void* array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*destructor)(void*) );
|
||||
|
||||
|
||||
extern void __cxa_vec_delete2(void* array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
extern void __cxa_vec_delete2(void* array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*destructor)(void*),
|
||||
void (*dealloc)(void*) );
|
||||
|
||||
void (*dealloc)(void*));
|
||||
|
||||
extern void __cxa_vec_delete3(void* __array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
extern void __cxa_vec_delete3(void* __array_address,
|
||||
size_t element_size,
|
||||
size_t padding_size,
|
||||
void (*destructor)(void*),
|
||||
void (*dealloc) (void*, size_t));
|
||||
|
||||
|
||||
extern void __cxa_vec_cctor(void* dest_array,
|
||||
void* src_array,
|
||||
size_t element_count,
|
||||
size_t element_size,
|
||||
void (*constructor) (void*, void*),
|
||||
void (*destructor)(void*) );
|
||||
void (*dealloc)(void*, size_t));
|
||||
|
||||
extern void __cxa_vec_cctor(void* dest_array,
|
||||
void* src_array,
|
||||
size_t element_count,
|
||||
size_t element_size,
|
||||
void (*constructor)(void*, void*),
|
||||
void (*destructor)(void*));
|
||||
|
||||
// 3.3.5.3 Runtime API
|
||||
extern int __cxa_atexit(void (*f)(void*), void* p, void* d);
|
||||
extern int __cxa_finalize(void*);
|
||||
|
||||
|
||||
// 3.4 Demangler API
|
||||
extern char* __cxa_demangle(const char* mangled_name,
|
||||
extern char* __cxa_demangle(const char* mangled_name,
|
||||
char* output_buffer,
|
||||
size_t* length,
|
||||
size_t* length,
|
||||
int* status);
|
||||
|
||||
// Apple additions to support C++ 0x exception_ptr class
|
||||
|
@ -191,4 +183,4 @@ namespace abi = __cxxabiv1;
|
|||
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // __CXXABI_H
|
||||
#endif // __CXXABI_H
|
||||
|
|
|
@ -129,8 +129,8 @@ struct _Unwind_Exception {
|
|||
uintptr_t private_2; // holds sp that phase1 found for phase2 to use
|
||||
#if !__LP64__
|
||||
// The gcc implementation of _Unwind_Exception used attribute mode on the
|
||||
// above fields which had the side effect of causing this whole struct to
|
||||
// round up to 32 bytes in size. To be more explicit, we add pad fields
|
||||
// above fields which had the side effect of causing this whole struct to
|
||||
// round up to 32 bytes in size. To be more explicit, we add pad fields
|
||||
// added for binary compatibility.
|
||||
uint32_t reserved[3];
|
||||
#endif
|
||||
|
@ -284,7 +284,7 @@ typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *,
|
|||
extern _Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *);
|
||||
|
||||
// _Unwind_GetCFA is a gcc extension that can be called from within a
|
||||
// personality handler to get the CFA (stack pointer before call) of
|
||||
// personality handler to get the CFA (stack pointer before call) of
|
||||
// current frame.
|
||||
extern uintptr_t _Unwind_GetCFA(struct _Unwind_Context *);
|
||||
|
||||
|
@ -301,17 +301,17 @@ extern uintptr_t _Unwind_GetIPInfo(struct _Unwind_Context *context,
|
|||
|
||||
// __register_frame() is used with dynamically generated code to register the
|
||||
// FDE for a generated (JIT) code. The FDE must use pc-rel addressing to point
|
||||
// to its function and optional LSDA.
|
||||
// __register_frame() has existed in all versions of Mac OS X, but in 10.4 and
|
||||
// 10.5 it was buggy and did not actually register the FDE with the unwinder.
|
||||
// to its function and optional LSDA.
|
||||
// __register_frame() has existed in all versions of Mac OS X, but in 10.4 and
|
||||
// 10.5 it was buggy and did not actually register the FDE with the unwinder.
|
||||
// In 10.6 and later it does register properly.
|
||||
extern void __register_frame(const void *fde);
|
||||
extern void __deregister_frame(const void *fde);
|
||||
|
||||
// _Unwind_Find_FDE() will locate the FDE if the pc is in some function that has
|
||||
// an associated FDE. Note, Mac OS X 10.6 and later, introduces "compact unwind
|
||||
// info" which the runtime uses in preference to dwarf unwind info. This
|
||||
// function will only work if the target function has an FDE but no compact
|
||||
// info" which the runtime uses in preference to dwarf unwind info. This
|
||||
// function will only work if the target function has an FDE but no compact
|
||||
// unwind info.
|
||||
struct dwarf_eh_bases {
|
||||
uintptr_t tbase;
|
||||
|
@ -336,7 +336,7 @@ extern uintptr_t _Unwind_GetTextRelBase(struct _Unwind_Context *context)
|
|||
LIBUNWIND_UNAVAIL;
|
||||
|
||||
// Mac OS X 10.4 and 10.5 had implementations of these functions in
|
||||
// libgcc_s.dylib, but they never worked.
|
||||
// libgcc_s.dylib, but they never worked.
|
||||
/// These functions are no longer available on Mac OS X.
|
||||
extern void __register_frame_info_bases(const void *fde, void *ob, void *tb,
|
||||
void *db) LIBUNWIND_UNAVAIL;
|
||||
|
|
Loading…
Reference in New Issue