Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5962 → Rev 5963

/contrib/sdk/sources/gcc_eh/config/i386/w32-unwind.h
1,6 → 1,5
/* Definitions for Dwarf2 EH unwind support for Windows32 targets
Copyright (C) 2007, 2009
Free Software Foundation, Inc.
Copyright (C) 2007-2013 Free Software Foundation, Inc.
Contributed by Pascal Obry <obry@adacore.com>
 
This file is part of GCC.
130,7 → 129,6
 
/* In the test below we look for two specific patterns found
experimentally to be in the Windows signal handler. */
 
if (SIG_PAT1 || SIG_PAT2 || SIG_SEH1 || SIG_SEH2)
{
PEXCEPTION_POINTERS weinfo_;
148,14 → 146,12
}
 
/* The new context frame address is the stack pointer. */
 
new_cfa_ = proc_ctx_->Esp;
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = __builtin_dwarf_sp_column();
fs->regs.cfa_offset = new_cfa_ - (long) ctx_cfa_;
 
/* Save some registers. */
 
/* Restore registers. */
fs->regs.reg[0].how = REG_SAVED_OFFSET;
fs->regs.reg[0].loc.offset = (long)&proc_ctx_->Eax - new_cfa_;
fs->regs.reg[3].how = REG_SAVED_OFFSET;
168,18 → 164,13
fs->regs.reg[6].loc.offset = (long)&proc_ctx_->Esi - new_cfa_;
fs->regs.reg[7].how = REG_SAVED_OFFSET;
fs->regs.reg[7].loc.offset = (long)&proc_ctx_->Edi - new_cfa_;
fs->regs.reg[9].how = REG_SAVED_OFFSET;
fs->regs.reg[9].loc.offset = (long)&proc_ctx_->Eip - new_cfa_;
fs->regs.reg[4].how = REG_SAVED_OFFSET;
fs->regs.reg[4].loc.offset = (long)&proc_ctx_->Ebp - new_cfa_;
 
/* Set the return address to Eip + 1. As we can be called multiple
times we use another register for this. */
 
proc_ctx_->Dr0 = proc_ctx_->Eip + 1;
fs->regs.reg[5].how = REG_SAVED_OFFSET;
fs->regs.reg[5].loc.offset = (long)&proc_ctx_->Ebp - new_cfa_;
fs->regs.reg[8].how = REG_SAVED_OFFSET;
fs->regs.reg[8].loc.offset = (long)&proc_ctx_->Dr0 - new_cfa_;
fs->regs.reg[8].loc.offset = (long)&proc_ctx_->Eip - new_cfa_;
fs->retaddr_column = 8;
fs->signal_frame = 1;
 
return _URC_NO_REASON;
}
 
187,7 → 178,6
one of it's probes prior to the real SP adjustment. The only
operations of interest performed is "pushl %ecx", followed by
ecx clobbering. */
 
else if (SIG_ALLOCA)
{
/* Only one push between entry in _alloca and the probe trap. */
205,6 → 195,7
fs->retaddr_column = 8;
fs->regs.reg[8].how = REG_SAVED_OFFSET;
fs->regs.reg[8].loc.offset = 0;
fs->signal_frame = 1;
 
return _URC_NO_REASON;
}
/contrib/sdk/sources/gcc_eh/gthr-single.h
1,7 → 1,6
/* Threads compatibility routines for libgcc2 and libobjc. */
/* Compile this one with gcc. */
/* Copyright (C) 1997, 1999, 2000, 2004, 2008, 2009
Free Software Foundation, Inc.
/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
36,6 → 35,7
 
#define __GTHREAD_ONCE_INIT 0
#define __GTHREAD_MUTEX_INIT 0
#define __GTHREAD_MUTEX_INIT_FUNCTION(mx)
#define __GTHREAD_RECURSIVE_MUTEX_INIT 0
 
#define UNUSED __attribute__((unused))
285,6 → 285,12
return __gthread_mutex_unlock (__mutex);
}
 
static inline int
__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex)
{
return __gthread_mutex_destroy (__mutex);
}
 
#endif /* _LIBOBJC */
 
#undef UNUSED
/contrib/sdk/sources/gcc_eh/gthr.h
1,6 → 1,6
/* Threads compatibility routines for libgcc2. */
/* Compile this one with gcc. */
/* Copyright (C) 1997, 1998, 2004, 2008, 2009 Free Software Foundation, Inc.
/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
51,11 → 51,12
to initialize __gthread_mutex_t to get a fast
non-recursive mutex.
__GTHREAD_MUTEX_INIT_FUNCTION
some systems can't initialize a mutex without a
function call. On such systems, define this to a
function which looks like this:
to initialize __gthread_mutex_t to get a fast
non-recursive mutex.
Define this to a function which looks like this:
void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
Don't define __GTHREAD_MUTEX_INIT in this case
Some systems can't initialize a mutex without a
function call. Don't define __GTHREAD_MUTEX_INIT in this case.
__GTHREAD_RECURSIVE_MUTEX_INIT
__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION
as above, but for a recursive mutex.
71,6 → 72,7
int __gthread_setspecific (__gthread_key_t key, const void *ptr)
 
int __gthread_mutex_destroy (__gthread_mutex_t *mutex);
int __gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *mutex);
 
int __gthread_mutex_lock (__gthread_mutex_t *mutex);
int __gthread_mutex_trylock (__gthread_mutex_t *mutex);
/contrib/sdk/sources/gcc_eh/unwind-c.c
1,5 → 1,5
/* Supporting functions for C exception handling.
Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
Copyright (C) 2002-2013 Free Software Foundation, Inc.
Contributed by Aldy Hernandez <aldy@quesejoda.com>.
Shamelessly stolen from the Java front end.
 
93,6 → 93,8
#ifdef __USING_SJLJ_EXCEPTIONS__
#define PERSONALITY_FUNCTION __gcc_personality_sj0
#define __builtin_eh_return_data_regno(x) x
#elif defined(__SEH__)
#define PERSONALITY_FUNCTION __gcc_personality_imp
#else
#define PERSONALITY_FUNCTION __gcc_personality_v0
#endif
107,6 → 109,9
struct _Unwind_Exception * ue_header,
struct _Unwind_Context * context)
#else
#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__)
static
#endif
_Unwind_Reason_Code
PERSONALITY_FUNCTION (int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *);
130,10 → 135,10
 
/* The dwarf unwinder assumes the context structure holds things like the
function and LSDA pointers. The ARM implementation caches these in
the exception header (UCB). To avoid rewriting everything we make the
virtual IP register point at the UCB. */
the exception header (UCB). To avoid rewriting everything we make a
virtual scratch register point at the UCB. */
ip = (_Unwind_Ptr) ue_header;
_Unwind_SetGR (context, 12, ip);
_Unwind_SetGR (context, UNWIND_POINTER_REG, ip);
#else
if (version != 1)
return _URC_FATAL_PHASE1_ERROR;
227,3 → 232,13
_Unwind_SetIP (context, landing_pad);
return _URC_INSTALL_CONTEXT;
}
 
#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__)
EXCEPTION_DISPOSITION
__gcc_personality_seh0 (PEXCEPTION_RECORD ms_exc, void *this_frame,
PCONTEXT ms_orig_context, PDISPATCHER_CONTEXT ms_disp)
{
return _GCC_specific_handler (ms_exc, this_frame, ms_orig_context,
ms_disp, __gcc_personality_imp);
}
#endif /* SEH */
/contrib/sdk/sources/gcc_eh/unwind-dw2-fde.c
1,6 → 1,5
/* Subroutines needed for unwinding stack frames for exception handling. */
/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
2009 Free Software Foundation, Inc.
/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@cygnus.com>.
 
This file is part of GCC.
64,6 → 63,8
__gthread_once (&once, init_object_mutex);
}
#else
/* ??? Several targets include this file with stubbing parts of gthr.h
and expect no locking to be done. */
#define init_object_mutex_once()
#endif
 
227,7 → 228,6
free (__deregister_frame_info (begin));
}
 
/* Like base_of_encoded_value, but take the base from a struct object
instead of an _Unwind_Context. */
 
265,10 → 265,18
_sleb128_t stmp;
 
aug = cie->augmentation;
p = aug + strlen ((const char *)aug) + 1; /* Skip the augmentation string. */
if (__builtin_expect (cie->version >= 4, 0))
{
if (p[0] != sizeof (void *) || p[1] != 0)
return DW_EH_PE_omit; /* We are not prepared to handle unexpected
address sizes or segment selectors. */
p += 2; /* Skip address size and segment size. */
}
 
if (aug[0] != 'z')
return DW_EH_PE_absptr;
 
p = aug + strlen ((const char *)aug) + 1; /* Skip the augmentation string. */
p = read_uleb128 (p, &utmp); /* Skip code alignment. */
p = read_sleb128 (p, &stmp); /* Skip data alignment. */
if (cie->version == 1) /* Skip return address column. */
614,6 → 622,8
{
last_cie = this_cie;
encoding = get_cie_encoding (this_cie);
if (encoding == DW_EH_PE_omit)
return -1;
base = base_from_object (encoding, ob);
if (ob->s.b.encoding == DW_EH_PE_omit)
ob->s.b.encoding = encoding;
723,10 → 733,26
{
fde **p = ob->u.array;
for (count = 0; *p; ++p)
count += classify_object_over_fdes (ob, *p);
{
size_t cur_count = classify_object_over_fdes (ob, *p);
if (cur_count == (size_t) -1)
goto unhandled_fdes;
count += cur_count;
}
}
else
{
count = classify_object_over_fdes (ob, ob->u.single);
if (count == (size_t) -1)
{
static const fde terminator;
unhandled_fdes:
ob->s.i = 0;
ob->s.b.encoding = DW_EH_PE_omit;
ob->u.single = &terminator;
return;
}
}
 
/* The count field we have in the main struct object is somewhat
limited, but should suffice for virtually all cases. If the
/contrib/sdk/sources/gcc_eh/unwind-dw2-fde.h
1,6 → 1,5
/* Subroutines needed for unwinding stack frames for exception handling. */
/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2009
Free Software Foundation, Inc.
/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
Contributed by Jason Merrill <jason@cygnus.com>.
 
This file is part of GCC.
/contrib/sdk/sources/gcc_eh/unwind-dw2.c
1,6 → 1,5
/* DWARF2 exception handling and frame unwind runtime interface routines.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2008, 2009, 2010 Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
55,12 → 54,79
#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
#endif
 
/* ??? For the public function interfaces, we tend to gcc_assert that the
column numbers are in range. For the dwarf2 unwind info this does happen,
although so far in a case that doesn't actually matter.
 
See PR49146, in which a call from x86_64 ms abi to x86_64 unix abi stores
the call-saved xmm registers and annotates them. We havn't bothered
providing support for the xmm registers for the x86_64 port primarily
because the 64-bit windows targets don't use dwarf2 unwind, using sjlj or
SEH instead. Adding the support for unix targets would generally be a
waste. However, some runtime libraries supplied with ICC do contain such
an unorthodox transition, as well as the unwind info to match. This loss
of register restoration doesn't matter in practice, because the exception
is caught in the native unix abi, where all of the xmm registers are
call clobbered.
 
Ideally, we'd record some bit to notice when we're failing to restore some
register recorded in the unwind info, but to do that we need annotation on
the unix->ms abi edge, so that we know when the register data may be
discarded. And since this edge is also within the ICC library, we're
unlikely to be able to get the new annotation.
 
Barring a magic solution to restore the ms abi defined 128-bit xmm registers
(as distictly opposed to the full runtime width) without causing extra
overhead for normal unix abis, the best solution seems to be to simply
ignore unwind data for unknown columns. */
 
#define UNWIND_COLUMN_IN_RANGE(x) \
__builtin_expect((x) <= DWARF_FRAME_REGISTERS, 1)
 
#ifdef REG_VALUE_IN_UNWIND_CONTEXT
typedef _Unwind_Word _Unwind_Context_Reg_Val;
 
#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT
#define ASSUME_EXTENDED_UNWIND_CONTEXT 1
#endif
 
static inline _Unwind_Word
_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val)
{
return val;
}
 
static inline _Unwind_Context_Reg_Val
_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
{
return val;
}
#else
typedef void *_Unwind_Context_Reg_Val;
 
static inline _Unwind_Word
_Unwind_Get_Unwind_Word (_Unwind_Context_Reg_Val val)
{
return (_Unwind_Word) (_Unwind_Internal_Ptr) val;
}
 
static inline _Unwind_Context_Reg_Val
_Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
{
return (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) val;
}
#endif
 
#ifndef ASSUME_EXTENDED_UNWIND_CONTEXT
#define ASSUME_EXTENDED_UNWIND_CONTEXT 0
#endif
 
/* This is the register and unwind state for a particular frame. This
provides the information necessary to unwind up past a frame and return
to its caller. */
struct _Unwind_Context
{
void *reg[DWARF_FRAME_REGISTERS+1];
_Unwind_Context_Reg_Val reg[DWARF_FRAME_REGISTERS+1];
void *cfa;
void *ra;
void *lsda;
143,7 → 209,8
static inline _Unwind_Word
_Unwind_IsExtendedContext (struct _Unwind_Context *context)
{
return context->flags & EXTENDED_CONTEXT_BIT;
return (ASSUME_EXTENDED_UNWIND_CONTEXT
|| (context->flags & EXTENDED_CONTEXT_BIT));
}
/* Get the value of register INDEX as saved in CONTEXT. */
152,7 → 219,7
_Unwind_GetGR (struct _Unwind_Context *context, int index)
{
int size;
void *ptr;
_Unwind_Context_Reg_Val val;
 
#ifdef DWARF_ZERO_REG
if (index == DWARF_ZERO_REG)
162,18 → 229,18
index = DWARF_REG_TO_UNWIND_COLUMN (index);
gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
size = dwarf_reg_size_table[index];
ptr = context->reg[index];
val = context->reg[index];
 
if (_Unwind_IsExtendedContext (context) && context->by_value[index])
return (_Unwind_Word) (_Unwind_Internal_Ptr) ptr;
return _Unwind_Get_Unwind_Word (val);
 
/* This will segfault if the register hasn't been saved. */
if (size == sizeof(_Unwind_Ptr))
return * (_Unwind_Ptr *) ptr;
return * (_Unwind_Ptr *) (_Unwind_Internal_Ptr) val;
else
{
gcc_assert (size == sizeof(_Unwind_Word));
return * (_Unwind_Word *) ptr;
return * (_Unwind_Word *) (_Unwind_Internal_Ptr) val;
}
}
 
205,11 → 272,11
 
if (_Unwind_IsExtendedContext (context) && context->by_value[index])
{
context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;
context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);
return;
}
 
ptr = context->reg[index];
ptr = (void *) (_Unwind_Internal_Ptr) context->reg[index];
 
if (size == sizeof(_Unwind_Ptr))
* (_Unwind_Ptr *) ptr = val;
228,7 → 295,7
index = DWARF_REG_TO_UNWIND_COLUMN (index);
if (_Unwind_IsExtendedContext (context) && context->by_value[index])
return &context->reg[index];
return context->reg[index];
return (void *) (_Unwind_Internal_Ptr) context->reg[index];
}
 
/* Set the pointer to a register INDEX as saved in CONTEXT. */
239,7 → 306,7
index = DWARF_REG_TO_UNWIND_COLUMN (index);
if (_Unwind_IsExtendedContext (context))
context->by_value[index] = 0;
context->reg[index] = p;
context->reg[index] = (_Unwind_Context_Reg_Val) (_Unwind_Internal_Ptr) p;
}
 
/* Overwrite the saved value for register INDEX in CONTEXT with VAL. */
250,10 → 317,11
{
index = DWARF_REG_TO_UNWIND_COLUMN (index);
gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
gcc_assert (dwarf_reg_size_table[index] == sizeof (_Unwind_Ptr));
/* Return column size may be smaller than _Unwind_Context_Reg_Val. */
gcc_assert (dwarf_reg_size_table[index] <= sizeof (_Unwind_Context_Reg_Val));
 
context->by_value[index] = 1;
context->reg[index] = (void *) (_Unwind_Internal_Ptr) val;
context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);
}
 
/* Return nonzero if register INDEX is stored by value rather than
356,7 → 424,16
aug += 2;
}
 
/* Immediately following the augmentation are the code and
/* After the augmentation resp. pointer for "eh" augmentation
follows for CIE version >= 4 address size byte and
segment size byte. */
if (__builtin_expect (cie->version >= 4, 0))
{
if (p[0] != sizeof (void *) || p[1] != 0)
return NULL;
p += 2;
}
/* Immediately following this are the code and
data alignment and return address column. */
p = read_uleb128 (p, &utmp);
fs->code_align = (_Unwind_Word)utmp;
888,14 → 965,19
reg = insn & 0x3f;
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Sword) utmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
}
}
else if ((insn & 0xc0) == DW_CFA_restore)
{
reg = insn & 0x3f;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_UNSAVED;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
fs->regs.reg[reg].how = REG_UNSAVED;
}
else switch (insn)
{
926,9 → 1008,12
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Sword) utmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
}
break;
 
case DW_CFA_restore_extended:
935,17 → 1020,23
insn_ptr = read_uleb128 (insn_ptr, &reg);
/* FIXME, this is wrong; the CIE might have said that the
register was saved somewhere. */
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
fs->regs.reg[reg].how = REG_UNSAVED;
break;
 
case DW_CFA_same_value:
insn_ptr = read_uleb128 (insn_ptr, &reg);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNSAVED;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
fs->regs.reg[reg].how = REG_UNSAVED;
break;
 
case DW_CFA_undefined:
insn_ptr = read_uleb128 (insn_ptr, &reg);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN(reg)].how = REG_UNDEFINED;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
fs->regs.reg[reg].how = REG_UNDEFINED;
break;
 
case DW_CFA_nop:
956,10 → 1047,13
_uleb128_t reg2;
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &reg2);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_REG;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.reg =
(_Unwind_Word)reg2;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_REG;
fs->regs.reg[reg].loc.reg = (_Unwind_Word)reg2;
}
}
break;
 
case DW_CFA_remember_state:
1016,8 → 1110,12
 
case DW_CFA_expression:
insn_ptr = read_uleb128 (insn_ptr, &reg);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how = REG_SAVED_EXP;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_EXP;
fs->regs.reg[reg].loc.exp = insn_ptr;
}
insn_ptr = read_uleb128 (insn_ptr, &utmp);
insn_ptr += utmp;
break;
1027,9 → 1125,12
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_sleb128 (insn_ptr, &stmp);
offset = stmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
}
break;
 
case DW_CFA_def_cfa_sf:
1052,9 → 1153,12
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Sword) utmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_VAL_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
}
break;
 
case DW_CFA_val_offset_sf:
1061,16 → 1165,22
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_sleb128 (insn_ptr, &stmp);
offset = stmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_VAL_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_VAL_OFFSET;
fs->regs.reg[reg].loc.offset = offset;
}
break;
 
case DW_CFA_val_expression:
insn_ptr = read_uleb128 (insn_ptr, &reg);
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_VAL_EXP;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.exp = insn_ptr;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_VAL_EXP;
fs->regs.reg[reg].loc.exp = insn_ptr;
}
insn_ptr = read_uleb128 (insn_ptr, &utmp);
insn_ptr += utmp;
break;
1077,6 → 1187,7
 
case DW_CFA_GNU_window_save:
/* ??? Hardcoded for SPARC register window configuration. */
if (DWARF_FRAME_REGISTERS >= 32)
for (reg = 16; reg < 32; ++reg)
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
1095,9 → 1206,12
insn_ptr = read_uleb128 (insn_ptr, &reg);
insn_ptr = read_uleb128 (insn_ptr, &utmp);
offset = (_Unwind_Word) utmp * fs->data_align;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].how
= REG_SAVED_OFFSET;
fs->regs.reg[DWARF_REG_TO_UNWIND_COLUMN (reg)].loc.offset = -offset;
reg = DWARF_REG_TO_UNWIND_COLUMN (reg);
if (UNWIND_COLUMN_IN_RANGE (reg))
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
fs->regs.reg[reg].loc.offset = -offset;
}
break;
 
default:
1204,6 → 1318,7
int reg;
 
memset (&context, 0, sizeof (struct _Unwind_Context));
if (!ASSUME_EXTENDED_UNWIND_CONTEXT)
context.flags = EXTENDED_CONTEXT_BIT;
context.ra = pc_target + 1;
 
1442,6 → 1557,7
 
memset (context, 0, sizeof (struct _Unwind_Context));
context->ra = ra;
if (!ASSUME_EXTENDED_UNWIND_CONTEXT)
context->flags = EXTENDED_CONTEXT_BIT;
 
code = uw_frame_state_for (context, &fs);
1484,7 → 1600,13
_Unwind_DebugHook (void *cfa __attribute__ ((__unused__)),
void *handler __attribute__ ((__unused__)))
{
/* We only want to use stap probes starting with v3. Earlier
versions added too much startup cost. */
#if defined (HAVE_SYS_SDT_H) && defined (STAP_PROBE2) && _SDT_NOTE_TYPE >= 3
STAP_PROBE2 (libgcc, unwind, cfa, handler);
#else
asm ("");
#endif
}
 
/* Install TARGET into CURRENT so that we can return to it. This is a
1515,8 → 1637,8
 
for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
{
void *c = current->reg[i];
void *t = target->reg[i];
void *c = (void *) (_Unwind_Internal_Ptr) current->reg[i];
void *t = (void *) (_Unwind_Internal_Ptr)target->reg[i];
 
gcc_assert (current->by_value[i] == 0);
if (target->by_value[i] && c)
/contrib/sdk/sources/gcc_eh/unwind-dw2.h
1,6 → 1,5
/* DWARF2 frame unwind data structure.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2009
Free Software Foundation, Inc.
Copyright (C) 1997-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
/contrib/sdk/sources/gcc_eh/unwind-pe.h
1,5 → 1,5
/* Exception handling and frame unwind runtime interface routines.
Copyright (C) 2001, 2002, 2003, 2004, 2008, 2009 Free Software Foundation, Inc.
Copyright (C) 2001-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
/contrib/sdk/sources/gcc_eh/unwind.inc
1,5 → 1,5
/* Exception handling and frame unwind runtime interface routines. -*- C -*-
Copyright (C) 2001, 2003, 2008, 2009 Free Software Foundation, Inc.
Copyright (C) 2001-2013 Free Software Foundation, Inc.
 
This file is part of GCC.
 
/contrib/sdk/sources/libstdc++-v3/libsupc++/Makefile
7,17 → 7,20
STRIP = kos32-strip
 
CFLAGS = -U_Win32 -U_WIN32 -U__MINGW32__ -c -O2 -fno-ident -fomit-frame-pointer
CPPFLAGS = -fno-rtti
 
ARFLAGS= crs
 
INCLUDES= -I. -I../../newlib/libc/include
INCLUDES= -I. -I../include/mingw32 -I../include -I../../newlib/libc/include -I/d/mingw/include
 
LIBS:= -ldll -lc.dll
 
DEFINES= -DHAVE_CONFIG_H -DIN_GCC -DUSE_EMUTLS=1 -D_GLIBCXX_HAVE_TLS
DEFINES= -DHAVE_CONFIG_H -DIN_GCC -DIN_GLIBCPP_V3 -DUSE_EMUTLS=1 -D_GLIBCXX_HAVE_TLS
 
 
SOURCES = gthr_mutex.c \
SOURCES = \
cp-demangle.c \
gthr_mutex.c \
array_type_info.cc \
atexit_thread.cc \
bad_alloc.cc \
81,22 → 84,22
$(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
%.o : %.cc Makefile
$(CPP) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
eh_ptr.o: eh_ptr.cc
$(CPP) $(CFLAGS) -std=gnu++0x $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) -std=gnu++0x $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
eh_throw.o: eh_throw.cc
$(CPP) $(CFLAGS) -std=gnu++0x $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) -std=gnu++0x $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
guard.o: guard.cc
$(CPP) $(CFLAGS) -std=gnu++0x $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) -std=gnu++0x $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
atexit_thread.o: atexit_thread.cc
$(CPP) $(CFLAGS) -std=gnu++0x $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) -std=gnu++0x $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
nested_exception.o: nested_exception.cc
$(CPP) $(CFLAGS) -std=gnu++0x $(DEFINES) $(INCLUDES) -o $@ $<
$(CPP) $(CFLAGS) -std=gnu++0x $(CPPFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
 
clean:
-rm -f *.o
/contrib/sdk/sources/libstdc++-v3/libsupc++/config.h
0,0 → 1,1200
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
 
/* Define to 1 if you have the `acosf' function. */
#define HAVE_ACOSF 1
 
/* Define to 1 if you have the `acosl' function. */
#define HAVE_ACOSL 1
 
/* Define to 1 if you have the `asinf' function. */
#define HAVE_ASINF 1
 
/* Define to 1 if you have the `asinl' function. */
#define HAVE_ASINL 1
 
/* Define to 1 if the target assembler supports .symver directive. */
/* #undef HAVE_AS_SYMVER_DIRECTIVE */
 
/* Define to 1 if you have the `atan2f' function. */
#define HAVE_ATAN2F 1
 
/* Define to 1 if you have the `atan2l' function. */
#define HAVE_ATAN2L 1
 
/* Define to 1 if you have the `atanf' function. */
#define HAVE_ATANF 1
 
/* Define to 1 if you have the `atanl' function. */
#define HAVE_ATANL 1
 
/* Define to 1 if you have the `at_quick_exit' function. */
/* #undef HAVE_AT_QUICK_EXIT */
 
/* Define to 1 if the target assembler supports thread-local storage. */
/* #undef HAVE_CC_TLS */
 
/* Define to 1 if you have the `ceilf' function. */
#define HAVE_CEILF 1
 
/* Define to 1 if you have the `ceill' function. */
#define HAVE_CEILL 1
 
/* Define to 1 if you have the <complex.h> header file. */
#define HAVE_COMPLEX_H 1
 
/* Define to 1 if you have the `cosf' function. */
#define HAVE_COSF 1
 
/* Define to 1 if you have the `coshf' function. */
#define HAVE_COSHF 1
 
/* Define to 1 if you have the `coshl' function. */
#define HAVE_COSHL 1
 
/* Define to 1 if you have the `cosl' function. */
#define HAVE_COSL 1
 
/* Define to 1 if you have the <dlfcn.h> header file. */
/* #undef HAVE_DLFCN_H */
 
/* Define if EBADMSG exists. */
/* #undef HAVE_EBADMSG */
 
/* Define if ECANCELED exists. */
/* #undef HAVE_ECANCELED */
 
/* Define if ECHILD exists. */
#define HAVE_ECHILD 1
 
/* Define if EIDRM exists. */
/* #undef HAVE_EIDRM */
 
/* Define to 1 if you have the <endian.h> header file. */
/* #undef HAVE_ENDIAN_H */
 
/* Define if ENODATA exists. */
/* #undef HAVE_ENODATA */
 
/* Define if ENOLINK exists. */
/* #undef HAVE_ENOLINK */
 
/* Define if ENOSPC exists. */
#define HAVE_ENOSPC 1
 
/* Define if ENOSR exists. */
/* #undef HAVE_ENOSR */
 
/* Define if ENOSTR exists. */
/* #undef HAVE_ENOSTR */
 
/* Define if ENOTRECOVERABLE exists. */
/* #undef HAVE_ENOTRECOVERABLE */
 
/* Define if ENOTSUP exists. */
/* #undef HAVE_ENOTSUP */
 
/* Define if EOVERFLOW exists. */
/* #undef HAVE_EOVERFLOW */
 
/* Define if EOWNERDEAD exists. */
/* #undef HAVE_EOWNERDEAD */
 
/* Define if EPERM exists. */
#define HAVE_EPERM 1
 
/* Define if EPROTO exists. */
/* #undef HAVE_EPROTO */
 
/* Define if ETIME exists. */
/* #undef HAVE_ETIME */
 
/* Define if ETIMEDOUT exists. */
/* #undef HAVE_ETIMEDOUT */
 
/* Define if ETXTBSY exists. */
/* #undef HAVE_ETXTBSY */
 
/* Define if EWOULDBLOCK exists. */
/* #undef HAVE_EWOULDBLOCK */
 
/* Define to 1 if you have the <execinfo.h> header file. */
/* #undef HAVE_EXECINFO_H */
 
/* Define to 1 if you have the `expf' function. */
#define HAVE_EXPF 1
 
/* Define to 1 if you have the `expl' function. */
#define HAVE_EXPL 1
 
/* Define to 1 if you have the `fabsf' function. */
#define HAVE_FABSF 1
 
/* Define to 1 if you have the `fabsl' function. */
#define HAVE_FABSL 1
 
/* Define to 1 if you have the <fenv.h> header file. */
#define HAVE_FENV_H 1
 
/* Define to 1 if you have the `finite' function. */
#define HAVE_FINITE 1
 
/* Define to 1 if you have the `finitef' function. */
/* #undef HAVE_FINITEF */
 
/* Define to 1 if you have the `finitel' function. */
/* #undef HAVE_FINITEL */
 
/* Define to 1 if you have the <float.h> header file. */
#define HAVE_FLOAT_H 1
 
/* Define to 1 if you have the `floorf' function. */
#define HAVE_FLOORF 1
 
/* Define to 1 if you have the `floorl' function. */
#define HAVE_FLOORL 1
 
/* Define to 1 if you have the `fmodf' function. */
#define HAVE_FMODF 1
 
/* Define to 1 if you have the `fmodl' function. */
#define HAVE_FMODL 1
 
/* Define to 1 if you have the `fpclass' function. */
#define HAVE_FPCLASS 1
 
/* Define to 1 if you have the <fp.h> header file. */
/* #undef HAVE_FP_H */
 
/* Define to 1 if you have the `frexpf' function. */
#define HAVE_FREXPF 1
 
/* Define to 1 if you have the `frexpl' function. */
#define HAVE_FREXPL 1
 
/* Define if _Unwind_GetIPInfo is available. */
#define HAVE_GETIPINFO 1
 
/* Define if gets is available in <stdio.h>. */
#define HAVE_GETS 1
 
/* Define to 1 if you have the `hypot' function. */
#define HAVE_HYPOT 1
 
/* Define to 1 if you have the `hypotf' function. */
#define HAVE_HYPOTF 1
 
/* Define to 1 if you have the `hypotl' function. */
#define HAVE_HYPOTL 1
 
/* Define if you have the iconv() function. */
/* #undef HAVE_ICONV */
 
/* Define to 1 if you have the <ieeefp.h> header file. */
/* #undef HAVE_IEEEFP_H */
 
/* Define if int64_t is available in <stdint.h>. */
#define HAVE_INT64_T 1
 
/* Define if int64_t is a long. */
/* #undef HAVE_INT64_T_LONG */
 
/* Define if int64_t is a long long. */
#define HAVE_INT64_T_LONG_LONG 1
 
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
 
/* Define to 1 if you have the `isinf' function. */
/* #undef HAVE_ISINF */
 
/* Define to 1 if you have the `isinff' function. */
/* #undef HAVE_ISINFF */
 
/* Define to 1 if you have the `isinfl' function. */
/* #undef HAVE_ISINFL */
 
/* Define to 1 if you have the `isnan' function. */
#define HAVE_ISNAN 1
 
/* Define to 1 if you have the `isnanf' function. */
/* #undef HAVE_ISNANF */
 
/* Define to 1 if you have the `isnanl' function. */
/* #undef HAVE_ISNANL */
 
/* Defined if iswblank exists. */
#define HAVE_ISWBLANK 1
 
/* Define if LC_MESSAGES is available in <locale.h>. */
/* #undef HAVE_LC_MESSAGES */
 
/* Define to 1 if you have the `ldexpf' function. */
#define HAVE_LDEXPF 1
 
/* Define to 1 if you have the `ldexpl' function. */
#define HAVE_LDEXPL 1
 
/* Define to 1 if you have the <libintl.h> header file. */
/* #undef HAVE_LIBINTL_H */
 
/* Only used in build directory testsuite_hooks.h. */
/* #undef HAVE_LIMIT_AS */
 
/* Only used in build directory testsuite_hooks.h. */
/* #undef HAVE_LIMIT_DATA */
 
/* Only used in build directory testsuite_hooks.h. */
/* #undef HAVE_LIMIT_FSIZE */
 
/* Only used in build directory testsuite_hooks.h. */
/* #undef HAVE_LIMIT_RSS */
 
/* Only used in build directory testsuite_hooks.h. */
/* #undef HAVE_LIMIT_VMEM */
 
/* Define if futex syscall is available. */
/* #undef HAVE_LINUX_FUTEX */
 
/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
 
/* Define to 1 if you have the `log10f' function. */
#define HAVE_LOG10F 1
 
/* Define to 1 if you have the `log10l' function. */
#define HAVE_LOG10L 1
 
/* Define to 1 if you have the `logf' function. */
#define HAVE_LOGF 1
 
/* Define to 1 if you have the `logl' function. */
#define HAVE_LOGL 1
 
/* Define to 1 if you have the <machine/endian.h> header file. */
#define HAVE_MACHINE_ENDIAN_H 1
 
/* Define to 1 if you have the <machine/param.h> header file. */
#define HAVE_MACHINE_PARAM_H 1
 
/* Define if mbstate_t exists in wchar.h. */
#define HAVE_MBSTATE_T 1
 
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
 
/* Define to 1 if you have the `modf' function. */
#define HAVE_MODF 1
 
/* Define to 1 if you have the `modff' function. */
#define HAVE_MODFF 1
 
/* Define to 1 if you have the `modfl' function. */
#define HAVE_MODFL 1
 
/* Define to 1 if you have the <nan.h> header file. */
/* #undef HAVE_NAN_H */
 
/* Define if poll is available in <poll.h>. */
/* #undef HAVE_POLL */
 
/* Define to 1 if you have the `powf' function. */
#define HAVE_POWF 1
 
/* Define to 1 if you have the `powl' function. */
#define HAVE_POWL 1
 
/* Define to 1 if you have the `qfpclass' function. */
/* #undef HAVE_QFPCLASS */
 
/* Define to 1 if you have the `quick_exit' function. */
/* #undef HAVE_QUICK_EXIT */
 
/* Define to 1 if you have the `setenv' function. */
/* #undef HAVE_SETENV */
 
/* Define to 1 if you have the `sincos' function. */
/* #undef HAVE_SINCOS */
 
/* Define to 1 if you have the `sincosf' function. */
/* #undef HAVE_SINCOSF */
 
/* Define to 1 if you have the `sincosl' function. */
/* #undef HAVE_SINCOSL */
 
/* Define to 1 if you have the `sinf' function. */
#define HAVE_SINF 1
 
/* Define to 1 if you have the `sinhf' function. */
#define HAVE_SINHF 1
 
/* Define to 1 if you have the `sinhl' function. */
#define HAVE_SINHL 1
 
/* Define to 1 if you have the `sinl' function. */
#define HAVE_SINL 1
 
/* Defined if sleep exists. */
/* #undef HAVE_SLEEP */
 
/* Define to 1 if you have the `sqrtf' function. */
#define HAVE_SQRTF 1
 
/* Define to 1 if you have the `sqrtl' function. */
#define HAVE_SQRTL 1
 
/* Define to 1 if you have the <stdalign.h> header file. */
/* #undef HAVE_STDALIGN_H */
 
/* Define to 1 if you have the <stdbool.h> header file. */
/* #undef HAVE_STDBOOL_H */
 
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
 
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
 
/* Define if strerror_l is available in <string.h>. */
/* #undef HAVE_STRERROR_L */
 
/* Define if strerror_r is available in <string.h>. */
/* #undef HAVE_STRERROR_R */
 
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
 
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
 
/* Define to 1 if you have the `strtof' function. */
#define HAVE_STRTOF 1
 
/* Define to 1 if you have the `strtold' function. */
#define HAVE_STRTOLD 1
 
/* Define if strxfrm_l is available in <string.h>. */
/* #undef HAVE_STRXFRM_L */
 
/* Define to 1 if the target runtime linker supports binding the same symbol
to different versions. */
/* #undef HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT */
 
/* Define to 1 if you have the <sys/filio.h> header file. */
/* #undef HAVE_SYS_FILIO_H */
 
/* Define to 1 if you have the <sys/ioctl.h> header file. */
/* #undef HAVE_SYS_IOCTL_H */
 
/* Define to 1 if you have the <sys/ipc.h> header file. */
/* #undef HAVE_SYS_IPC_H */
 
/* Define to 1 if you have the <sys/isa_defs.h> header file. */
/* #undef HAVE_SYS_ISA_DEFS_H */
 
/* Define to 1 if you have the <sys/machine.h> header file. */
/* #undef HAVE_SYS_MACHINE_H */
 
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
 
/* Define to 1 if you have the <sys/resource.h> header file. */
#define HAVE_SYS_RESOURCE_H 1
 
/* Define to 1 if you have a suitable <sys/sdt.h> header file */
/* #undef HAVE_SYS_SDT_H */
 
/* Define to 1 if you have the <sys/sem.h> header file. */
/* #undef HAVE_SYS_SEM_H */
 
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
 
/* Define to 1 if you have the <sys/sysinfo.h> header file. */
/* #undef HAVE_SYS_SYSINFO_H */
 
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
 
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
 
/* Define to 1 if you have the <sys/uio.h> header file. */
/* #undef HAVE_SYS_UIO_H */
 
/* Define if S_IFREG is available in <sys/stat.h>. */
/* #undef HAVE_S_IFREG */
 
/* Define if S_IFREG is available in <sys/stat.h>. */
#define HAVE_S_ISREG 1
 
/* Define to 1 if you have the `tanf' function. */
#define HAVE_TANF 1
 
/* Define to 1 if you have the `tanhf' function. */
#define HAVE_TANHF 1
 
/* Define to 1 if you have the `tanhl' function. */
#define HAVE_TANHL 1
 
/* Define to 1 if you have the `tanl' function. */
#define HAVE_TANL 1
 
/* Define to 1 if you have the <tgmath.h> header file. */
/* #undef HAVE_TGMATH_H */
 
/* Define to 1 if the target supports thread-local storage. */
/* #undef HAVE_TLS */
 
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
 
/* Defined if usleep exists. */
/* #undef HAVE_USLEEP */
 
/* Defined if vfwscanf exists. */
#define HAVE_VFWSCANF 1
 
/* Defined if vswscanf exists. */
#define HAVE_VSWSCANF 1
 
/* Defined if vwscanf exists. */
#define HAVE_VWSCANF 1
 
/* Define to 1 if you have the <wchar.h> header file. */
#define HAVE_WCHAR_H 1
 
/* Defined if wcstof exists. */
#define HAVE_WCSTOF 1
 
/* Define to 1 if you have the <wctype.h> header file. */
#define HAVE_WCTYPE_H 1
 
/* Defined if Sleep exists. */
/* #undef HAVE_WIN32_SLEEP */
 
/* Define if writev is available in <sys/uio.h>. */
/* #undef HAVE_WRITEV */
 
/* Define to 1 if you have the `_acosf' function. */
/* #undef HAVE__ACOSF */
 
/* Define to 1 if you have the `_acosl' function. */
/* #undef HAVE__ACOSL */
 
/* Define to 1 if you have the `_asinf' function. */
/* #undef HAVE__ASINF */
 
/* Define to 1 if you have the `_asinl' function. */
/* #undef HAVE__ASINL */
 
/* Define to 1 if you have the `_atan2f' function. */
/* #undef HAVE__ATAN2F */
 
/* Define to 1 if you have the `_atan2l' function. */
/* #undef HAVE__ATAN2L */
 
/* Define to 1 if you have the `_atanf' function. */
/* #undef HAVE__ATANF */
 
/* Define to 1 if you have the `_atanl' function. */
/* #undef HAVE__ATANL */
 
/* Define to 1 if you have the `_ceilf' function. */
/* #undef HAVE__CEILF */
 
/* Define to 1 if you have the `_ceill' function. */
/* #undef HAVE__CEILL */
 
/* Define to 1 if you have the `_cosf' function. */
/* #undef HAVE__COSF */
 
/* Define to 1 if you have the `_coshf' function. */
/* #undef HAVE__COSHF */
 
/* Define to 1 if you have the `_coshl' function. */
/* #undef HAVE__COSHL */
 
/* Define to 1 if you have the `_cosl' function. */
/* #undef HAVE__COSL */
 
/* Define to 1 if you have the `_expf' function. */
/* #undef HAVE__EXPF */
 
/* Define to 1 if you have the `_expl' function. */
/* #undef HAVE__EXPL */
 
/* Define to 1 if you have the `_fabsf' function. */
/* #undef HAVE__FABSF */
 
/* Define to 1 if you have the `_fabsl' function. */
/* #undef HAVE__FABSL */
 
/* Define to 1 if you have the `_finite' function. */
/* #undef HAVE__FINITE */
 
/* Define to 1 if you have the `_finitef' function. */
/* #undef HAVE__FINITEF */
 
/* Define to 1 if you have the `_finitel' function. */
/* #undef HAVE__FINITEL */
 
/* Define to 1 if you have the `_floorf' function. */
/* #undef HAVE__FLOORF */
 
/* Define to 1 if you have the `_floorl' function. */
/* #undef HAVE__FLOORL */
 
/* Define to 1 if you have the `_fmodf' function. */
/* #undef HAVE__FMODF */
 
/* Define to 1 if you have the `_fmodl' function. */
/* #undef HAVE__FMODL */
 
/* Define to 1 if you have the `_fpclass' function. */
/* #undef HAVE__FPCLASS */
 
/* Define to 1 if you have the `_frexpf' function. */
/* #undef HAVE__FREXPF */
 
/* Define to 1 if you have the `_frexpl' function. */
/* #undef HAVE__FREXPL */
 
/* Define to 1 if you have the `_hypot' function. */
/* #undef HAVE__HYPOT */
 
/* Define to 1 if you have the `_hypotf' function. */
/* #undef HAVE__HYPOTF */
 
/* Define to 1 if you have the `_hypotl' function. */
/* #undef HAVE__HYPOTL */
 
/* Define to 1 if you have the `_isinf' function. */
/* #undef HAVE__ISINF */
 
/* Define to 1 if you have the `_isinff' function. */
/* #undef HAVE__ISINFF */
 
/* Define to 1 if you have the `_isinfl' function. */
/* #undef HAVE__ISINFL */
 
/* Define to 1 if you have the `_isnan' function. */
/* #undef HAVE__ISNAN */
 
/* Define to 1 if you have the `_isnanf' function. */
/* #undef HAVE__ISNANF */
 
/* Define to 1 if you have the `_isnanl' function. */
/* #undef HAVE__ISNANL */
 
/* Define to 1 if you have the `_ldexpf' function. */
/* #undef HAVE__LDEXPF */
 
/* Define to 1 if you have the `_ldexpl' function. */
/* #undef HAVE__LDEXPL */
 
/* Define to 1 if you have the `_log10f' function. */
/* #undef HAVE__LOG10F */
 
/* Define to 1 if you have the `_log10l' function. */
/* #undef HAVE__LOG10L */
 
/* Define to 1 if you have the `_logf' function. */
/* #undef HAVE__LOGF */
 
/* Define to 1 if you have the `_logl' function. */
/* #undef HAVE__LOGL */
 
/* Define to 1 if you have the `_modf' function. */
/* #undef HAVE__MODF */
 
/* Define to 1 if you have the `_modff' function. */
/* #undef HAVE__MODFF */
 
/* Define to 1 if you have the `_modfl' function. */
/* #undef HAVE__MODFL */
 
/* Define to 1 if you have the `_powf' function. */
/* #undef HAVE__POWF */
 
/* Define to 1 if you have the `_powl' function. */
/* #undef HAVE__POWL */
 
/* Define to 1 if you have the `_qfpclass' function. */
/* #undef HAVE__QFPCLASS */
 
/* Define to 1 if you have the `_sincos' function. */
/* #undef HAVE__SINCOS */
 
/* Define to 1 if you have the `_sincosf' function. */
/* #undef HAVE__SINCOSF */
 
/* Define to 1 if you have the `_sincosl' function. */
/* #undef HAVE__SINCOSL */
 
/* Define to 1 if you have the `_sinf' function. */
/* #undef HAVE__SINF */
 
/* Define to 1 if you have the `_sinhf' function. */
/* #undef HAVE__SINHF */
 
/* Define to 1 if you have the `_sinhl' function. */
/* #undef HAVE__SINHL */
 
/* Define to 1 if you have the `_sinl' function. */
/* #undef HAVE__SINL */
 
/* Define to 1 if you have the `_sqrtf' function. */
/* #undef HAVE__SQRTF */
 
/* Define to 1 if you have the `_sqrtl' function. */
/* #undef HAVE__SQRTL */
 
/* Define to 1 if you have the `_tanf' function. */
/* #undef HAVE__TANF */
 
/* Define to 1 if you have the `_tanhf' function. */
/* #undef HAVE__TANHF */
 
/* Define to 1 if you have the `_tanhl' function. */
/* #undef HAVE__TANHL */
 
/* Define to 1 if you have the `_tanl' function. */
/* #undef HAVE__TANL */
 
/* Define to 1 if you have the `__cxa_thread_atexit_impl' function. */
/* #undef HAVE___CXA_THREAD_ATEXIT_IMPL */
 
/* Define as const if the declaration of iconv() needs const. */
/* #undef ICONV_CONST */
 
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/"
 
/* Name of package */
/* #undef PACKAGE */
 
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
 
/* Define to the full name of this package. */
#define PACKAGE_NAME "package-unused"
 
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "package-unused version-unused"
 
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libstdc++"
 
/* Define to the home page for this package. */
#define PACKAGE_URL ""
 
/* Define to the version of this package. */
#define PACKAGE_VERSION "version-unused"
 
/* The size of `char', as computed by sizeof. */
/* #undef SIZEOF_CHAR */
 
/* The size of `int', as computed by sizeof. */
/* #undef SIZEOF_INT */
 
/* The size of `long', as computed by sizeof. */
/* #undef SIZEOF_LONG */
 
/* The size of `short', as computed by sizeof. */
/* #undef SIZEOF_SHORT */
 
/* The size of `void *', as computed by sizeof. */
/* #undef SIZEOF_VOID_P */
 
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
 
/* Version number of package */
/* #undef VERSION */
 
/* Define if the compiler supports C++11 atomics. */
#define _GLIBCXX_ATOMIC_BUILTINS 1
 
/* Define to use concept checking code from the boost libraries. */
/* #undef _GLIBCXX_CONCEPT_CHECKS */
 
/* Define to 1 if a fully dynamic basic_string is wanted, 0 to disable,
undefined for platform defaults */
#define _GLIBCXX_FULLY_DYNAMIC_STRING 0
 
/* Define if gthreads library is available. */
/* #undef _GLIBCXX_HAS_GTHREADS */
 
/* Define to 1 if a full hosted library is built, or 0 if freestanding. */
#define _GLIBCXX_HOSTED 1
 
/* Define if compatibility should be provided for -mlong-double-64. */
/* #undef _GLIBCXX_LONG_DOUBLE_COMPAT */
 
/* Define if ptrdiff_t is int. */
#define _GLIBCXX_PTRDIFF_T_IS_INT 1
 
/* Define if using setrlimit to set resource limits during "make check" */
/* #undef _GLIBCXX_RES_LIMITS */
 
/* Define if size_t is unsigned int. */
#define _GLIBCXX_SIZE_T_IS_UINT 1
 
/* Define if the compiler is configured for setjmp/longjmp exceptions. */
/* #undef _GLIBCXX_SJLJ_EXCEPTIONS */
 
/* Define to the value of the EOF integer constant. */
#define _GLIBCXX_STDIO_EOF -1
 
/* Define to the value of the SEEK_CUR integer constant. */
#define _GLIBCXX_STDIO_SEEK_CUR 1
 
/* Define to the value of the SEEK_END integer constant. */
#define _GLIBCXX_STDIO_SEEK_END 2
 
/* Define to use symbol versioning in the shared library. */
/* #undef _GLIBCXX_SYMVER */
 
/* Define to use darwin versioning in the shared library. */
/* #undef _GLIBCXX_SYMVER_DARWIN */
 
/* Define to use GNU versioning in the shared library. */
/* #undef _GLIBCXX_SYMVER_GNU */
 
/* Define to use GNU namespace versioning in the shared library. */
/* #undef _GLIBCXX_SYMVER_GNU_NAMESPACE */
 
/* Define to use Sun versioning in the shared library. */
/* #undef _GLIBCXX_SYMVER_SUN */
 
/* Define if C99 functions or macros from <wchar.h>, <math.h>, <complex.h>,
<stdio.h>, and <stdlib.h> can be used or exposed. */
/* #undef _GLIBCXX_USE_C99 */
 
/* Define if C99 functions in <complex.h> should be used in <complex>. Using
compiler builtins for these functions requires corresponding C99 library
functions to be present. */
/* #undef _GLIBCXX_USE_C99_COMPLEX */
 
/* Define if C99 functions in <complex.h> should be used in <tr1/complex>.
Using compiler builtins for these functions requires corresponding C99
library functions to be present. */
/* #undef _GLIBCXX_USE_C99_COMPLEX_TR1 */
 
/* Define if C99 functions in <ctype.h> should be imported in <tr1/cctype> in
namespace std::tr1. */
/* #undef _GLIBCXX_USE_C99_CTYPE_TR1 */
 
/* Define if C99 functions in <fenv.h> should be imported in <tr1/cfenv> in
namespace std::tr1. */
/* #undef _GLIBCXX_USE_C99_FENV_TR1 */
 
/* Define if C99 functions in <inttypes.h> should be imported in
<tr1/cinttypes> in namespace std::tr1. */
#define _GLIBCXX_USE_C99_INTTYPES_TR1 1
 
/* Define if wchar_t C99 functions in <inttypes.h> should be imported in
<tr1/cinttypes> in namespace std::tr1. */
#define _GLIBCXX_USE_C99_INTTYPES_WCHAR_T_TR1 1
 
/* Define if C99 functions or macros in <math.h> should be imported in <cmath>
in namespace std. */
#define _GLIBCXX_USE_C99_MATH 1
 
/* Define if C99 functions or macros in <math.h> should be imported in
<tr1/cmath> in namespace std::tr1. */
#define _GLIBCXX_USE_C99_MATH_TR1 1
 
/* Define if C99 types in <stdint.h> should be imported in <tr1/cstdint> in
namespace std::tr1. */
#define _GLIBCXX_USE_C99_STDINT_TR1 1
 
/* Defined if clock_gettime has monotonic clock support. */
/* #undef _GLIBCXX_USE_CLOCK_MONOTONIC */
 
/* Defined if clock_gettime syscall has monotonic and realtime clock support. */
/* #undef _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL */
 
/* Defined if clock_gettime has realtime clock support. */
/* #undef _GLIBCXX_USE_CLOCK_REALTIME */
 
/* Define if ISO/IEC TR 24733 decimal floating point types are supported on
this host. */
#define _GLIBCXX_USE_DECIMAL_FLOAT 1
 
/* Define if __float128 is supported on this host. */
#define _GLIBCXX_USE_FLOAT128 1
 
/* Defined if gettimeofday is available. */
#define _GLIBCXX_USE_GETTIMEOFDAY 1
 
/* Define if get_nprocs is available in <sys/sysinfo.h>. */
/* #undef _GLIBCXX_USE_GET_NPROCS */
 
/* Define if __int128 is supported on this host. */
/* #undef _GLIBCXX_USE_INT128 */
 
/* Define if LFS support is available. */
/* #undef _GLIBCXX_USE_LFS */
 
/* Define if code specialized for long long should be used. */
#define _GLIBCXX_USE_LONG_LONG 1
 
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
 
/* Define if NLS translations are to be used. */
/* #undef _GLIBCXX_USE_NLS */
 
/* Define if pthreads_num_processors_np is available in <pthread.h>. */
/* #undef _GLIBCXX_USE_PTHREADS_NUM_PROCESSORS_NP */
 
/* Define if /dev/random and /dev/urandom are available for the random_device
of TR1 (Chapter 5.1). */
/* #undef _GLIBCXX_USE_RANDOM_TR1 */
 
/* Defined if sched_yield is available. */
/* #undef _GLIBCXX_USE_SCHED_YIELD */
 
/* Define if _SC_NPROCESSORS_ONLN is available in <unistd.h>. */
/* #undef _GLIBCXX_USE_SC_NPROCESSORS_ONLN */
 
/* Define if _SC_NPROC_ONLN is available in <unistd.h>. */
/* #undef _GLIBCXX_USE_SC_NPROC_ONLN */
 
/* Define if sysctl(), CTL_HW and HW_NCPU are available in <sys/sysctl.h>. */
/* #undef _GLIBCXX_USE_SYSCTL_HW_NCPU */
 
/* Define if code specialized for wchar_t should be used. */
//#define _GLIBCXX_USE_WCHAR_T 1
 
/* Define to 1 if a verbose library is built, or 0 otherwise. */
#define _GLIBCXX_VERBOSE 1
 
/* Defined if as can handle rdrand. */
#define _GLIBCXX_X86_RDRAND 1
 
/* Define to 1 if mutex_timedlock is available. */
#define _GTHREAD_USE_MUTEX_TIMEDLOCK 1
 
#if defined (HAVE__ACOSF) && ! defined (HAVE_ACOSF)
# define HAVE_ACOSF 1
# define acosf _acosf
#endif
 
#if defined (HAVE__ACOSL) && ! defined (HAVE_ACOSL)
# define HAVE_ACOSL 1
# define acosl _acosl
#endif
 
#if defined (HAVE__ASINF) && ! defined (HAVE_ASINF)
# define HAVE_ASINF 1
# define asinf _asinf
#endif
 
#if defined (HAVE__ASINL) && ! defined (HAVE_ASINL)
# define HAVE_ASINL 1
# define asinl _asinl
#endif
 
#if defined (HAVE__ATAN2F) && ! defined (HAVE_ATAN2F)
# define HAVE_ATAN2F 1
# define atan2f _atan2f
#endif
 
#if defined (HAVE__ATAN2L) && ! defined (HAVE_ATAN2L)
# define HAVE_ATAN2L 1
# define atan2l _atan2l
#endif
 
#if defined (HAVE__ATANF) && ! defined (HAVE_ATANF)
# define HAVE_ATANF 1
# define atanf _atanf
#endif
 
#if defined (HAVE__ATANL) && ! defined (HAVE_ATANL)
# define HAVE_ATANL 1
# define atanl _atanl
#endif
 
#if defined (HAVE__CEILF) && ! defined (HAVE_CEILF)
# define HAVE_CEILF 1
# define ceilf _ceilf
#endif
 
#if defined (HAVE__CEILL) && ! defined (HAVE_CEILL)
# define HAVE_CEILL 1
# define ceill _ceill
#endif
 
#if defined (HAVE__COSF) && ! defined (HAVE_COSF)
# define HAVE_COSF 1
# define cosf _cosf
#endif
 
#if defined (HAVE__COSHF) && ! defined (HAVE_COSHF)
# define HAVE_COSHF 1
# define coshf _coshf
#endif
 
#if defined (HAVE__COSHL) && ! defined (HAVE_COSHL)
# define HAVE_COSHL 1
# define coshl _coshl
#endif
 
#if defined (HAVE__COSL) && ! defined (HAVE_COSL)
# define HAVE_COSL 1
# define cosl _cosl
#endif
 
#if defined (HAVE__EXPF) && ! defined (HAVE_EXPF)
# define HAVE_EXPF 1
# define expf _expf
#endif
 
#if defined (HAVE__EXPL) && ! defined (HAVE_EXPL)
# define HAVE_EXPL 1
# define expl _expl
#endif
 
#if defined (HAVE__FABSF) && ! defined (HAVE_FABSF)
# define HAVE_FABSF 1
# define fabsf _fabsf
#endif
 
#if defined (HAVE__FABSL) && ! defined (HAVE_FABSL)
# define HAVE_FABSL 1
# define fabsl _fabsl
#endif
 
#if defined (HAVE__FINITE) && ! defined (HAVE_FINITE)
# define HAVE_FINITE 1
# define finite _finite
#endif
 
#if defined (HAVE__FINITEF) && ! defined (HAVE_FINITEF)
# define HAVE_FINITEF 1
# define finitef _finitef
#endif
 
#if defined (HAVE__FINITEL) && ! defined (HAVE_FINITEL)
# define HAVE_FINITEL 1
# define finitel _finitel
#endif
 
#if defined (HAVE__FLOORF) && ! defined (HAVE_FLOORF)
# define HAVE_FLOORF 1
# define floorf _floorf
#endif
 
#if defined (HAVE__FLOORL) && ! defined (HAVE_FLOORL)
# define HAVE_FLOORL 1
# define floorl _floorl
#endif
 
#if defined (HAVE__FMODF) && ! defined (HAVE_FMODF)
# define HAVE_FMODF 1
# define fmodf _fmodf
#endif
 
#if defined (HAVE__FMODL) && ! defined (HAVE_FMODL)
# define HAVE_FMODL 1
# define fmodl _fmodl
#endif
 
#if defined (HAVE__FPCLASS) && ! defined (HAVE_FPCLASS)
# define HAVE_FPCLASS 1
# define fpclass _fpclass
#endif
 
#if defined (HAVE__FREXPF) && ! defined (HAVE_FREXPF)
# define HAVE_FREXPF 1
# define frexpf _frexpf
#endif
 
#if defined (HAVE__FREXPL) && ! defined (HAVE_FREXPL)
# define HAVE_FREXPL 1
# define frexpl _frexpl
#endif
 
#if defined (HAVE__HYPOT) && ! defined (HAVE_HYPOT)
# define HAVE_HYPOT 1
# define hypot _hypot
#endif
 
#if defined (HAVE__HYPOTF) && ! defined (HAVE_HYPOTF)
# define HAVE_HYPOTF 1
# define hypotf _hypotf
#endif
 
#if defined (HAVE__HYPOTL) && ! defined (HAVE_HYPOTL)
# define HAVE_HYPOTL 1
# define hypotl _hypotl
#endif
 
#if defined (HAVE__ISINF) && ! defined (HAVE_ISINF)
# define HAVE_ISINF 1
# define isinf _isinf
#endif
 
#if defined (HAVE__ISINFF) && ! defined (HAVE_ISINFF)
# define HAVE_ISINFF 1
# define isinff _isinff
#endif
 
#if defined (HAVE__ISINFL) && ! defined (HAVE_ISINFL)
# define HAVE_ISINFL 1
# define isinfl _isinfl
#endif
 
#if defined (HAVE__ISNAN) && ! defined (HAVE_ISNAN)
# define HAVE_ISNAN 1
# define isnan _isnan
#endif
 
#if defined (HAVE__ISNANF) && ! defined (HAVE_ISNANF)
# define HAVE_ISNANF 1
# define isnanf _isnanf
#endif
 
#if defined (HAVE__ISNANL) && ! defined (HAVE_ISNANL)
# define HAVE_ISNANL 1
# define isnanl _isnanl
#endif
 
#if defined (HAVE__LDEXPF) && ! defined (HAVE_LDEXPF)
# define HAVE_LDEXPF 1
# define ldexpf _ldexpf
#endif
 
#if defined (HAVE__LDEXPL) && ! defined (HAVE_LDEXPL)
# define HAVE_LDEXPL 1
# define ldexpl _ldexpl
#endif
 
#if defined (HAVE__LOG10F) && ! defined (HAVE_LOG10F)
# define HAVE_LOG10F 1
# define log10f _log10f
#endif
 
#if defined (HAVE__LOG10L) && ! defined (HAVE_LOG10L)
# define HAVE_LOG10L 1
# define log10l _log10l
#endif
 
#if defined (HAVE__LOGF) && ! defined (HAVE_LOGF)
# define HAVE_LOGF 1
# define logf _logf
#endif
 
#if defined (HAVE__LOGL) && ! defined (HAVE_LOGL)
# define HAVE_LOGL 1
# define logl _logl
#endif
 
#if defined (HAVE__MODF) && ! defined (HAVE_MODF)
# define HAVE_MODF 1
# define modf _modf
#endif
 
#if defined (HAVE__MODFF) && ! defined (HAVE_MODFF)
# define HAVE_MODFF 1
# define modff _modff
#endif
 
#if defined (HAVE__MODFL) && ! defined (HAVE_MODFL)
# define HAVE_MODFL 1
# define modfl _modfl
#endif
 
#if defined (HAVE__POWF) && ! defined (HAVE_POWF)
# define HAVE_POWF 1
# define powf _powf
#endif
 
#if defined (HAVE__POWL) && ! defined (HAVE_POWL)
# define HAVE_POWL 1
# define powl _powl
#endif
 
#if defined (HAVE__QFPCLASS) && ! defined (HAVE_QFPCLASS)
# define HAVE_QFPCLASS 1
# define qfpclass _qfpclass
#endif
 
#if defined (HAVE__SINCOS) && ! defined (HAVE_SINCOS)
# define HAVE_SINCOS 1
# define sincos _sincos
#endif
 
#if defined (HAVE__SINCOSF) && ! defined (HAVE_SINCOSF)
# define HAVE_SINCOSF 1
# define sincosf _sincosf
#endif
 
#if defined (HAVE__SINCOSL) && ! defined (HAVE_SINCOSL)
# define HAVE_SINCOSL 1
# define sincosl _sincosl
#endif
 
#if defined (HAVE__SINF) && ! defined (HAVE_SINF)
# define HAVE_SINF 1
# define sinf _sinf
#endif
 
#if defined (HAVE__SINHF) && ! defined (HAVE_SINHF)
# define HAVE_SINHF 1
# define sinhf _sinhf
#endif
 
#if defined (HAVE__SINHL) && ! defined (HAVE_SINHL)
# define HAVE_SINHL 1
# define sinhl _sinhl
#endif
 
#if defined (HAVE__SINL) && ! defined (HAVE_SINL)
# define HAVE_SINL 1
# define sinl _sinl
#endif
 
#if defined (HAVE__SQRTF) && ! defined (HAVE_SQRTF)
# define HAVE_SQRTF 1
# define sqrtf _sqrtf
#endif
 
#if defined (HAVE__SQRTL) && ! defined (HAVE_SQRTL)
# define HAVE_SQRTL 1
# define sqrtl _sqrtl
#endif
 
#if defined (HAVE__STRTOF) && ! defined (HAVE_STRTOF)
# define HAVE_STRTOF 1
# define strtof _strtof
#endif
 
#if defined (HAVE__STRTOLD) && ! defined (HAVE_STRTOLD)
# define HAVE_STRTOLD 1
# define strtold _strtold
#endif
 
#if defined (HAVE__TANF) && ! defined (HAVE_TANF)
# define HAVE_TANF 1
# define tanf _tanf
#endif
 
#if defined (HAVE__TANHF) && ! defined (HAVE_TANHF)
# define HAVE_TANHF 1
# define tanhf _tanhf
#endif
 
#if defined (HAVE__TANHL) && ! defined (HAVE_TANHL)
# define HAVE_TANHL 1
# define tanhl _tanhl
#endif
 
#if defined (HAVE__TANL) && ! defined (HAVE_TANL)
# define HAVE_TANL 1
# define tanl _tanl
#endif
/contrib/sdk/sources/libstdc++-v3/libsupc++/cp-demangle.h
0,0 → 1,169
/* Internal demangler interface for g++ V3 ABI.
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010
Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@wasabisystems.com>.
 
This file is part of the libiberty library, which is part of GCC.
 
This file 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 of the License, or
(at your option) any later version.
 
In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
compiled version of this file into combinations with other programs,
and to distribute those combinations without any restriction coming
from the use of this file. (The General Public License restrictions
do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combined
executable.)
 
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
 
/* This file provides some definitions shared by cp-demangle.c and
cp-demint.c. It should not be included by any other files. */
 
/* Information we keep for operators. */
 
struct demangle_operator_info
{
/* Mangled name. */
const char *code;
/* Real name. */
const char *name;
/* Length of real name. */
int len;
/* Number of arguments. */
int args;
};
 
/* How to print the value of a builtin type. */
 
enum d_builtin_type_print
{
/* Print as (type)val. */
D_PRINT_DEFAULT,
/* Print as integer. */
D_PRINT_INT,
/* Print as unsigned integer, with trailing "u". */
D_PRINT_UNSIGNED,
/* Print as long, with trailing "l". */
D_PRINT_LONG,
/* Print as unsigned long, with trailing "ul". */
D_PRINT_UNSIGNED_LONG,
/* Print as long long, with trailing "ll". */
D_PRINT_LONG_LONG,
/* Print as unsigned long long, with trailing "ull". */
D_PRINT_UNSIGNED_LONG_LONG,
/* Print as bool. */
D_PRINT_BOOL,
/* Print as float--put value in square brackets. */
D_PRINT_FLOAT,
/* Print in usual way, but here to detect void. */
D_PRINT_VOID
};
 
/* Information we keep for a builtin type. */
 
struct demangle_builtin_type_info
{
/* Type name. */
const char *name;
/* Length of type name. */
int len;
/* Type name when using Java. */
const char *java_name;
/* Length of java name. */
int java_len;
/* How to print a value of this type. */
enum d_builtin_type_print print;
};
 
/* The information structure we pass around. */
 
struct d_info
{
/* The string we are demangling. */
const char *s;
/* The end of the string we are demangling. */
const char *send;
/* The options passed to the demangler. */
int options;
/* The next character in the string to consider. */
const char *n;
/* The array of components. */
struct demangle_component *comps;
/* The index of the next available component. */
int next_comp;
/* The number of available component structures. */
int num_comps;
/* The array of substitutions. */
struct demangle_component **subs;
/* The index of the next substitution. */
int next_sub;
/* The number of available entries in the subs array. */
int num_subs;
/* The number of substitutions which we actually made from the subs
array, plus the number of template parameter references we
saw. */
int did_subs;
/* The last name we saw, for constructors and destructors. */
struct demangle_component *last_name;
/* A running total of the length of large expansions from the
mangled name to the demangled name, such as standard
substitutions and builtin types. */
int expansion;
};
 
/* To avoid running past the ending '\0', don't:
- call d_peek_next_char if d_peek_char returned '\0'
- call d_advance with an 'i' that is too large
- call d_check_char(di, '\0')
Everything else is safe. */
#define d_peek_char(di) (*((di)->n))
#define d_peek_next_char(di) ((di)->n[1])
#define d_advance(di, i) ((di)->n += (i))
#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
#define d_str(di) ((di)->n)
 
/* Functions and arrays in cp-demangle.c which are referenced by
functions in cp-demint.c. */
#ifdef IN_GLIBCPP_V3
#define CP_STATIC_IF_GLIBCPP_V3 static
#else
#define CP_STATIC_IF_GLIBCPP_V3 extern
#endif
 
#ifndef IN_GLIBCPP_V3
extern const struct demangle_operator_info cplus_demangle_operators[];
#endif
 
#define D_BUILTIN_TYPE_COUNT (33)
 
CP_STATIC_IF_GLIBCPP_V3
const struct demangle_builtin_type_info
cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
 
CP_STATIC_IF_GLIBCPP_V3
struct demangle_component *
cplus_demangle_mangled_name (struct d_info *, int);
 
CP_STATIC_IF_GLIBCPP_V3
struct demangle_component *
cplus_demangle_type (struct d_info *);
 
extern void
cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
 
/* cp-demangle.c needs to define this a little differently */
#undef CP_STATIC_IF_GLIBCPP_V3
/contrib/sdk/sources/libstdc++-v3/libsupc++/demangle.h
0,0 → 1,671
/* Defs for interface to demanglers.
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License
as published by the Free Software Foundation; either version 2, or
(at your option) any later version.
 
In addition to the permissions in the GNU Library General Public
License, the Free Software Foundation gives you unlimited
permission to link the compiled version of this file into
combinations with other programs, and to distribute those
combinations without any restriction coming from the use of this
file. (The Library Public License restrictions do apply in other
respects; for example, they cover modification of the file, and
distribution when not linked into a combined executable.)
 
This program 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
Library General Public License for more details.
 
You should have received a copy of the GNU Library General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
 
 
#if !defined (DEMANGLE_H)
#define DEMANGLE_H
 
#include "libiberty.h"
 
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
 
/* Options passed to cplus_demangle (in 2nd parameter). */
 
#define DMGL_NO_OPTS 0 /* For readability... */
#define DMGL_PARAMS (1 << 0) /* Include function args */
#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
#define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */
#define DMGL_VERBOSE (1 << 3) /* Include implementation details. */
#define DMGL_TYPES (1 << 4) /* Also try to demangle type encodings. */
#define DMGL_RET_POSTFIX (1 << 5) /* Print function return types (when
present) after function signature.
It applies only to the toplevel
function type. */
#define DMGL_RET_DROP (1 << 6) /* Suppress printing function return
types, even if present. It applies
only to the toplevel function type.
*/
 
#define DMGL_AUTO (1 << 8)
#define DMGL_GNU (1 << 9)
#define DMGL_LUCID (1 << 10)
#define DMGL_ARM (1 << 11)
#define DMGL_HP (1 << 12) /* For the HP aCC compiler;
same as ARM except for
template arguments, etc. */
#define DMGL_EDG (1 << 13)
#define DMGL_GNU_V3 (1 << 14)
#define DMGL_GNAT (1 << 15)
 
/* If none of these are set, use 'current_demangling_style' as the default. */
#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_V3|DMGL_JAVA|DMGL_GNAT)
 
/* Enumeration of possible demangling styles.
 
Lucid and ARM styles are still kept logically distinct, even though
they now both behave identically. The resulting style is actual the
union of both. I.E. either style recognizes both "__pt__" and "__rf__"
for operator "->", even though the first is lucid style and the second
is ARM style. (FIXME?) */
 
extern enum demangling_styles
{
no_demangling = -1,
unknown_demangling = 0,
auto_demangling = DMGL_AUTO,
gnu_demangling = DMGL_GNU,
lucid_demangling = DMGL_LUCID,
arm_demangling = DMGL_ARM,
hp_demangling = DMGL_HP,
edg_demangling = DMGL_EDG,
gnu_v3_demangling = DMGL_GNU_V3,
java_demangling = DMGL_JAVA,
gnat_demangling = DMGL_GNAT
} current_demangling_style;
 
/* Define string names for the various demangling styles. */
 
#define NO_DEMANGLING_STYLE_STRING "none"
#define AUTO_DEMANGLING_STYLE_STRING "auto"
#define GNU_DEMANGLING_STYLE_STRING "gnu"
#define LUCID_DEMANGLING_STYLE_STRING "lucid"
#define ARM_DEMANGLING_STYLE_STRING "arm"
#define HP_DEMANGLING_STYLE_STRING "hp"
#define EDG_DEMANGLING_STYLE_STRING "edg"
#define GNU_V3_DEMANGLING_STYLE_STRING "gnu-v3"
#define JAVA_DEMANGLING_STYLE_STRING "java"
#define GNAT_DEMANGLING_STYLE_STRING "gnat"
 
/* Some macros to test what demangling style is active. */
 
#define CURRENT_DEMANGLING_STYLE current_demangling_style
#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
#define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
#define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
#define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
#define GNU_V3_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_V3)
#define JAVA_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_JAVA)
#define GNAT_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNAT)
 
/* Provide information about the available demangle styles. This code is
pulled from gdb into libiberty because it is useful to binutils also. */
 
extern const struct demangler_engine
{
const char *const demangling_style_name;
const enum demangling_styles demangling_style;
const char *const demangling_style_doc;
} libiberty_demanglers[];
 
extern char *
cplus_demangle (const char *mangled, int options);
 
extern int
cplus_demangle_opname (const char *opname, char *result, int options);
 
extern const char *
cplus_mangle_opname (const char *opname, int options);
 
/* Note: This sets global state. FIXME if you care about multi-threading. */
 
extern void
set_cplus_marker_for_demangling (int ch);
 
extern enum demangling_styles
cplus_demangle_set_style (enum demangling_styles style);
 
extern enum demangling_styles
cplus_demangle_name_to_style (const char *name);
 
/* Callback typedef for allocation-less demangler interfaces. */
typedef void (*demangle_callbackref) (const char *, size_t, void *);
 
/* V3 ABI demangling entry points, defined in cp-demangle.c. Callback
variants return non-zero on success, zero on error. char* variants
return a string allocated by malloc on success, NULL on error. */
extern int
cplus_demangle_v3_callback (const char *mangled, int options,
demangle_callbackref callback, void *opaque);
 
extern char*
cplus_demangle_v3 (const char *mangled, int options);
 
extern int
java_demangle_v3_callback (const char *mangled,
demangle_callbackref callback, void *opaque);
 
extern char*
java_demangle_v3 (const char *mangled);
 
char *
ada_demangle (const char *mangled, int options);
 
enum gnu_v3_ctor_kinds {
gnu_v3_complete_object_ctor = 1,
gnu_v3_base_object_ctor,
gnu_v3_complete_object_allocating_ctor,
gnu_v3_object_ctor_group
};
 
/* Return non-zero iff NAME is the mangled form of a constructor name
in the G++ V3 ABI demangling style. Specifically, return an `enum
gnu_v3_ctor_kinds' value indicating what kind of constructor
it is. */
extern enum gnu_v3_ctor_kinds
is_gnu_v3_mangled_ctor (const char *name);
 
 
enum gnu_v3_dtor_kinds {
gnu_v3_deleting_dtor = 1,
gnu_v3_complete_object_dtor,
gnu_v3_base_object_dtor,
gnu_v3_object_dtor_group
};
 
/* Return non-zero iff NAME is the mangled form of a destructor name
in the G++ V3 ABI demangling style. Specifically, return an `enum
gnu_v3_dtor_kinds' value, indicating what kind of destructor
it is. */
extern enum gnu_v3_dtor_kinds
is_gnu_v3_mangled_dtor (const char *name);
 
/* The V3 demangler works in two passes. The first pass builds a tree
representation of the mangled name, and the second pass turns the
tree representation into a demangled string. Here we define an
interface to permit a caller to build their own tree
representation, which they can pass to the demangler to get a
demangled string. This can be used to canonicalize user input into
something which the demangler might output. It could also be used
by other demanglers in the future. */
 
/* These are the component types which may be found in the tree. Many
component types have one or two subtrees, referred to as left and
right (a component type with only one subtree puts it in the left
subtree). */
 
enum demangle_component_type
{
/* A name, with a length and a pointer to a string. */
DEMANGLE_COMPONENT_NAME,
/* A qualified name. The left subtree is a class or namespace or
some such thing, and the right subtree is a name qualified by
that class. */
DEMANGLE_COMPONENT_QUAL_NAME,
/* A local name. The left subtree describes a function, and the
right subtree is a name which is local to that function. */
DEMANGLE_COMPONENT_LOCAL_NAME,
/* A typed name. The left subtree is a name, and the right subtree
describes that name as a function. */
DEMANGLE_COMPONENT_TYPED_NAME,
/* A template. The left subtree is a template name, and the right
subtree is a template argument list. */
DEMANGLE_COMPONENT_TEMPLATE,
/* A template parameter. This holds a number, which is the template
parameter index. */
DEMANGLE_COMPONENT_TEMPLATE_PARAM,
/* A function parameter. This holds a number, which is the index. */
DEMANGLE_COMPONENT_FUNCTION_PARAM,
/* A constructor. This holds a name and the kind of
constructor. */
DEMANGLE_COMPONENT_CTOR,
/* A destructor. This holds a name and the kind of destructor. */
DEMANGLE_COMPONENT_DTOR,
/* A vtable. This has one subtree, the type for which this is a
vtable. */
DEMANGLE_COMPONENT_VTABLE,
/* A VTT structure. This has one subtree, the type for which this
is a VTT. */
DEMANGLE_COMPONENT_VTT,
/* A construction vtable. The left subtree is the type for which
this is a vtable, and the right subtree is the derived type for
which this vtable is built. */
DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
/* A typeinfo structure. This has one subtree, the type for which
this is the tpeinfo structure. */
DEMANGLE_COMPONENT_TYPEINFO,
/* A typeinfo name. This has one subtree, the type for which this
is the typeinfo name. */
DEMANGLE_COMPONENT_TYPEINFO_NAME,
/* A typeinfo function. This has one subtree, the type for which
this is the tpyeinfo function. */
DEMANGLE_COMPONENT_TYPEINFO_FN,
/* A thunk. This has one subtree, the name for which this is a
thunk. */
DEMANGLE_COMPONENT_THUNK,
/* A virtual thunk. This has one subtree, the name for which this
is a virtual thunk. */
DEMANGLE_COMPONENT_VIRTUAL_THUNK,
/* A covariant thunk. This has one subtree, the name for which this
is a covariant thunk. */
DEMANGLE_COMPONENT_COVARIANT_THUNK,
/* A Java class. This has one subtree, the type. */
DEMANGLE_COMPONENT_JAVA_CLASS,
/* A guard variable. This has one subtree, the name for which this
is a guard variable. */
DEMANGLE_COMPONENT_GUARD,
/* The init and wrapper functions for C++11 thread_local variables. */
DEMANGLE_COMPONENT_TLS_INIT,
DEMANGLE_COMPONENT_TLS_WRAPPER,
/* A reference temporary. This has one subtree, the name for which
this is a temporary. */
DEMANGLE_COMPONENT_REFTEMP,
/* A hidden alias. This has one subtree, the encoding for which it
is providing alternative linkage. */
DEMANGLE_COMPONENT_HIDDEN_ALIAS,
/* A standard substitution. This holds the name of the
substitution. */
DEMANGLE_COMPONENT_SUB_STD,
/* The restrict qualifier. The one subtree is the type which is
being qualified. */
DEMANGLE_COMPONENT_RESTRICT,
/* The volatile qualifier. The one subtree is the type which is
being qualified. */
DEMANGLE_COMPONENT_VOLATILE,
/* The const qualifier. The one subtree is the type which is being
qualified. */
DEMANGLE_COMPONENT_CONST,
/* The restrict qualifier modifying a member function. The one
subtree is the type which is being qualified. */
DEMANGLE_COMPONENT_RESTRICT_THIS,
/* The volatile qualifier modifying a member function. The one
subtree is the type which is being qualified. */
DEMANGLE_COMPONENT_VOLATILE_THIS,
/* The const qualifier modifying a member function. The one subtree
is the type which is being qualified. */
DEMANGLE_COMPONENT_CONST_THIS,
/* C++11 A reference modifying a member function. The one subtree is the
type which is being referenced. */
DEMANGLE_COMPONENT_REFERENCE_THIS,
/* C++11: An rvalue reference modifying a member function. The one
subtree is the type which is being referenced. */
DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS,
/* A vendor qualifier. The left subtree is the type which is being
qualified, and the right subtree is the name of the
qualifier. */
DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
/* A pointer. The one subtree is the type which is being pointed
to. */
DEMANGLE_COMPONENT_POINTER,
/* A reference. The one subtree is the type which is being
referenced. */
DEMANGLE_COMPONENT_REFERENCE,
/* C++0x: An rvalue reference. The one subtree is the type which is
being referenced. */
DEMANGLE_COMPONENT_RVALUE_REFERENCE,
/* A complex type. The one subtree is the base type. */
DEMANGLE_COMPONENT_COMPLEX,
/* An imaginary type. The one subtree is the base type. */
DEMANGLE_COMPONENT_IMAGINARY,
/* A builtin type. This holds the builtin type information. */
DEMANGLE_COMPONENT_BUILTIN_TYPE,
/* A vendor's builtin type. This holds the name of the type. */
DEMANGLE_COMPONENT_VENDOR_TYPE,
/* A function type. The left subtree is the return type. The right
subtree is a list of ARGLIST nodes. Either or both may be
NULL. */
DEMANGLE_COMPONENT_FUNCTION_TYPE,
/* An array type. The left subtree is the dimension, which may be
NULL, or a string (represented as DEMANGLE_COMPONENT_NAME), or an
expression. The right subtree is the element type. */
DEMANGLE_COMPONENT_ARRAY_TYPE,
/* A pointer to member type. The left subtree is the class type,
and the right subtree is the member type. CV-qualifiers appear
on the latter. */
DEMANGLE_COMPONENT_PTRMEM_TYPE,
/* A fixed-point type. */
DEMANGLE_COMPONENT_FIXED_TYPE,
/* A vector type. The left subtree is the number of elements,
the right subtree is the element type. */
DEMANGLE_COMPONENT_VECTOR_TYPE,
/* An argument list. The left subtree is the current argument, and
the right subtree is either NULL or another ARGLIST node. */
DEMANGLE_COMPONENT_ARGLIST,
/* A template argument list. The left subtree is the current
template argument, and the right subtree is either NULL or
another TEMPLATE_ARGLIST node. */
DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,
/* An initializer list. The left subtree is either an explicit type or
NULL, and the right subtree is a DEMANGLE_COMPONENT_ARGLIST. */
DEMANGLE_COMPONENT_INITIALIZER_LIST,
/* An operator. This holds information about a standard
operator. */
DEMANGLE_COMPONENT_OPERATOR,
/* An extended operator. This holds the number of arguments, and
the name of the extended operator. */
DEMANGLE_COMPONENT_EXTENDED_OPERATOR,
/* A typecast, represented as a unary operator. The one subtree is
the type to which the argument should be cast. */
DEMANGLE_COMPONENT_CAST,
/* A nullary expression. The left subtree is the operator. */
DEMANGLE_COMPONENT_NULLARY,
/* A unary expression. The left subtree is the operator, and the
right subtree is the single argument. */
DEMANGLE_COMPONENT_UNARY,
/* A binary expression. The left subtree is the operator, and the
right subtree is a BINARY_ARGS. */
DEMANGLE_COMPONENT_BINARY,
/* Arguments to a binary expression. The left subtree is the first
argument, and the right subtree is the second argument. */
DEMANGLE_COMPONENT_BINARY_ARGS,
/* A trinary expression. The left subtree is the operator, and the
right subtree is a TRINARY_ARG1. */
DEMANGLE_COMPONENT_TRINARY,
/* Arguments to a trinary expression. The left subtree is the first
argument, and the right subtree is a TRINARY_ARG2. */
DEMANGLE_COMPONENT_TRINARY_ARG1,
/* More arguments to a trinary expression. The left subtree is the
second argument, and the right subtree is the third argument. */
DEMANGLE_COMPONENT_TRINARY_ARG2,
/* A literal. The left subtree is the type, and the right subtree
is the value, represented as a DEMANGLE_COMPONENT_NAME. */
DEMANGLE_COMPONENT_LITERAL,
/* A negative literal. Like LITERAL, but the value is negated.
This is a minor hack: the NAME used for LITERAL points directly
to the mangled string, but since negative numbers are mangled
using 'n' instead of '-', we want a way to indicate a negative
number which involves neither modifying the mangled string nor
allocating a new copy of the literal in memory. */
DEMANGLE_COMPONENT_LITERAL_NEG,
/* A libgcj compiled resource. The left subtree is the name of the
resource. */
DEMANGLE_COMPONENT_JAVA_RESOURCE,
/* A name formed by the concatenation of two parts. The left
subtree is the first part and the right subtree the second. */
DEMANGLE_COMPONENT_COMPOUND_NAME,
/* A name formed by a single character. */
DEMANGLE_COMPONENT_CHARACTER,
/* A number. */
DEMANGLE_COMPONENT_NUMBER,
/* A decltype type. */
DEMANGLE_COMPONENT_DECLTYPE,
/* Global constructors keyed to name. */
DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS,
/* Global destructors keyed to name. */
DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS,
/* A lambda closure type. */
DEMANGLE_COMPONENT_LAMBDA,
/* A default argument scope. */
DEMANGLE_COMPONENT_DEFAULT_ARG,
/* An unnamed type. */
DEMANGLE_COMPONENT_UNNAMED_TYPE,
/* A transactional clone. This has one subtree, the encoding for
which it is providing alternative linkage. */
DEMANGLE_COMPONENT_TRANSACTION_CLONE,
/* A non-transactional clone entry point. In the i386/x86_64 abi,
the unmangled symbol of a tm_callable becomes a thunk and the
non-transactional function version is mangled thus. */
DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
/* A pack expansion. */
DEMANGLE_COMPONENT_PACK_EXPANSION,
/* A name with an ABI tag. */
DEMANGLE_COMPONENT_TAGGED_NAME,
/* A cloned function. */
DEMANGLE_COMPONENT_CLONE
};
 
/* Types which are only used internally. */
 
struct demangle_operator_info;
struct demangle_builtin_type_info;
 
/* A node in the tree representation is an instance of a struct
demangle_component. Note that the field names of the struct are
not well protected against macros defined by the file including
this one. We can fix this if it ever becomes a problem. */
 
struct demangle_component
{
/* The type of this component. */
enum demangle_component_type type;
 
union
{
/* For DEMANGLE_COMPONENT_NAME. */
struct
{
/* A pointer to the name (which need not NULL terminated) and
its length. */
const char *s;
int len;
} s_name;
 
/* For DEMANGLE_COMPONENT_OPERATOR. */
struct
{
/* Operator. */
const struct demangle_operator_info *op;
} s_operator;
 
/* For DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */
struct
{
/* Number of arguments. */
int args;
/* Name. */
struct demangle_component *name;
} s_extended_operator;
 
/* For DEMANGLE_COMPONENT_FIXED_TYPE. */
struct
{
/* The length, indicated by a C integer type name. */
struct demangle_component *length;
/* _Accum or _Fract? */
short accum;
/* Saturating or not? */
short sat;
} s_fixed;
 
/* For DEMANGLE_COMPONENT_CTOR. */
struct
{
/* Kind of constructor. */
enum gnu_v3_ctor_kinds kind;
/* Name. */
struct demangle_component *name;
} s_ctor;
 
/* For DEMANGLE_COMPONENT_DTOR. */
struct
{
/* Kind of destructor. */
enum gnu_v3_dtor_kinds kind;
/* Name. */
struct demangle_component *name;
} s_dtor;
 
/* For DEMANGLE_COMPONENT_BUILTIN_TYPE. */
struct
{
/* Builtin type. */
const struct demangle_builtin_type_info *type;
} s_builtin;
 
/* For DEMANGLE_COMPONENT_SUB_STD. */
struct
{
/* Standard substitution string. */
const char* string;
/* Length of string. */
int len;
} s_string;
 
/* For DEMANGLE_COMPONENT_*_PARAM. */
struct
{
/* Parameter index. */
long number;
} s_number;
 
/* For DEMANGLE_COMPONENT_CHARACTER. */
struct
{
int character;
} s_character;
 
/* For other types. */
struct
{
/* Left (or only) subtree. */
struct demangle_component *left;
/* Right subtree. */
struct demangle_component *right;
} s_binary;
 
struct
{
/* subtree, same place as d_left. */
struct demangle_component *sub;
/* integer. */
int num;
} s_unary_num;
 
} u;
};
 
/* People building mangled trees are expected to allocate instances of
struct demangle_component themselves. They can then call one of
the following functions to fill them in. */
 
/* Fill in most component types with a left subtree and a right
subtree. Returns non-zero on success, zero on failure, such as an
unrecognized or inappropriate component type. */
 
extern int
cplus_demangle_fill_component (struct demangle_component *fill,
enum demangle_component_type,
struct demangle_component *left,
struct demangle_component *right);
 
/* Fill in a DEMANGLE_COMPONENT_NAME. Returns non-zero on success,
zero for bad arguments. */
 
extern int
cplus_demangle_fill_name (struct demangle_component *fill,
const char *, int);
 
/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE, using the name of the
builtin type (e.g., "int", etc.). Returns non-zero on success,
zero if the type is not recognized. */
 
extern int
cplus_demangle_fill_builtin_type (struct demangle_component *fill,
const char *type_name);
 
/* Fill in a DEMANGLE_COMPONENT_OPERATOR, using the name of the
operator and the number of arguments which it takes (the latter is
used to disambiguate operators which can be both binary and unary,
such as '-'). Returns non-zero on success, zero if the operator is
not recognized. */
 
extern int
cplus_demangle_fill_operator (struct demangle_component *fill,
const char *opname, int args);
 
/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR, providing the
number of arguments and the name. Returns non-zero on success,
zero for bad arguments. */
 
extern int
cplus_demangle_fill_extended_operator (struct demangle_component *fill,
int numargs,
struct demangle_component *nm);
 
/* Fill in a DEMANGLE_COMPONENT_CTOR. Returns non-zero on success,
zero for bad arguments. */
 
extern int
cplus_demangle_fill_ctor (struct demangle_component *fill,
enum gnu_v3_ctor_kinds kind,
struct demangle_component *name);
 
/* Fill in a DEMANGLE_COMPONENT_DTOR. Returns non-zero on success,
zero for bad arguments. */
 
extern int
cplus_demangle_fill_dtor (struct demangle_component *fill,
enum gnu_v3_dtor_kinds kind,
struct demangle_component *name);
 
/* This function translates a mangled name into a struct
demangle_component tree. The first argument is the mangled name.
The second argument is DMGL_* options. This returns a pointer to a
tree on success, or NULL on failure. On success, the third
argument is set to a block of memory allocated by malloc. This
block should be passed to free when the tree is no longer
needed. */
 
extern struct demangle_component *
cplus_demangle_v3_components (const char *mangled, int options, void **mem);
 
/* This function takes a struct demangle_component tree and returns
the corresponding demangled string. The first argument is DMGL_*
options. The second is the tree to demangle. The third is a guess
at the length of the demangled string, used to initially allocate
the return buffer. The fourth is a pointer to a size_t. On
success, this function returns a buffer allocated by malloc(), and
sets the size_t pointed to by the fourth argument to the size of
the allocated buffer (not the length of the returned string). On
failure, this function returns NULL, and sets the size_t pointed to
by the fourth argument to 0 for an invalid tree, or to 1 for a
memory allocation error. */
 
extern char *
cplus_demangle_print (int options,
const struct demangle_component *tree,
int estimated_length,
size_t *p_allocated_size);
 
/* This function takes a struct demangle_component tree and passes back
a demangled string in one or more calls to a callback function.
The first argument is DMGL_* options. The second is the tree to
demangle. The third is a pointer to a callback function; on each call
this receives an element of the demangled string, its length, and an
opaque value. The fourth is the opaque value passed to the callback.
The callback is called once or more to return the full demangled
string. The demangled element string is always nul-terminated, though
its length is also provided for convenience. In contrast to
cplus_demangle_print(), this function does not allocate heap memory
to grow output strings (except perhaps where alloca() is implemented
by malloc()), and so is normally safe for use where the heap has been
corrupted. On success, this function returns 1; on failure, 0. */
 
extern int
cplus_demangle_print_callback (int options,
const struct demangle_component *tree,
demangle_callbackref callback, void *opaque);
 
#ifdef __cplusplus
}
#endif /* __cplusplus */
 
#endif /* DEMANGLE_H */
/contrib/sdk/sources/libstdc++-v3/libsupc++/libiberty.h
0,0 → 1,686
/* Function declarations for libiberty.
 
Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Note - certain prototypes declared in this header file are for
functions whoes implementation copyright does not belong to the
FSF. Those prototypes are present in this file for reference
purposes only and their presence in this file should not construed
as an indication of ownership by the FSF of the implementation of
those functions in any way or form whatsoever.
 
This program 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.
 
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor,
Boston, MA 02110-1301, USA.
Written by Cygnus Support, 1994.
 
The libiberty library provides a number of functions which are
missing on some operating systems. We do not declare those here,
to avoid conflicts with the system header files on operating
systems that do support those functions. In this file we only
declare those functions which are specific to libiberty. */
 
#ifndef LIBIBERTY_H
#define LIBIBERTY_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#include "ansidecl.h"
 
/* Get a definition for size_t. */
#include <stddef.h>
/* Get a definition for va_list. */
#include <stdarg.h>
 
#include <stdio.h>
 
/* If the OS supports it, ensure that the supplied stream is setup to
avoid any multi-threaded locking. Otherwise leave the FILE pointer
unchanged. If the stream is NULL do nothing. */
 
extern void unlock_stream (FILE *);
 
/* If the OS supports it, ensure that the standard I/O streams, stdin,
stdout and stderr are setup to avoid any multi-threaded locking.
Otherwise do nothing. */
 
extern void unlock_std_streams (void);
 
/* Open and return a FILE pointer. If the OS supports it, ensure that
the stream is setup to avoid any multi-threaded locking. Otherwise
return the FILE pointer unchanged. */
 
extern FILE *fopen_unlocked (const char *, const char *);
extern FILE *fdopen_unlocked (int, const char *);
extern FILE *freopen_unlocked (const char *, const char *, FILE *);
 
/* Build an argument vector from a string. Allocates memory using
malloc. Use freeargv to free the vector. */
 
extern char **buildargv (const char *) ATTRIBUTE_MALLOC;
 
/* Free a vector returned by buildargv. */
 
extern void freeargv (char **);
 
/* Duplicate an argument vector. Allocates memory using malloc. Use
freeargv to free the vector. */
 
extern char **dupargv (char **) ATTRIBUTE_MALLOC;
 
/* Expand "@file" arguments in argv. */
 
extern void expandargv PARAMS ((int *, char ***));
 
/* Write argv to an @-file, inserting necessary quoting. */
 
extern int writeargv PARAMS ((char **, FILE *));
 
/* Return the number of elements in argv. */
 
extern int countargv (char**);
 
/* Return the last component of a path name. Note that we can't use a
prototype here because the parameter is declared inconsistently
across different systems, sometimes as "char *" and sometimes as
"const char *" */
 
/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is
undefined, we haven't run the autoconf check so provide the
declaration without arguments. If it is 0, we checked and failed
to find the declaration so provide a fully prototyped one. If it
is 1, we found it so don't provide any declaration at all. */
#if !HAVE_DECL_BASENAME
#if defined (__GNU_LIBRARY__ ) || defined (__linux__) || defined (__FreeBSD__) || defined (__OpenBSD__) || defined(__NetBSD__) || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) || defined (HAVE_DECL_BASENAME)
extern char *basename (const char *);
#else
/* Do not allow basename to be used if there is no prototype seen. We
either need to use the above prototype or have one from
autoconf which would result in HAVE_DECL_BASENAME being set. */
#define basename basename_cannot_be_used_without_a_prototype
#endif
#endif
 
/* A well-defined basename () that is always compiled in. */
 
extern const char *lbasename (const char *);
 
/* Same, but assumes DOS semantics (drive name, backslash is also a
dir separator) regardless of host. */
 
extern const char *dos_lbasename (const char *);
 
/* Same, but assumes Unix semantics (absolute paths always start with
a slash, only forward slash is accepted as dir separator)
regardless of host. */
 
extern const char *unix_lbasename (const char *);
 
/* A well-defined realpath () that is always compiled in. */
 
extern char *lrealpath (const char *);
 
/* Concatenate an arbitrary number of strings. You must pass NULL as
the last argument of this function, to terminate the list of
strings. Allocates memory using xmalloc. */
 
extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL;
 
/* Concatenate an arbitrary number of strings. You must pass NULL as
the last argument of this function, to terminate the list of
strings. Allocates memory using xmalloc. The first argument is
not one of the strings to be concatenated, but if not NULL is a
pointer to be freed after the new string is created, similar to the
way xrealloc works. */
 
extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_SENTINEL;
 
/* Determine the length of concatenating an arbitrary number of
strings. You must pass NULL as the last argument of this function,
to terminate the list of strings. */
 
extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL;
 
/* Concatenate an arbitrary number of strings into a SUPPLIED area of
memory. You must pass NULL as the last argument of this function,
to terminate the list of strings. The supplied memory is assumed
to be large enough. */
 
extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_SENTINEL;
 
/* Concatenate an arbitrary number of strings into a GLOBAL area of
memory. You must pass NULL as the last argument of this function,
to terminate the list of strings. The supplied memory is assumed
to be large enough. */
 
extern char *concat_copy2 (const char *, ...) ATTRIBUTE_SENTINEL;
 
/* This is the global area used by concat_copy2. */
 
extern char *libiberty_concat_ptr;
 
/* Concatenate an arbitrary number of strings. You must pass NULL as
the last argument of this function, to terminate the list of
strings. Allocates memory using alloca. The arguments are
evaluated twice! */
#define ACONCAT(ACONCAT_PARAMS) \
(libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \
concat_copy2 ACONCAT_PARAMS)
 
/* Check whether two file descriptors refer to the same file. */
 
extern int fdmatch (int fd1, int fd2);
 
/* Return the position of the first bit set in the argument. */
/* Prototypes vary from system to system, so we only provide a
prototype on systems where we know that we need it. */
#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS
extern int ffs(int);
#endif
 
/* Get the working directory. The result is cached, so don't call
chdir() between calls to getpwd(). */
 
extern char * getpwd (void);
 
/* Get the current time. */
/* Prototypes vary from system to system, so we only provide a
prototype on systems where we know that we need it. */
#ifdef __MINGW32__
/* Forward declaration to avoid #include <sys/time.h>. */
struct timeval;
extern int gettimeofday (struct timeval *, void *);
#endif
 
/* Get the amount of time the process has run, in microseconds. */
 
extern long get_run_time (void);
 
/* Generate a relocated path to some installation directory. Allocates
return value using malloc. */
 
extern char *make_relative_prefix (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
 
/* Generate a relocated path to some installation directory without
attempting to follow any soft links. Allocates
return value using malloc. */
 
extern char *make_relative_prefix_ignore_links (const char *, const char *,
const char *) ATTRIBUTE_MALLOC;
 
/* Choose a temporary directory to use for scratch files. */
 
extern char *choose_temp_base (void) ATTRIBUTE_MALLOC;
 
/* Return a temporary file name or NULL if unable to create one. */
 
extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC;
 
/* Remove a link to a file unless it is special. */
 
extern int unlink_if_ordinary (const char *);
 
/* Allocate memory filled with spaces. Allocates using malloc. */
 
extern const char *spaces (int count);
 
/* Return the maximum error number for which strerror will return a
string. */
 
extern int errno_max (void);
 
/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
"EINVAL"). */
 
extern const char *strerrno (int);
 
/* Given the name of an errno value, return the value. */
 
extern int strtoerrno (const char *);
 
/* ANSI's strerror(), but more robust. */
 
extern char *xstrerror (int);
 
/* Return the maximum signal number for which strsignal will return a
string. */
 
extern int signo_max (void);
 
/* Return a signal message string for a signal number
(e.g., strsignal (SIGHUP) returns something like "Hangup"). */
/* This is commented out as it can conflict with one in system headers.
We still document its existence though. */
 
/*extern const char *strsignal (int);*/
 
/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
"SIGHUP"). */
 
extern const char *strsigno (int);
 
/* Given the name of a signal, return its number. */
 
extern int strtosigno (const char *);
 
/* Register a function to be run by xexit. Returns 0 on success. */
 
extern int xatexit (void (*fn) (void));
 
/* Exit, calling all the functions registered with xatexit. */
 
extern void xexit (int status) ATTRIBUTE_NORETURN;
 
/* Set the program name used by xmalloc. */
 
extern void xmalloc_set_program_name (const char *);
 
/* Report an allocation failure. */
extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN;
 
/* Allocate memory without fail. If malloc fails, this will print a
message to stderr (using the name set by xmalloc_set_program_name,
if any) and then call xexit. */
 
extern void *xmalloc (size_t) ATTRIBUTE_MALLOC;
 
/* Reallocate memory without fail. This works like xmalloc. Note,
realloc type functions are not suitable for attribute malloc since
they may return the same address across multiple calls. */
 
extern void *xrealloc (void *, size_t);
 
/* Allocate memory without fail and set it to zero. This works like
xmalloc. */
 
extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC;
 
/* Copy a string into a memory buffer without fail. */
 
extern char *xstrdup (const char *) ATTRIBUTE_MALLOC;
 
/* Copy at most N characters from string into a buffer without fail. */
 
extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC;
 
/* Copy an existing memory buffer to a new memory buffer without fail. */
 
extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC;
 
/* Physical memory routines. Return values are in BYTES. */
extern double physmem_total (void);
extern double physmem_available (void);
 
/* Compute the 32-bit CRC of a block of memory. */
extern unsigned int xcrc32 (const unsigned char *, int, unsigned int);
 
/* These macros provide a K&R/C89/C++-friendly way of allocating structures
with nice encapsulation. The XDELETE*() macros are technically
superfluous, but provided here for symmetry. Using them consistently
makes it easier to update client code to use different allocators such
as new/delete and new[]/delete[]. */
 
/* Scalar allocators. */
 
#define XALLOCA(T) ((T *) alloca (sizeof (T)))
#define XNEW(T) ((T *) xmalloc (sizeof (T)))
#define XCNEW(T) ((T *) xcalloc (1, sizeof (T)))
#define XDUP(T, P) ((T *) xmemdup ((P), sizeof (T), sizeof (T)))
#define XDELETE(P) free ((void*) (P))
 
/* Array allocators. */
 
#define XALLOCAVEC(T, N) ((T *) alloca (sizeof (T) * (N)))
#define XNEWVEC(T, N) ((T *) xmalloc (sizeof (T) * (N)))
#define XCNEWVEC(T, N) ((T *) xcalloc ((N), sizeof (T)))
#define XDUPVEC(T, P, N) ((T *) xmemdup ((P), sizeof (T) * (N), sizeof (T) * (N)))
#define XRESIZEVEC(T, P, N) ((T *) xrealloc ((void *) (P), sizeof (T) * (N)))
#define XDELETEVEC(P) free ((void*) (P))
 
/* Allocators for variable-sized structures and raw buffers. */
 
#define XALLOCAVAR(T, S) ((T *) alloca ((S)))
#define XNEWVAR(T, S) ((T *) xmalloc ((S)))
#define XCNEWVAR(T, S) ((T *) xcalloc (1, (S)))
#define XDUPVAR(T, P, S1, S2) ((T *) xmemdup ((P), (S1), (S2)))
#define XRESIZEVAR(T, P, S) ((T *) xrealloc ((P), (S)))
 
/* Type-safe obstack allocator. */
 
#define XOBNEW(O, T) ((T *) obstack_alloc ((O), sizeof (T)))
#define XOBNEWVEC(O, T, N) ((T *) obstack_alloc ((O), sizeof (T) * (N)))
#define XOBNEWVAR(O, T, S) ((T *) obstack_alloc ((O), (S)))
#define XOBFINISH(O, T) ((T) obstack_finish ((O)))
 
/* hex character manipulation routines */
 
#define _hex_array_size 256
#define _hex_bad 99
extern const unsigned char _hex_value[_hex_array_size];
extern void hex_init (void);
#define hex_p(c) (hex_value (c) != _hex_bad)
/* If you change this, note well: Some code relies on side effects in
the argument being performed exactly once. */
#define hex_value(c) ((unsigned int) _hex_value[(unsigned char) (c)])
 
/* Flags for pex_init. These are bits to be or'ed together. */
 
/* Record subprocess times, if possible. */
#define PEX_RECORD_TIMES 0x1
 
/* Use pipes for communication between processes, if possible. */
#define PEX_USE_PIPES 0x2
 
/* Save files used for communication between processes. */
#define PEX_SAVE_TEMPS 0x4
 
/* Prepare to execute one or more programs, with standard output of
each program fed to standard input of the next.
FLAGS As above.
PNAME The name of the program to report in error messages.
TEMPBASE A base name to use for temporary files; may be NULL to
use a random name.
Returns NULL on error. */
 
extern struct pex_obj *pex_init (int flags, const char *pname,
const char *tempbase);
 
/* Flags for pex_run. These are bits to be or'ed together. */
 
/* Last program in pipeline. Standard output of program goes to
OUTNAME, or, if OUTNAME is NULL, to standard output of caller. Do
not set this if you want to call pex_read_output. After this is
set, pex_run may no longer be called with the same struct
pex_obj. */
#define PEX_LAST 0x1
 
/* Search for program in executable search path. */
#define PEX_SEARCH 0x2
 
/* OUTNAME is a suffix. */
#define PEX_SUFFIX 0x4
 
/* Send program's standard error to standard output. */
#define PEX_STDERR_TO_STDOUT 0x8
 
/* Input file should be opened in binary mode. This flag is ignored
on Unix. */
#define PEX_BINARY_INPUT 0x10
 
/* Output file should be opened in binary mode. This flag is ignored
on Unix. For proper behaviour PEX_BINARY_INPUT and
PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using
PEX_BINARY_OUTPUT should be followed by a call using
PEX_BINARY_INPUT. */
#define PEX_BINARY_OUTPUT 0x20
 
/* Capture stderr to a pipe. The output can be read by
calling pex_read_err and reading from the returned
FILE object. This flag may be specified only for
the last program in a pipeline.
 
This flag is supported only on Unix and Windows. */
#define PEX_STDERR_TO_PIPE 0x40
 
/* Capture stderr in binary mode. This flag is ignored
on Unix. */
#define PEX_BINARY_ERROR 0x80
 
 
/* Execute one program. Returns NULL on success. On error returns an
error string (typically just the name of a system call); the error
string is statically allocated.
 
OBJ Returned by pex_init.
 
FLAGS As above.
 
EXECUTABLE The program to execute.
 
ARGV NULL terminated array of arguments to pass to the program.
 
OUTNAME Sets the output file name as follows:
 
PEX_SUFFIX set (OUTNAME may not be NULL):
TEMPBASE parameter to pex_init not NULL:
Output file name is the concatenation of TEMPBASE
and OUTNAME.
TEMPBASE is NULL:
Output file name is a random file name ending in
OUTNAME.
PEX_SUFFIX not set:
OUTNAME not NULL:
Output file name is OUTNAME.
OUTNAME NULL, TEMPBASE not NULL:
Output file name is randomly chosen using
TEMPBASE.
OUTNAME NULL, TEMPBASE NULL:
Output file name is randomly chosen.
 
If PEX_LAST is not set, the output file name is the
name to use for a temporary file holding stdout, if
any (there will not be a file if PEX_USE_PIPES is set
and the system supports pipes). If a file is used, it
will be removed when no longer needed unless
PEX_SAVE_TEMPS is set.
 
If PEX_LAST is set, and OUTNAME is not NULL, standard
output is written to the output file name. The file
will not be removed. If PEX_LAST and PEX_SUFFIX are
both set, TEMPBASE may not be NULL.
 
ERRNAME If not NULL, this is the name of a file to which
standard error is written. If NULL, standard error of
the program is standard error of the caller.
 
ERR On an error return, *ERR is set to an errno value, or
to 0 if there is no relevant errno.
*/
 
extern const char *pex_run (struct pex_obj *obj, int flags,
const char *executable, char * const *argv,
const char *outname, const char *errname,
int *err);
 
/* As for pex_run (), but takes an extra parameter to enable the
environment for the child process to be specified.
 
ENV The environment for the child process, specified as
an array of character pointers. Each element of the
array should point to a string of the form VAR=VALUE,
with the exception of the last element which must be
a null pointer.
*/
 
extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
const char *executable,
char * const *argv,
char * const *env,
const char *outname,
const char *errname, int *err);
 
/* Return a stream for a temporary file to pass to the first program
in the pipeline as input. The file name is chosen as for pex_run.
pex_run closes the file automatically; don't close it yourself. */
 
extern FILE *pex_input_file (struct pex_obj *obj, int flags,
const char *in_name);
 
/* Return a stream for a pipe connected to the standard input of the
first program in the pipeline. You must have passed
`PEX_USE_PIPES' to `pex_init'. Close the returned stream
yourself. */
 
extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
 
/* Read the standard output of the last program to be executed.
pex_run can not be called after this. BINARY should be non-zero if
the file should be opened in binary mode; this is ignored on Unix.
Returns NULL on error. Don't call fclose on the returned FILE; it
will be closed by pex_free. */
 
extern FILE *pex_read_output (struct pex_obj *, int binary);
 
/* Read the standard error of the last program to be executed.
pex_run can not be called after this. BINARY should be non-zero if
the file should be opened in binary mode; this is ignored on Unix.
Returns NULL on error. Don't call fclose on the returned FILE; it
will be closed by pex_free. */
 
extern FILE *pex_read_err (struct pex_obj *, int binary);
 
/* Return exit status of all programs in VECTOR. COUNT indicates the
size of VECTOR. The status codes in the vector are in the order of
the calls to pex_run. Returns 0 on error, 1 on success. */
 
extern int pex_get_status (struct pex_obj *, int count, int *vector);
 
/* Return times of all programs in VECTOR. COUNT indicates the size
of VECTOR. struct pex_time is really just struct timeval, but that
is not portable to all systems. Returns 0 on error, 1 on
success. */
 
struct pex_time
{
unsigned long user_seconds;
unsigned long user_microseconds;
unsigned long system_seconds;
unsigned long system_microseconds;
};
 
extern int pex_get_times (struct pex_obj *, int count,
struct pex_time *vector);
 
/* Clean up a pex_obj. If you have not called pex_get_times or
pex_get_status, this will try to kill the subprocesses. */
 
extern void pex_free (struct pex_obj *);
 
/* Just execute one program. Return value is as for pex_run.
FLAGS Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT.
EXECUTABLE As for pex_run.
ARGV As for pex_run.
PNAME As for pex_init.
OUTNAME As for pex_run when PEX_LAST is set.
ERRNAME As for pex_run.
STATUS Set to exit status on success.
ERR As for pex_run.
*/
 
extern const char *pex_one (int flags, const char *executable,
char * const *argv, const char *pname,
const char *outname, const char *errname,
int *status, int *err);
 
/* pexecute and pwait are the old pexecute interface, still here for
backward compatibility. Don't use these for new code. Instead,
use pex_init/pex_run/pex_get_status/pex_free, or pex_one. */
 
/* Definitions used by the pexecute routine. */
 
#define PEXECUTE_FIRST 1
#define PEXECUTE_LAST 2
#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST)
#define PEXECUTE_SEARCH 4
#define PEXECUTE_VERBOSE 8
 
/* Execute a program. */
 
extern int pexecute (const char *, char * const *, const char *,
const char *, char **, char **, int);
 
/* Wait for pexecute to finish. */
 
extern int pwait (int, int *, int);
 
#if !HAVE_DECL_ASPRINTF
/* Like sprintf but provides a pointer to malloc'd storage, which must
be freed by the caller. */
 
extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
#endif
 
#if !HAVE_DECL_VASPRINTF
/* Like vsprintf but provides a pointer to malloc'd storage, which
must be freed by the caller. */
 
extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0);
#endif
 
#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
/* Like sprintf but prints at most N characters. */
extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
#endif
 
#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
/* Like vsprintf but prints at most N characters. */
extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0);
#endif
 
#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
/* Compare version strings. */
extern int strverscmp (const char *, const char *);
#endif
 
/* Set the title of a process */
extern void setproctitle (const char *name, ...);
 
/* Increase stack limit if possible. */
extern void stack_limit_increase (unsigned long);
 
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
 
/* Drastically simplified alloca configurator. If we're using GCC,
we use __builtin_alloca; otherwise we use the C alloca. The C
alloca is always available. You can override GCC by defining
USE_C_ALLOCA yourself. The canonical autoconf macro C_ALLOCA is
also set/unset as it is often used to indicate whether code needs
to call alloca(0). */
extern void *C_alloca (size_t) ATTRIBUTE_MALLOC;
#undef alloca
#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA
# define alloca(x) __builtin_alloca(x)
# undef C_ALLOCA
# define ASTRDUP(X) \
(__extension__ ({ const char *const libiberty_optr = (X); \
const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \
char *const libiberty_nptr = (char *const) alloca (libiberty_len); \
(char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); }))
#else
# define alloca(x) C_alloca(x)
# undef USE_C_ALLOCA
# define USE_C_ALLOCA 1
# undef C_ALLOCA
# define C_ALLOCA 1
extern const char *libiberty_optr;
extern char *libiberty_nptr;
extern unsigned long libiberty_len;
# define ASTRDUP(X) \
(libiberty_optr = (X), \
libiberty_len = strlen (libiberty_optr) + 1, \
libiberty_nptr = (char *) alloca (libiberty_len), \
(char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len))
#endif
 
#ifdef __cplusplus
}
#endif
 
 
#endif /* ! defined (LIBIBERTY_H) */
/contrib/sdk/sources/libstdc++-v3/libsupc++/vterminate.cc
62,7 → 62,7
int status = -1;
char *dem = 0;
 
// dem = __cxa_demangle(name, 0, 0, &status);
dem = __cxa_demangle(name, 0, 0, &status);
 
fputs("terminate called after throwing an instance of '", stderr);
if (status == 0)
/contrib/sdk/sources/newlib/app.lds
79,6 → 79,12
___iend = . ;
}
 
.eh_frame BLOCK(16) :
{
PROVIDE (___EH_FRAME_BEGIN__ = .) ;
*(.eh_frame*)
}
 
.idata ALIGN(16):
{
__idata_start = .;
113,7 → 119,6
*(.debug$F)
*(.drectve)
*(.note.GNU-stack)
*(.eh_frame)
*(.comment)
*(.debug_abbrev)
*(.debug_info)
/contrib/sdk/sources/newlib/libc/Makefile
3,7 → 3,7
AR = kos32-ar
LD = kos32-ld
 
CFLAGS = -c -O2 -fno-ident -fomit-frame-pointer -DBUILD_DLL -DMISSING_SYSCALL_NAMES
CFLAGS = -c -O2 -fno-ident -fomit-frame-pointer -fexceptions -DBUILD_DLL -DMISSING_SYSCALL_NAMES
LDFLAGS = -shared -s -T libcdll.lds --out-implib libc.dll.a --image-base 0
#LDFLAGS+= --output-def libc.orig.def
ARFLAGS = crs
/contrib/sdk/sources/newlib/libc/crt/crt3.c
18,28 → 18,9
#include <string.h>
#include <stdio.h>
 
/*
typedef void (*ctp)();
static void __do_global_ctors ()
{
extern int __CTOR_LIST__;
int *c = &__CTOR_LIST__;
c++;
while (*c)
{
ctp d = (ctp)*c;
(d)();
c++;
}
}
*/
 
void *load_libc();
//void __main (){};
 
void* get_entry_point(void *raw);
 
void _pei386_runtime_relocator (void){};
 
void __attribute__((noreturn))
__crt_startup (void)
48,8 → 29,6
void *img;
void __attribute__((noreturn)) (*entry)(void *img);
 
// _pei386_runtime_relocator();
 
img = load_libc();
 
if(img == NULL)
/contrib/sdk/sources/newlib/libc/include/kos32sys.h
424,7 → 424,8
__asm__ __volatile__(
"int $0x40"
:
:"a"(9), "b"(info), "c"(-1));
:"a"(9), "b"(info), "c"(-1)
:"memory");
};
static inline void GetProcInfo(char *info) __attribute__ ((alias ("get_proc_info")));
 
/contrib/sdk/sources/newlib/libc/include/stdio.h
655,10 → 655,6
#define clearerr(p) __sclearerr(p)
#endif
 
#if 0 /*ndef __STRICT_ANSI__ - FIXME: must initialize stdio first, use fn */
#define fileno(p) __sfileno(p)
#endif
 
#ifndef __CYGWIN__
#ifndef lint
#define getc(fp) __sgetc_r(_REENT, fp)