Use -fbuilding-libgcc for more target macros used in libgcc.

gcc/c-family:
	* c-cppbuiltin.c (c_cpp_builtins): Also define
	__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__,
	__LIBGCC_EH_FRAME_SECTION_NAME__, __LIBGCC_JCR_SECTION_NAME__,
	__LIBGCC_CTORS_SECTION_ASM_OP__, __LIBGCC_DTORS_SECTION_ASM_OP__,
	__LIBGCC_TEXT_SECTION_ASM_OP__, __LIBGCC_INIT_SECTION_ASM_OP__,
	__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__,
	__LIBGCC_STACK_GROWS_DOWNWARD__,
	__LIBGCC_DONT_USE_BUILTIN_SETJMP__,
	__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__,
	__LIBGCC_DWARF_FRAME_REGISTERS__,
	__LIBGCC_EH_RETURN_STACKADJ_RTX__, __LIBGCC_JMP_BUF_SIZE__,
	__LIBGCC_STACK_POINTER_REGNUM__ and
	__LIBGCC_VTABLE_USES_DESCRIPTORS__ for -fbuilding-libgcc.
	(builtin_define_with_value): Handle backslash-escaping in string
	macro values.

libgcc:
	* Makefile.in (CRTSTUFF_CFLAGS): Add -fbuilding-libgcc.
	* config/aarch64/linux-unwind.h (STACK_POINTER_REGNUM): Change all
	uses to __LIBGCC_STACK_POINTER_REGNUM__.
	(DWARF_ALT_FRAME_RETURN_COLUMN): Change all uses to
	__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	* config/alpha/vms-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN):
	Change use to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	* config/cr16/unwind-cr16.c (STACK_GROWS_DOWNWARD): Change all
	uses to __LIBGCC_STACK_GROWS_DOWNWARD__.
	(DWARF_FRAME_REGISTERS): Change all uses to
	__LIBGCC_DWARF_FRAME_REGISTERS__.
	(EH_RETURN_STACKADJ_RTX): Change all uses to
	__LIBGCC_EH_RETURN_STACKADJ_RTX__.
	* config/cr16/unwind-dw2.h (DWARF_FRAME_REGISTERS): Change use to
	__LIBGCC_DWARF_FRAME_REGISTERS__.  Remove conditional definition.
	* config/i386/cygming-crtbegin.c (EH_FRAME_SECTION_NAME): Change
	use to __LIBGCC_EH_FRAME_SECTION_NAME__.
	(JCR_SECTION_NAME): Change use to __LIBGCC_JCR_SECTION_NAME__.
	* config/i386/cygming-crtend.c (EH_FRAME_SECTION_NAME): Change use
	to __LIBGCC_EH_FRAME_SECTION_NAME__.
	(JCR_SECTION_NAME): Change use to __LIBGCC_JCR_SECTION_NAME__
	* config/mips/linux-unwind.h (STACK_POINTER_REGNUM): Change use to
	__LIBGCC_STACK_POINTER_REGNUM__.
	(DWARF_ALT_FRAME_RETURN_COLUMN): Change all uses to
	__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	* config/nios2/linux-unwind.h (STACK_POINTER_REGNUM): Change use
	to __LIBGCC_STACK_POINTER_REGNUM__.
	* config/pa/hpux-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN): Change
	all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	* config/pa/linux-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN): Change
	all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	* config/rs6000/aix-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN):
	Change all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
	(STACK_POINTER_REGNUM): Change all uses to
	__LIBGCC_STACK_POINTER_REGNUM__.
	* config/rs6000/darwin-fallback.c (STACK_POINTER_REGNUM): Change
	use to __LIBGCC_STACK_POINTER_REGNUM__.
	* config/rs6000/linux-unwind.h (STACK_POINTER_REGNUM): Change all
	uses to __LIBGCC_STACK_POINTER_REGNUM__.
	* config/sparc/linux-unwind.h (DWARF_FRAME_REGISTERS): Change use
	to __LIBGCC_DWARF_FRAME_REGISTERS__.
	* config/sparc/sol2-unwind.h (DWARF_FRAME_REGISTERS): Change use
	to __LIBGCC_DWARF_FRAME_REGISTERS__.
	* config/tilepro/linux-unwind.h (STACK_POINTER_REGNUM): Change use
	to __LIBGCC_STACK_POINTER_REGNUM__.
	* config/xtensa/unwind-dw2-xtensa.h (DWARF_FRAME_REGISTERS):
	Remove conditional definition.
	* crtstuff.c (TEXT_SECTION_ASM_OP): Change all uses to
	__LIBGCC_TEXT_SECTION_ASM_OP__.
	(EH_FRAME_SECTION_NAME): Change all uses to
	__LIBGCC_EH_FRAME_SECTION_NAME__.
	(EH_TABLES_CAN_BE_READ_ONLY): Change all uses to
	__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__.
	(CTORS_SECTION_ASM_OP): Change all uses to
	__LIBGCC_CTORS_SECTION_ASM_OP__.
	(DTORS_SECTION_ASM_OP): Change all uses to
	__LIBGCC_DTORS_SECTION_ASM_OP__.
	(JCR_SECTION_NAME): Change all uses to
	__LIBGCC_JCR_SECTION_NAME__.
	(INIT_SECTION_ASM_OP): Change all uses to
	__LIBGCC_INIT_SECTION_ASM_OP__.
	(INIT_ARRAY_SECTION_ASM_OP): Change all uses to
	__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__.
	* generic-morestack.c (STACK_GROWS_DOWNWARD): Change all uses to
	__LIBGCC_STACK_GROWS_DOWNWARD__.
	* libgcc2.c (INIT_SECTION_ASM_OP): Change all uses to
	__LIBGCC_INIT_SECTION_ASM_OP__.
	(INIT_ARRAY_SECTION_ASM_OP): Change all uses to
	__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__.
	(EH_FRAME_SECTION_NAME): Change all uses to
	__LIBGCC_EH_FRAME_SECTION_NAME__.
	* libgcov-profiler.c (VTABLE_USES_DESCRIPTORS): Remove conditional
	definitions.  Change all uses to
	__LIBGCC_VTABLE_USES_DESCRIPTORS__.
	* unwind-dw2.c (STACK_GROWS_DOWNWARD): Change all uses to
	__LIBGCC_STACK_GROWS_DOWNWARD__.
	(DWARF_FRAME_REGISTERS): Change all uses to
	__LIBGCC_DWARF_FRAME_REGISTERS__.
	(EH_RETURN_STACKADJ_RTX): Change all uses to
	__LIBGCC_EH_RETURN_STACKADJ_RTX__.
	* unwind-dw2.h (DWARF_FRAME_REGISTERS): Remove conditional
	definition.  Change use to __LIBGCC_DWARF_FRAME_REGISTERS__.
	* unwind-sjlj.c (DONT_USE_BUILTIN_SETJMP): Change all uses to
	__LIBGCC_DONT_USE_BUILTIN_SETJMP__.
	(JMP_BUF_SIZE): Change use to __LIBGCC_JMP_BUF_SIZE__.

From-SVN: r214954
This commit is contained in:
Joseph Myers 2014-09-05 13:03:46 +01:00 committed by Joseph Myers
parent 02a0ec4a8d
commit 53d68b9f05
28 changed files with 362 additions and 176 deletions

View File

@ -1,3 +1,21 @@
2014-09-05 Joseph Myers <joseph@codesourcery.com>
* c-cppbuiltin.c (c_cpp_builtins): Also define
__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__,
__LIBGCC_EH_FRAME_SECTION_NAME__, __LIBGCC_JCR_SECTION_NAME__,
__LIBGCC_CTORS_SECTION_ASM_OP__, __LIBGCC_DTORS_SECTION_ASM_OP__,
__LIBGCC_TEXT_SECTION_ASM_OP__, __LIBGCC_INIT_SECTION_ASM_OP__,
__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__,
__LIBGCC_STACK_GROWS_DOWNWARD__,
__LIBGCC_DONT_USE_BUILTIN_SETJMP__,
__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__,
__LIBGCC_DWARF_FRAME_REGISTERS__,
__LIBGCC_EH_RETURN_STACKADJ_RTX__, __LIBGCC_JMP_BUF_SIZE__,
__LIBGCC_STACK_POINTER_REGNUM__ and
__LIBGCC_VTABLE_USES_DESCRIPTORS__ for -fbuilding-libgcc.
(builtin_define_with_value): Handle backslash-escaping in string
macro values.
2014-09-05 Richard Biener <rguenther@suse.de>
PR middle-end/63148

View File

@ -943,9 +943,74 @@ c_cpp_builtins (cpp_reader *pfile)
/* For libgcc-internal use only. */
if (flag_building_libgcc)
/* For libgcc enable-execute-stack.c. */
builtin_define_with_int_value ("__LIBGCC_TRAMPOLINE_SIZE__",
TRAMPOLINE_SIZE);
{
/* For libgcc crtstuff.c and libgcc2.c. */
builtin_define_with_int_value ("__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__",
EH_TABLES_CAN_BE_READ_ONLY);
#ifdef EH_FRAME_SECTION_NAME
builtin_define_with_value ("__LIBGCC_EH_FRAME_SECTION_NAME__",
EH_FRAME_SECTION_NAME, 1);
#endif
#ifdef JCR_SECTION_NAME
builtin_define_with_value ("__LIBGCC_JCR_SECTION_NAME__",
JCR_SECTION_NAME, 1);
#endif
#ifdef CTORS_SECTION_ASM_OP
builtin_define_with_value ("__LIBGCC_CTORS_SECTION_ASM_OP__",
CTORS_SECTION_ASM_OP, 1);
#endif
#ifdef DTORS_SECTION_ASM_OP
builtin_define_with_value ("__LIBGCC_DTORS_SECTION_ASM_OP__",
DTORS_SECTION_ASM_OP, 1);
#endif
#ifdef TEXT_SECTION_ASM_OP
builtin_define_with_value ("__LIBGCC_TEXT_SECTION_ASM_OP__",
TEXT_SECTION_ASM_OP, 1);
#endif
#ifdef INIT_SECTION_ASM_OP
builtin_define_with_value ("__LIBGCC_INIT_SECTION_ASM_OP__",
INIT_SECTION_ASM_OP, 1);
#endif
#ifdef INIT_ARRAY_SECTION_ASM_OP
/* Despite the name of this target macro, the expansion is not
actually used, and may be empty rather than a string
constant. */
cpp_define (pfile, "__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__");
#endif
/* For libgcc enable-execute-stack.c. */
builtin_define_with_int_value ("__LIBGCC_TRAMPOLINE_SIZE__",
TRAMPOLINE_SIZE);
/* For libgcc generic-morestack.c and unwinder code. */
#ifdef STACK_GROWS_DOWNWARD
cpp_define (pfile, "__LIBGCC_STACK_GROWS_DOWNWARD__");
#endif
/* For libgcc unwinder code. */
#ifdef DONT_USE_BUILTIN_SETJMP
cpp_define (pfile, "__LIBGCC_DONT_USE_BUILTIN_SETJMP__");
#endif
#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
builtin_define_with_int_value ("__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__",
DWARF_ALT_FRAME_RETURN_COLUMN);
#endif
builtin_define_with_int_value ("__LIBGCC_DWARF_FRAME_REGISTERS__",
DWARF_FRAME_REGISTERS);
#ifdef EH_RETURN_STACKADJ_RTX
cpp_define (pfile, "__LIBGCC_EH_RETURN_STACKADJ_RTX__");
#endif
#ifdef JMP_BUF_SIZE
builtin_define_with_int_value ("__LIBGCC_JMP_BUF_SIZE__",
JMP_BUF_SIZE);
#endif
builtin_define_with_int_value ("__LIBGCC_STACK_POINTER_REGNUM__",
STACK_POINTER_REGNUM);
/* For libgcov. */
builtin_define_with_int_value ("__LIBGCC_VTABLE_USES_DESCRIPTORS__",
TARGET_VTABLE_USES_DESCRIPTORS);
}
/* For use in assembly language. */
builtin_define_with_value ("__REGISTER_PREFIX__", REGISTER_PREFIX, 0);
@ -1087,7 +1152,49 @@ builtin_define_with_value (const char *macro, const char *expansion, int is_str)
size_t extra = 2; /* space for an = and a NUL */
if (is_str)
extra += 2; /* space for two quote marks */
{
char *quoted_expansion = (char *) alloca (elen * 4 + 1);
const char *p;
char *q;
extra += 2; /* space for two quote marks */
for (p = expansion, q = quoted_expansion; *p; p++)
{
switch (*p)
{
case '\n':
*q++ = '\\';
*q++ = 'n';
break;
case '\t':
*q++ = '\\';
*q++ = 't';
break;
case '\\':
*q++ = '\\';
*q++ = '\\';
break;
case '"':
*q++ = '\\';
*q++ = '"';
break;
default:
if (ISPRINT ((unsigned char) *p))
*q++ = *p;
else
{
sprintf (q, "\\%03o", (unsigned char) *p);
q += 4;
}
}
}
*q = '\0';
expansion = quoted_expansion;
elen = q - expansion;
}
buf = (char *) alloca (mlen + elen + extra);
if (is_str)

View File

@ -1,3 +1,91 @@
2014-09-05 Joseph Myers <joseph@codesourcery.com>
* Makefile.in (CRTSTUFF_CFLAGS): Add -fbuilding-libgcc.
* config/aarch64/linux-unwind.h (STACK_POINTER_REGNUM): Change all
uses to __LIBGCC_STACK_POINTER_REGNUM__.
(DWARF_ALT_FRAME_RETURN_COLUMN): Change all uses to
__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
* config/alpha/vms-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN):
Change use to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
* config/cr16/unwind-cr16.c (STACK_GROWS_DOWNWARD): Change all
uses to __LIBGCC_STACK_GROWS_DOWNWARD__.
(DWARF_FRAME_REGISTERS): Change all uses to
__LIBGCC_DWARF_FRAME_REGISTERS__.
(EH_RETURN_STACKADJ_RTX): Change all uses to
__LIBGCC_EH_RETURN_STACKADJ_RTX__.
* config/cr16/unwind-dw2.h (DWARF_FRAME_REGISTERS): Change use to
__LIBGCC_DWARF_FRAME_REGISTERS__. Remove conditional definition.
* config/i386/cygming-crtbegin.c (EH_FRAME_SECTION_NAME): Change
use to __LIBGCC_EH_FRAME_SECTION_NAME__.
(JCR_SECTION_NAME): Change use to __LIBGCC_JCR_SECTION_NAME__.
* config/i386/cygming-crtend.c (EH_FRAME_SECTION_NAME): Change use
to __LIBGCC_EH_FRAME_SECTION_NAME__.
(JCR_SECTION_NAME): Change use to __LIBGCC_JCR_SECTION_NAME__
* config/mips/linux-unwind.h (STACK_POINTER_REGNUM): Change use to
__LIBGCC_STACK_POINTER_REGNUM__.
(DWARF_ALT_FRAME_RETURN_COLUMN): Change all uses to
__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
* config/nios2/linux-unwind.h (STACK_POINTER_REGNUM): Change use
to __LIBGCC_STACK_POINTER_REGNUM__.
* config/pa/hpux-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN): Change
all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
* config/pa/linux-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN): Change
all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
* config/rs6000/aix-unwind.h (DWARF_ALT_FRAME_RETURN_COLUMN):
Change all uses to __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__.
(STACK_POINTER_REGNUM): Change all uses to
__LIBGCC_STACK_POINTER_REGNUM__.
* config/rs6000/darwin-fallback.c (STACK_POINTER_REGNUM): Change
use to __LIBGCC_STACK_POINTER_REGNUM__.
* config/rs6000/linux-unwind.h (STACK_POINTER_REGNUM): Change all
uses to __LIBGCC_STACK_POINTER_REGNUM__.
* config/sparc/linux-unwind.h (DWARF_FRAME_REGISTERS): Change use
to __LIBGCC_DWARF_FRAME_REGISTERS__.
* config/sparc/sol2-unwind.h (DWARF_FRAME_REGISTERS): Change use
to __LIBGCC_DWARF_FRAME_REGISTERS__.
* config/tilepro/linux-unwind.h (STACK_POINTER_REGNUM): Change use
to __LIBGCC_STACK_POINTER_REGNUM__.
* config/xtensa/unwind-dw2-xtensa.h (DWARF_FRAME_REGISTERS):
Remove conditional definition.
* crtstuff.c (TEXT_SECTION_ASM_OP): Change all uses to
__LIBGCC_TEXT_SECTION_ASM_OP__.
(EH_FRAME_SECTION_NAME): Change all uses to
__LIBGCC_EH_FRAME_SECTION_NAME__.
(EH_TABLES_CAN_BE_READ_ONLY): Change all uses to
__LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__.
(CTORS_SECTION_ASM_OP): Change all uses to
__LIBGCC_CTORS_SECTION_ASM_OP__.
(DTORS_SECTION_ASM_OP): Change all uses to
__LIBGCC_DTORS_SECTION_ASM_OP__.
(JCR_SECTION_NAME): Change all uses to
__LIBGCC_JCR_SECTION_NAME__.
(INIT_SECTION_ASM_OP): Change all uses to
__LIBGCC_INIT_SECTION_ASM_OP__.
(INIT_ARRAY_SECTION_ASM_OP): Change all uses to
__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__.
* generic-morestack.c (STACK_GROWS_DOWNWARD): Change all uses to
__LIBGCC_STACK_GROWS_DOWNWARD__.
* libgcc2.c (INIT_SECTION_ASM_OP): Change all uses to
__LIBGCC_INIT_SECTION_ASM_OP__.
(INIT_ARRAY_SECTION_ASM_OP): Change all uses to
__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__.
(EH_FRAME_SECTION_NAME): Change all uses to
__LIBGCC_EH_FRAME_SECTION_NAME__.
* libgcov-profiler.c (VTABLE_USES_DESCRIPTORS): Remove conditional
definitions. Change all uses to
__LIBGCC_VTABLE_USES_DESCRIPTORS__.
* unwind-dw2.c (STACK_GROWS_DOWNWARD): Change all uses to
__LIBGCC_STACK_GROWS_DOWNWARD__.
(DWARF_FRAME_REGISTERS): Change all uses to
__LIBGCC_DWARF_FRAME_REGISTERS__.
(EH_RETURN_STACKADJ_RTX): Change all uses to
__LIBGCC_EH_RETURN_STACKADJ_RTX__.
* unwind-dw2.h (DWARF_FRAME_REGISTERS): Remove conditional
definition. Change use to __LIBGCC_DWARF_FRAME_REGISTERS__.
* unwind-sjlj.c (DONT_USE_BUILTIN_SETJMP): Change all uses to
__LIBGCC_DONT_USE_BUILTIN_SETJMP__.
(JMP_BUF_SIZE): Change use to __LIBGCC_JMP_BUF_SIZE__.
2014-09-02 Nathan sidwell <nathan@acm.org>
* libgcov-interface.c (STRONG_ALIAS): New.

View File

@ -283,7 +283,7 @@ INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
-finhibit-size-directive -fno-inline -fno-exceptions \
-fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize \
-fno-stack-protector \
-fbuilding-libgcc -fno-stack-protector \
$(INHIBIT_LIBC_CFLAGS)
# Extra flags to use when compiling crt{begin,end}.o.

View File

@ -81,7 +81,7 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
new_cfa = (_Unwind_Ptr) sc;
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
for (i = 0; i < AARCH64_DWARF_NUMBER_R; i++)
@ -144,11 +144,12 @@ aarch64_fallback_frame_state (struct _Unwind_Context *context,
fs->signal_frame = 1;
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_VAL_OFFSET;
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset =
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].how =
REG_SAVED_VAL_OFFSET;
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].loc.offset =
(_Unwind_Ptr) (sc->pc) - new_cfa;
fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
fs->retaddr_column = __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__;
return _URC_NO_REASON;
}

View File

@ -58,7 +58,7 @@ do { \
{ if ((((STATUS) & 1) != 1)) return _URC_END_OF_STACK; }
#define DENOTES_EXC_DISPATCHER(PV) ((PV) == (ADDR) (REG) SYS$GL_CALL_HANDL)
#define RA_COLUMN (DWARF_ALT_FRAME_RETURN_COLUMN)
#define RA_COLUMN (__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__)
static int
alpha_vms_fallback_frame_state (struct _Unwind_Context *context,

View File

@ -42,16 +42,16 @@
#ifndef __USING_SJLJ_EXCEPTIONS__
#ifndef STACK_GROWS_DOWNWARD
#define STACK_GROWS_DOWNWARD 0
#ifndef __LIBGCC_STACK_GROWS_DOWNWARD__
#define __LIBGCC_STACK_GROWS_DOWNWARD__ 0
#else
#undef STACK_GROWS_DOWNWARD
#define STACK_GROWS_DOWNWARD 1
#undef __LIBGCC_STACK_GROWS_DOWNWARD__
#define __LIBGCC_STACK_GROWS_DOWNWARD__ 1
#endif
/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */
#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS
#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
#define PRE_GCC3_DWARF_FRAME_REGISTERS __LIBGCC_DWARF_FRAME_REGISTERS__
#endif
#ifndef DWARF_REG_TO_UNWIND_COLUMN
@ -101,7 +101,7 @@ _Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
to its caller. */
struct _Unwind_Context
{
_Unwind_Context_Reg_Val reg[DWARF_FRAME_REGISTERS+1];
_Unwind_Context_Reg_Val reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
void *cfa;
void *ra;
void *lsda;
@ -115,11 +115,11 @@ struct _Unwind_Context
struct _Unwind_Context. */
_Unwind_Word version;
_Unwind_Word args_size;
char by_value[DWARF_FRAME_REGISTERS+1];
char by_value[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
};
/* Byte size of every register managed by these routines. */
static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS+1];
static unsigned char dwarf_reg_size_table[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
/* Read unaligned data from the instruction buffer. */
@ -1327,7 +1327,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
void *cfa;
long i;
#ifdef EH_RETURN_STACKADJ_RTX
#ifdef __LIBGCC_EH_RETURN_STACKADJ_RTX__
/* Special handling here: Many machines do not use a frame pointer,
and track the CFA only through offsets from the stack pointer from
one frame to the next. In this case, the stack pointer is never
@ -1375,7 +1375,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
context->cfa = cfa;
/* Compute the addresses of all registers saved in this frame. */
for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__ + 1; ++i)
switch (fs->regs.reg[i].how)
{
case REG_UNSAVED:
@ -1601,7 +1601,7 @@ uw_install_context_1 (struct _Unwind_Context *current,
if (!_Unwind_GetGRPtr (target, __builtin_dwarf_sp_column ()))
_Unwind_SetSpColumn (target, target->cfa, &sp_slot);
for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__; ++i)
{
void *c = (void *) (_Unwind_Internal_Ptr) current->reg[i];
void *t = (void *) (_Unwind_Internal_Ptr)target->reg[i];
@ -1637,7 +1637,7 @@ uw_install_context_1 (struct _Unwind_Context *current,
target_cfa = _Unwind_GetPtr (target, __builtin_dwarf_sp_column ());
/* We adjust SP by the difference between CURRENT and TARGET's CFA. */
if (STACK_GROWS_DOWNWARD)
if (__LIBGCC_STACK_GROWS_DOWNWARD__)
return target_cfa - current->cfa + target->args_size;
else
return current->cfa - target_cfa - target->args_size;
@ -1651,7 +1651,7 @@ uw_identify_context (struct _Unwind_Context *context)
/* The CFA is not sufficient to disambiguate the context of a function
interrupted by a signal before establishing its frame and the context
of the signal itself. */
if (STACK_GROWS_DOWNWARD)
if (__LIBGCC_STACK_GROWS_DOWNWARD__)
return _Unwind_GetCFA (context) - _Unwind_IsSignalFrame (context);
else
return _Unwind_GetCFA (context) + _Unwind_IsSignalFrame (context);

View File

@ -22,12 +22,6 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* A target can override (perhaps for backward compatibility) how
many dwarf2 columns are unwound. */
#ifndef DWARF_FRAME_REGISTERS
#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
#endif
/* The result of interpreting the frame unwind info for a frame.
This is all symbolic at this point, as none of the values can
be resolved until the target pc is located. */
@ -52,7 +46,7 @@ typedef struct
REG_SAVED_VAL_EXP,
REG_UNDEFINED
} how;
} reg[DWARF_FRAME_REGISTERS+1];
} reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
/* Used to implement DW_CFA_remember_state. */
struct frame_state_reg_info *prev;

View File

@ -95,7 +95,7 @@ _Jv_RegisterClasses (__attribute__((unused)) const void *p)
register/deregister it with the exception handling library code. */
#if DWARF2_UNWIND_INFO
static EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[]
__attribute__((used, section(EH_FRAME_SECTION_NAME), aligned(4)))
__attribute__((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4)))
= { };
static struct object obj;
@ -107,7 +107,7 @@ static void * (*deregister_frame_fn) (const void *) = NULL;
#if TARGET_USE_JCR_SECTION
static void *__JCR_LIST__[]
__attribute__ ((used, section(JCR_SECTION_NAME), aligned(4)))
__attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__), aligned(4)))
= { };
#endif

View File

@ -48,7 +48,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
this would be the 'length' field in a real FDE. */
static EH_FRAME_SECTION_CONST int __FRAME_END__[]
__attribute__ ((used, section(EH_FRAME_SECTION_NAME),
__attribute__ ((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__),
aligned(4)))
= { 0 };
#endif
@ -56,7 +56,7 @@ static EH_FRAME_SECTION_CONST int __FRAME_END__[]
#if TARGET_USE_JCR_SECTION
/* Null terminate the .jcr section array. */
static void *__JCR_END__[1]
__attribute__ ((used, section(JCR_SECTION_NAME),
__attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__),
aligned(sizeof(void *))))
= { 0 };
#endif

View File

@ -90,7 +90,7 @@ mips_fallback_frame_state (struct _Unwind_Context *context,
new_cfa = (_Unwind_Ptr) sc;
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
/* On o32 Linux, the register save slots in the sigcontext are
@ -115,10 +115,11 @@ mips_fallback_frame_state (struct _Unwind_Context *context,
Note that setting fs->signal_frame would not work. As the comment
above MASK_RETURN_ADDR explains, MIPS unwinders must earch for an
odd-valued address. */
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_VAL_OFFSET;
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].how
= REG_SAVED_VAL_OFFSET;
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].loc.offset
= (_Unwind_Ptr)(sc->sc_pc) + 2 - new_cfa;
fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
fs->retaddr_column = __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__;
return _URC_NO_REASON;
}

View File

@ -81,7 +81,7 @@ nios2_fallback_frame_state (struct _Unwind_Context *context,
/* The CFA is the user's incoming stack pointer value. */
new_cfa = (_Unwind_Ptr)regs->gregs[28];
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (_Unwind_Ptr) context->cfa;
/* The sequential registers. */

View File

@ -349,8 +349,8 @@ pa_fallback_frame_state (struct _Unwind_Context *context,
UPDATE_FS_FOR_SAR (fs, 88);
}
fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
UPDATE_FS_FOR_PC (fs, DWARF_ALT_FRAME_RETURN_COLUMN);
fs->retaddr_column = __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__;
UPDATE_FS_FOR_PC (fs, __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__);
fs->signal_frame = 1;
return _URC_NO_REASON;

View File

@ -131,10 +131,11 @@ pa32_fallback_frame_state (struct _Unwind_Context *context,
}
fs->regs.reg[88].how = REG_SAVED_OFFSET;
fs->regs.reg[88].loc.offset = (long) &sc->sc_sar - new_cfa;
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].how = REG_SAVED_OFFSET;
fs->regs.reg[DWARF_ALT_FRAME_RETURN_COLUMN].loc.offset
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].how
= REG_SAVED_OFFSET;
fs->regs.reg[__LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__].loc.offset
= (long) &sc->sc_iaoq[0] - new_cfa;
fs->retaddr_column = DWARF_ALT_FRAME_RETURN_COLUMN;
fs->retaddr_column = __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__;
fs->signal_frame = 1;
return _URC_NO_REASON;
}

View File

@ -175,8 +175,8 @@ ucontext_for (struct _Unwind_Context *context)
/* The fallback proper. */
#ifdef DWARF_ALT_FRAME_RETURN_COLUMN
#define RETURN_COLUMN DWARF_ALT_FRAME_RETURN_COLUMN
#ifdef __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__
#define RETURN_COLUMN __LIBGCC_DWARF_ALT_FRAME_RETURN_COLUMN__
#else
#define RETURN_COLUMN ARG_POINTER_REGNUM
#endif
@ -204,17 +204,17 @@ ppc_aix_fallback_frame_state (struct _Unwind_Context *context,
/* The "kernel" frame cfa is the stack pointer at the signal occurrence
point. */
new_cfa = mctx->gpr[STACK_POINTER_REGNUM];
new_cfa = mctx->gpr[__LIBGCC_STACK_POINTER_REGNUM__];
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
/* And we state how to find the various registers it has saved with
relative offset rules from there. */
for (i = 0; i < 32; i++)
if (i != STACK_POINTER_REGNUM)
if (i != __LIBGCC_STACK_POINTER_REGNUM__)
REGISTER_CFA_OFFSET_FOR (fs, i, &mctx->gpr[i], new_cfa);
REGISTER_CFA_OFFSET_FOR (fs, CR2_REGNO, &mctx->cr, new_cfa);

View File

@ -438,7 +438,7 @@ handle_syscall (_Unwind_FrameState *fs, const reg_unit gprs[32],
}
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - old_cfa;;
/* The choice of column for the return address is somewhat tricky.

View File

@ -205,9 +205,9 @@ ppc_fallback_frame_state (struct _Unwind_Context *context,
if (regs == NULL)
return _URC_END_OF_STACK;
new_cfa = regs->gpr[STACK_POINTER_REGNUM];
new_cfa = regs->gpr[__LIBGCC_STACK_POINTER_REGNUM__];
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
#ifdef __powerpc64__

View File

@ -121,7 +121,7 @@ sparc64_frob_update_context (struct _Unwind_Context *context,
context->cfa -= STACK_BIAS;
for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__ + 1; ++i)
if (fs->regs.reg[i].how == REG_SAVED_OFFSET)
_Unwind_SetGRPtr (context, i,
_Unwind_GetGRPtr (context, i) - STACK_BIAS);

View File

@ -139,7 +139,7 @@ sparc64_frob_update_context (struct _Unwind_Context *context,
context->cfa -= STACK_BIAS;
for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__ + 1; ++i)
if (fs->regs.reg[i].how == REG_SAVED_OFFSET)
_Unwind_SetGRPtr (context, i,
_Unwind_GetGRPtr (context, i) - STACK_BIAS);

View File

@ -78,7 +78,7 @@ tile_fallback_frame_state (struct _Unwind_Context *context,
new_cfa = sc->sp;
fs->regs.cfa_how = CFA_REG_OFFSET;
fs->regs.cfa_reg = STACK_POINTER_REGNUM;
fs->regs.cfa_reg = __LIBGCC_STACK_POINTER_REGNUM__;
fs->regs.cfa_offset = new_cfa - (long) context->cfa;
for (i = 0; i < 56; ++i)

View File

@ -22,12 +22,6 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* A target can override (perhaps for backward compatibility) how
many dwarf2 columns are unwound. */
#ifndef DWARF_FRAME_REGISTERS
#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
#endif
/* Xtensa's variable-size register window save areas can be unwound without
any unwind info. This is a stripped down version of the standard DWARF
_Unwind_FrameState. */

View File

@ -76,7 +76,7 @@ call_ ## FUNC (void) \
asm (SECTION_OP); \
FUNC (); \
FORCE_CODE_SECTION_ALIGN \
asm (TEXT_SECTION_ASM_OP); \
asm (__LIBGCC_TEXT_SECTION_ASM_OP__); \
}
#endif
@ -131,10 +131,11 @@ call_ ## FUNC (void) \
# define USE_PT_GNU_EH_FRAME
#endif
#if defined(EH_FRAME_SECTION_NAME) && !defined(USE_PT_GNU_EH_FRAME)
#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) && !defined(USE_PT_GNU_EH_FRAME)
# define USE_EH_FRAME_REGISTRY
#endif
#if defined(EH_FRAME_SECTION_NAME) && EH_TABLES_CAN_BE_READ_ONLY
#if defined(__LIBGCC_EH_FRAME_SECTION_NAME__) \
&& __LIBGCC_EH_TABLES_CAN_BE_READ_ONLY__
# define EH_FRAME_SECTION_CONST const
#else
# define EH_FRAME_SECTION_CONST
@ -224,11 +225,11 @@ typedef void (*func_ptr) (void);
does not start with a count of elements. */
#ifdef CTOR_LIST_BEGIN
CTOR_LIST_BEGIN;
#elif defined(CTORS_SECTION_ASM_OP)
#elif defined(__LIBGCC_CTORS_SECTION_ASM_OP__)
/* Hack: force cc1 to switch to .data section early, so that assembling
__CTOR_LIST__ does not undo our behind-the-back change to .ctors. */
static func_ptr force_to_data[1] __attribute__ ((__used__)) = { };
asm (CTORS_SECTION_ASM_OP);
asm (__LIBGCC_CTORS_SECTION_ASM_OP__);
STATIC func_ptr __CTOR_LIST__[1]
__attribute__ ((__used__, aligned(sizeof(func_ptr))))
= { (func_ptr) (-1) };
@ -240,8 +241,8 @@ STATIC func_ptr __CTOR_LIST__[1]
#ifdef DTOR_LIST_BEGIN
DTOR_LIST_BEGIN;
#elif defined(DTORS_SECTION_ASM_OP)
asm (DTORS_SECTION_ASM_OP);
#elif defined(__LIBGCC_DTORS_SECTION_ASM_OP__)
asm (__LIBGCC_DTORS_SECTION_ASM_OP__);
STATIC func_ptr __DTOR_LIST__[1]
__attribute__ ((aligned(sizeof(func_ptr))))
= { (func_ptr) (-1) };
@ -256,17 +257,18 @@ STATIC func_ptr __DTOR_LIST__[1]
/* Stick a label at the beginning of the frame unwind info so we can register
and deregister it with the exception handling library code. */
STATIC EH_FRAME_SECTION_CONST char __EH_FRAME_BEGIN__[]
__attribute__((section(EH_FRAME_SECTION_NAME), aligned(4)))
__attribute__((section(__LIBGCC_EH_FRAME_SECTION_NAME__), aligned(4)))
= { };
#endif /* USE_EH_FRAME_REGISTRY */
#ifdef JCR_SECTION_NAME
#ifdef __LIBGCC_JCR_SECTION_NAME__
/* Stick a label at the beginning of the java class registration info
so we can register them properly. */
STATIC void *__JCR_LIST__[]
__attribute__ ((used, section(JCR_SECTION_NAME), aligned(sizeof(void*))))
__attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__),
aligned(sizeof(void*))))
= { };
#endif /* JCR_SECTION_NAME */
#endif /* __LIBGCC_JCR_SECTION_NAME__ */
#if USE_TM_CLONE_REGISTRY
STATIC func_ptr __TMC_LIST__[]
@ -317,7 +319,8 @@ register_tm_clones (void)
}
#endif /* USE_TM_CLONE_REGISTRY */
#if defined(INIT_SECTION_ASM_OP) || defined(INIT_ARRAY_SECTION_ASM_OP)
#if defined(__LIBGCC_INIT_SECTION_ASM_OP__) \
|| defined(__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__)
#ifdef OBJECT_FORMAT_ELF
@ -438,11 +441,12 @@ __do_global_dtors_aux_1 (void)
{
atexit (__do_global_dtors_aux);
}
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, __do_global_dtors_aux_1)
CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__,
__do_global_dtors_aux_1)
#endif
#if defined(USE_EH_FRAME_REGISTRY) \
|| defined(JCR_SECTION_NAME) \
|| defined(__LIBGCC_JCR_SECTION_NAME__) \
|| defined(USE_TM_CLONE_REGISTRY)
/* Stick a call to __register_frame_info into the .init section. For some
reason calls with no arguments work more reliably in .init, so stick the
@ -465,7 +469,7 @@ frame_dummy (void)
#endif /* CRT_GET_RFIB_DATA */
#endif /* USE_EH_FRAME_REGISTRY */
#ifdef JCR_SECTION_NAME
#ifdef __LIBGCC_JCR_SECTION_NAME__
void **jcr_list;
__asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__));
if (__builtin_expect (*jcr_list != NULL, 0))
@ -475,21 +479,21 @@ frame_dummy (void)
if (register_classes)
register_classes (jcr_list);
}
#endif /* JCR_SECTION_NAME */
#endif /* __LIBGCC_JCR_SECTION_NAME__ */
#if USE_TM_CLONE_REGISTRY
register_tm_clones ();
#endif /* USE_TM_CLONE_REGISTRY */
}
#ifdef INIT_SECTION_ASM_OP
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, frame_dummy)
#else /* defined(INIT_SECTION_ASM_OP) */
#ifdef __LIBGCC_INIT_SECTION_ASM_OP__
CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__, frame_dummy)
#else /* defined(__LIBGCC_INIT_SECTION_ASM_OP__) */
static func_ptr __frame_dummy_init_array_entry[]
__attribute__ ((__used__, section(".init_array"), aligned(sizeof(func_ptr))))
= { frame_dummy };
#endif /* !defined(INIT_SECTION_ASM_OP) */
#endif /* USE_EH_FRAME_REGISTRY || JCR_SECTION_NAME || USE_TM_CLONE_REGISTRY */
#endif /* !defined(__LIBGCC_INIT_SECTION_ASM_OP__) */
#endif /* USE_EH_FRAME_REGISTRY || __LIBGCC_JCR_SECTION_NAME__ || USE_TM_CLONE_REGISTRY */
#else /* OBJECT_FORMAT_ELF */
@ -513,7 +517,7 @@ __do_global_ctors (void)
#endif
}
asm (INIT_SECTION_ASM_OP); /* cc1 doesn't know that we are switching! */
asm (__LIBGCC_INIT_SECTION_ASM_OP__); /* cc1 doesn't know that we are switching! */
/* A routine to invoke all of the global constructors upon entry to the
program. We put this into the .init section (for systems that have
@ -524,14 +528,14 @@ static void __attribute__((used))
__do_global_ctors_aux (void) /* prologue goes in .init section */
{
FORCE_CODE_SECTION_ALIGN /* explicit align before switch to .text */
asm (TEXT_SECTION_ASM_OP); /* don't put epilogue and body in .init */
asm (__LIBGCC_TEXT_SECTION_ASM_OP__); /* don't put epilogue and body in .init */
DO_GLOBAL_CTORS_BODY;
atexit (__do_global_dtors);
}
#endif /* OBJECT_FORMAT_ELF */
#elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */
#elif defined(HAS_INIT_SECTION) /* ! __LIBGCC_INIT_SECTION_ASM_OP__ */
extern void __do_global_dtors (void);
@ -557,7 +561,7 @@ __do_global_dtors (void)
}
#if defined(USE_EH_FRAME_REGISTRY) \
|| defined(JCR_SECTION_NAME) \
|| defined(__LIBGCC_JCR_SECTION_NAME__) \
|| defined(USE_TM_CLONE_REGISTRY)
/* A helper function for __do_global_ctors, which is in crtend.o. Here
in crtbegin.o, we can reference a couple of symbols not visible there.
@ -572,7 +576,7 @@ __do_global_ctors_1(void)
__register_frame_info (__EH_FRAME_BEGIN__, &object);
#endif
#ifdef JCR_SECTION_NAME
#ifdef __LIBGCC_JCR_SECTION_NAME__
void **jcr_list
__asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__));
if (__builtin_expect (*jcr_list != NULL, 0))
@ -588,9 +592,9 @@ __do_global_ctors_1(void)
register_tm_clones ();
#endif /* USE_TM_CLONE_REGISTRY */
}
#endif /* USE_EH_FRAME_REGISTRY || JCR_SECTION_NAME || USE_TM_CLONE_REGISTRY */
#endif /* USE_EH_FRAME_REGISTRY || __LIBGCC_JCR_SECTION_NAME__ || USE_TM_CLONE_REGISTRY */
#else /* ! INIT_SECTION_ASM_OP && ! HAS_INIT_SECTION */
#else /* ! __LIBGCC_INIT_SECTION_ASM_OP__ && ! HAS_INIT_SECTION */
#error "What are you doing with crtstuff.c, then?"
#endif
@ -607,11 +611,11 @@ __do_global_ctors_1(void)
#ifdef CTOR_LIST_END
CTOR_LIST_END;
#elif defined(CTORS_SECTION_ASM_OP)
#elif defined(__LIBGCC_CTORS_SECTION_ASM_OP__)
/* Hack: force cc1 to switch to .data section early, so that assembling
__CTOR_LIST__ does not undo our behind-the-back change to .ctors. */
static func_ptr force_to_data[1] __attribute__ ((__used__)) = { };
asm (CTORS_SECTION_ASM_OP);
asm (__LIBGCC_CTORS_SECTION_ASM_OP__);
STATIC func_ptr __CTOR_END__[1]
__attribute__((aligned(sizeof(func_ptr))))
= { (func_ptr) 0 };
@ -624,18 +628,18 @@ STATIC func_ptr __CTOR_END__[1]
#ifdef DTOR_LIST_END
DTOR_LIST_END;
#elif defined(HIDDEN_DTOR_LIST_END)
#ifdef DTORS_SECTION_ASM_OP
asm (DTORS_SECTION_ASM_OP);
#ifdef __LIBGCC_DTORS_SECTION_ASM_OP__
asm (__LIBGCC_DTORS_SECTION_ASM_OP__);
#endif
func_ptr __DTOR_END__[1]
__attribute__ ((used,
#ifndef DTORS_SECTION_ASM_OP
#ifndef __LIBGCC_DTORS_SECTION_ASM_OP__
section(".dtors"),
#endif
aligned(sizeof(func_ptr)), visibility ("hidden")))
= { (func_ptr) 0 };
#elif defined(DTORS_SECTION_ASM_OP)
asm (DTORS_SECTION_ASM_OP);
#elif defined(__LIBGCC_DTORS_SECTION_ASM_OP__)
asm (__LIBGCC_DTORS_SECTION_ASM_OP__);
STATIC func_ptr __DTOR_END__[1]
__attribute__ ((used, aligned(sizeof(func_ptr))))
= { (func_ptr) 0 };
@ -646,7 +650,7 @@ STATIC func_ptr __DTOR_END__[1]
#endif
#endif /* USE_INITFINI_ARRAY */
#ifdef EH_FRAME_SECTION_NAME
#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__
/* Terminate the frame unwind info section with a 4byte 0 as a sentinel;
this would be the 'length' field in a real FDE. */
# if __INT_MAX__ == 2147483647
@ -659,18 +663,18 @@ typedef short int32;
# error "Missing a 4 byte integer"
# endif
STATIC EH_FRAME_SECTION_CONST int32 __FRAME_END__[]
__attribute__ ((used, section(EH_FRAME_SECTION_NAME),
__attribute__ ((used, section(__LIBGCC_EH_FRAME_SECTION_NAME__),
aligned(sizeof(int32))))
= { 0 };
#endif /* EH_FRAME_SECTION_NAME */
#endif /* __LIBGCC_EH_FRAME_SECTION_NAME__ */
#ifdef JCR_SECTION_NAME
#ifdef __LIBGCC_JCR_SECTION_NAME__
/* Null terminate the .jcr section array. */
STATIC void *__JCR_END__[1]
__attribute__ ((used, section(JCR_SECTION_NAME),
__attribute__ ((used, section(__LIBGCC_JCR_SECTION_NAME__),
aligned(sizeof(void *))))
= { 0 };
#endif /* JCR_SECTION_NAME */
#endif /* __LIBGCC_JCR_SECTION_NAME__ */
#if USE_TM_CLONE_REGISTRY
# ifndef HAVE_GAS_HIDDEN
@ -685,11 +689,11 @@ func_ptr __TMC_END__[]
# endif
#endif /* USE_TM_CLONE_REGISTRY */
#ifdef INIT_ARRAY_SECTION_ASM_OP
#ifdef __LIBGCC_INIT_ARRAY_SECTION_ASM_OP__
/* If we are using .init_array, there is nothing to do. */
#elif defined(INIT_SECTION_ASM_OP)
#elif defined(__LIBGCC_INIT_SECTION_ASM_OP__)
#ifdef OBJECT_FORMAT_ELF
static void __attribute__((used))
@ -701,7 +705,7 @@ __do_global_ctors_aux (void)
}
/* Stick a call to __do_global_ctors_aux into the .init section. */
CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, __do_global_ctors_aux)
CRT_CALL_STATIC_FUNCTION (__LIBGCC_INIT_SECTION_ASM_OP__, __do_global_ctors_aux)
#else /* OBJECT_FORMAT_ELF */
/* Stick the real initialization code, followed by a normal sort of
@ -728,17 +732,17 @@ CRT_CALL_STATIC_FUNCTION (INIT_SECTION_ASM_OP, __do_global_ctors_aux)
static void
__do_global_ctors_aux (void) /* prologue goes in .text section */
{
asm (INIT_SECTION_ASM_OP);
asm (__LIBGCC_INIT_SECTION_ASM_OP__);
DO_GLOBAL_CTORS_BODY;
atexit (__do_global_dtors);
} /* epilogue and body go in .init section */
FORCE_CODE_SECTION_ALIGN
asm (TEXT_SECTION_ASM_OP);
asm (__LIBGCC_TEXT_SECTION_ASM_OP__);
#endif /* OBJECT_FORMAT_ELF */
#elif defined(HAS_INIT_SECTION) /* ! INIT_SECTION_ASM_OP */
#elif defined(HAS_INIT_SECTION) /* ! __LIBGCC_INIT_SECTION_ASM_OP__ */
extern void __do_global_ctors (void);
@ -750,7 +754,7 @@ __do_global_ctors (void)
{
func_ptr *p;
#if defined(USE_EH_FRAME_REGISTRY) \
|| defined(JCR_SECTION_NAME) \
|| defined(__LIBGCC_JCR_SECTION_NAME__) \
|| defined(USE_TM_CLONE_REGISTRY)
__do_global_ctors_1();
#endif
@ -758,7 +762,7 @@ __do_global_ctors (void)
(*p) ();
}
#else /* ! INIT_SECTION_ASM_OP && ! HAS_INIT_SECTION */
#else /* ! __LIBGCC_INIT_SECTION_ASM_OP__ && ! HAS_INIT_SECTION */
#error "What are you doing with crtstuff.c, then?"
#endif

View File

@ -378,7 +378,7 @@ allocate_segment (size_t frame_size)
{
void *guard;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
guard = space;
space = (char *) space + pagesize;
#else
@ -496,7 +496,7 @@ __generic_morestack_set_initial_sp (void *sp, size_t len)
to the nearest 512 byte boundary. It's not essential that we be
precise here; getting it wrong will just leave some stack space
unused. */
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
sp = (void *) ((((__UINTPTR_TYPE__) sp + 511U) / 512U) * 512U);
#else
sp = (void *) ((((__UINTPTR_TYPE__) sp - 511U) / 512U) * 512U);
@ -584,7 +584,7 @@ __generic_morestack (size_t *pframe_size, void *old_stack, size_t param_size)
/* Align the returned stack to a 32-byte boundary. */
aligned = (param_size + 31) & ~ (size_t) 31;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
{
char *bottom = (char *) (current + 1) + current->size;
to = bottom - aligned;
@ -628,7 +628,7 @@ __generic_releasestack (size_t *pavailable)
if (current != NULL)
{
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
*pavailable = (char *) old_stack - (char *) (current + 1);
#else
*pavailable = (char *) (current + 1) + current->size - (char *) old_stack;
@ -639,7 +639,7 @@ __generic_releasestack (size_t *pavailable)
size_t used;
/* We have popped back to the original stack. */
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
if ((char *) old_stack >= (char *) __morestack_initial_sp.sp)
used = 0;
else
@ -778,7 +778,7 @@ __generic_findstack (void *stack)
&& (char *) pss + pss->size > (char *) stack)
{
__morestack_current_segment = pss;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
return (char *) stack - (char *) (pss + 1);
#else
return (char *) (pss + 1) + pss->size - (char *) stack;
@ -791,7 +791,7 @@ __generic_findstack (void *stack)
if (__morestack_initial_sp.sp == NULL)
return 0;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
if ((char *) stack >= (char *) __morestack_initial_sp.sp)
used = 0;
else
@ -869,7 +869,7 @@ __splitstack_find (void *segment_arg, void *sp, size_t *len,
*next_segment = (void *) (uintptr_type) 2;
*next_sp = NULL;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
if ((char *) sp >= isp)
return NULL;
*len = (char *) isp - (char *) sp;
@ -942,7 +942,7 @@ __splitstack_find (void *segment_arg, void *sp, size_t *len,
*next_sp = (void *) nsp;
}
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
*len = (char *) (segment + 1) + segment->size - (char *) sp;
ret = (void *) sp;
#else
@ -1046,7 +1046,7 @@ __splitstack_makecontext (size_t stack_size, void *context[NUMBER_OFFSETS],
segment = allocate_segment (stack_size);
context[MORESTACK_SEGMENTS] = segment;
context[CURRENT_SEGMENT] = segment;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
initial_sp = (void *) ((char *) (segment + 1) + segment->size);
#else
initial_sp = (void *) (segment + 1);
@ -1082,13 +1082,13 @@ __splitstack_resetcontext (void *context[10], size_t *size)
initial_sp = context[INITIAL_SP];
initial_size = (uintptr_type) context[INITIAL_SP_LEN];
ret = initial_sp;
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
ret = (void *) ((char *) ret - initial_size);
#endif
}
else
{
#ifdef STACK_GROWS_DOWNWARD
#ifdef __LIBGCC_STACK_GROWS_DOWNWARD__
initial_sp = (void *) ((char *) (segment + 1) + segment->size);
#else
initial_sp = (void *) (segment + 1);

View File

@ -2209,7 +2209,8 @@ TRANSFER_FROM_TRAMPOLINE
#define SYMBOL__MAIN __main
#endif
#if defined (INIT_SECTION_ASM_OP) || defined (INIT_ARRAY_SECTION_ASM_OP)
#if defined (__LIBGCC_INIT_SECTION_ASM_OP__) \
|| defined (__LIBGCC_INIT_ARRAY_SECTION_ASM_OP__)
#undef HAS_INIT_SECTION
#define HAS_INIT_SECTION
#endif
@ -2219,7 +2220,7 @@ TRANSFER_FROM_TRAMPOLINE
/* Some ELF crosses use crtstuff.c to provide __CTOR_LIST__, but use this
code to run constructors. In that case, we need to handle EH here, too. */
#ifdef EH_FRAME_SECTION_NAME
#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__
#include "unwind-dw2-fde.h"
extern unsigned char __EH_FRAME_BEGIN__[];
#endif
@ -2239,7 +2240,7 @@ __do_global_dtors (void)
(*(p-1)) ();
}
#endif
#if defined (EH_FRAME_SECTION_NAME) && !defined (HAS_INIT_SECTION)
#if defined (__LIBGCC_EH_FRAME_SECTION_NAME__) && !defined (HAS_INIT_SECTION)
{
static int completed = 0;
if (! completed)
@ -2258,7 +2259,7 @@ __do_global_dtors (void)
void
__do_global_ctors (void)
{
#ifdef EH_FRAME_SECTION_NAME
#ifdef __LIBGCC_EH_FRAME_SECTION_NAME__
{
static struct object object;
__register_frame_info (__EH_FRAME_BEGIN__, &object);
@ -2312,7 +2313,8 @@ SYMBOL__MAIN (void)
must be in the bss/common section.
Long term no port should use those extensions. But many still do. */
#if !defined(INIT_SECTION_ASM_OP) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY)
#if !defined(__LIBGCC_INIT_SECTION_ASM_OP__) \
&& !defined(CTOR_LISTS_DEFINED_EXTERNALLY)
#if defined (TARGET_ASM_CONSTRUCTOR) || defined (USE_COLLECT2)
func_ptr __CTOR_LIST__[2] = {0, 0};
func_ptr __DTOR_LIST__[2] = {0, 0};
@ -2320,6 +2322,6 @@ func_ptr __DTOR_LIST__[2] = {0, 0};
func_ptr __CTOR_LIST__[2];
func_ptr __DTOR_LIST__[2];
#endif
#endif /* no INIT_SECTION_ASM_OP and not CTOR_LISTS_DEFINED_EXTERNALLY */
#endif /* no __LIBGCC_INIT_SECTION_ASM_OP__ and not CTOR_LISTS_DEFINED_EXTERNALLY */
#endif /* L_ctors */
#endif /* LIBGCC2_UNITS_PER_WORD <= MIN_UNITS_PER_WORD */

View File

@ -100,20 +100,11 @@ __gcov_one_value_profiler (gcov_type *counters, gcov_type value)
/* By default, the C++ compiler will use function addresses in the
vtable entries. Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero
tells the compiler to use function descriptors instead. The value
of this macro says how many words wide the descriptor is (normally 2),
but it may be dependent on target flags. Since we do not have access
to the target flags here we just check to see if it is set and use
that to set VTABLE_USES_DESCRIPTORS to 0 or 1.
of this macro says how many words wide the descriptor is (normally 2).
It is assumed that the address of a function descriptor may be treated
as a pointer to a function. */
#ifdef TARGET_VTABLE_USES_DESCRIPTORS
#define VTABLE_USES_DESCRIPTORS 1
#else
#define VTABLE_USES_DESCRIPTORS 0
#endif
/* Tries to determine the most common value among its inputs. */
void
__gcov_indirect_call_profiler (gcov_type* counter, gcov_type value,
@ -123,7 +114,7 @@ __gcov_indirect_call_profiler (gcov_type* counter, gcov_type value,
function may have multiple descriptors and we need to dereference
the descriptors to see if they point to the same function. */
if (cur_func == callee_func
|| (VTABLE_USES_DESCRIPTORS && callee_func
|| (__LIBGCC_VTABLE_USES_DESCRIPTORS__ && callee_func
&& *(void **) cur_func == *(void **) callee_func))
__gcov_one_value_profiler_body (counter, value);
}
@ -148,20 +139,11 @@ gcov_type * __gcov_indirect_call_counters;
/* By default, the C++ compiler will use function addresses in the
vtable entries. Setting TARGET_VTABLE_USES_DESCRIPTORS to nonzero
tells the compiler to use function descriptors instead. The value
of this macro says how many words wide the descriptor is (normally 2),
but it may be dependent on target flags. Since we do not have access
to the target flags here we just check to see if it is set and use
that to set VTABLE_USES_DESCRIPTORS to 0 or 1.
of this macro says how many words wide the descriptor is (normally 2).
It is assumed that the address of a function descriptor may be treated
as a pointer to a function. */
#ifdef TARGET_VTABLE_USES_DESCRIPTORS
#define VTABLE_USES_DESCRIPTORS 1
#else
#define VTABLE_USES_DESCRIPTORS 0
#endif
/* Tries to determine the most common value among its inputs. */
void
__gcov_indirect_call_profiler_v2 (gcov_type value, void* cur_func)
@ -170,7 +152,7 @@ __gcov_indirect_call_profiler_v2 (gcov_type value, void* cur_func)
function may have multiple descriptors and we need to dereference
the descriptors to see if they point to the same function. */
if (cur_func == __gcov_indirect_call_callee
|| (VTABLE_USES_DESCRIPTORS && __gcov_indirect_call_callee
|| (__LIBGCC_VTABLE_USES_DESCRIPTORS__ && __gcov_indirect_call_callee
&& *(void **) cur_func == *(void **) __gcov_indirect_call_callee))
__gcov_one_value_profiler_body (__gcov_indirect_call_counters, value);
}

View File

@ -43,16 +43,16 @@
#ifndef __USING_SJLJ_EXCEPTIONS__
#ifndef STACK_GROWS_DOWNWARD
#define STACK_GROWS_DOWNWARD 0
#ifndef __LIBGCC_STACK_GROWS_DOWNWARD__
#define __LIBGCC_STACK_GROWS_DOWNWARD__ 0
#else
#undef STACK_GROWS_DOWNWARD
#define STACK_GROWS_DOWNWARD 1
#undef __LIBGCC_STACK_GROWS_DOWNWARD__
#define __LIBGCC_STACK_GROWS_DOWNWARD__ 1
#endif
/* Dwarf frame registers used for pre gcc 3.0 compiled glibc. */
#ifndef PRE_GCC3_DWARF_FRAME_REGISTERS
#define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
#define PRE_GCC3_DWARF_FRAME_REGISTERS __LIBGCC_DWARF_FRAME_REGISTERS__
#endif
#ifndef DWARF_REG_TO_UNWIND_COLUMN
@ -86,7 +86,7 @@
ignore unwind data for unknown columns. */
#define UNWIND_COLUMN_IN_RANGE(x) \
__builtin_expect((x) <= DWARF_FRAME_REGISTERS, 1)
__builtin_expect((x) <= __LIBGCC_DWARF_FRAME_REGISTERS__, 1)
#ifdef REG_VALUE_IN_UNWIND_CONTEXT
typedef _Unwind_Word _Unwind_Context_Reg_Val;
@ -131,7 +131,7 @@ _Unwind_Get_Unwind_Context_Reg_Val (_Unwind_Word val)
to its caller. */
struct _Unwind_Context
{
_Unwind_Context_Reg_Val reg[DWARF_FRAME_REGISTERS+1];
_Unwind_Context_Reg_Val reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
void *cfa;
void *ra;
void *lsda;
@ -145,11 +145,11 @@ struct _Unwind_Context
struct _Unwind_Context. */
_Unwind_Word version;
_Unwind_Word args_size;
char by_value[DWARF_FRAME_REGISTERS+1];
char by_value[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
};
/* Byte size of every register managed by these routines. */
static unsigned char dwarf_reg_size_table[DWARF_FRAME_REGISTERS+1];
static unsigned char dwarf_reg_size_table[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
/* Read unaligned data from the instruction buffer. */
@ -1190,7 +1190,7 @@ execute_cfa_program (const unsigned char *insn_ptr,
case DW_CFA_GNU_window_save:
/* ??? Hardcoded for SPARC register window configuration. */
if (DWARF_FRAME_REGISTERS >= 32)
if (__LIBGCC_DWARF_FRAME_REGISTERS__ >= 32)
for (reg = 16; reg < 32; ++reg)
{
fs->regs.reg[reg].how = REG_SAVED_OFFSET;
@ -1384,7 +1384,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
void *cfa;
long i;
#ifdef EH_RETURN_STACKADJ_RTX
#ifdef __LIBGCC_EH_RETURN_STACKADJ_RTX__
/* Special handling here: Many machines do not use a frame pointer,
and track the CFA only through offsets from the stack pointer from
one frame to the next. In this case, the stack pointer is never
@ -1432,7 +1432,7 @@ uw_update_context_1 (struct _Unwind_Context *context, _Unwind_FrameState *fs)
context->cfa = cfa;
/* Compute the addresses of all registers saved in this frame. */
for (i = 0; i < DWARF_FRAME_REGISTERS + 1; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__ + 1; ++i)
switch (fs->regs.reg[i].how)
{
case REG_UNSAVED:
@ -1638,7 +1638,7 @@ uw_install_context_1 (struct _Unwind_Context *current,
if (!_Unwind_GetGRPtr (target, __builtin_dwarf_sp_column ()))
_Unwind_SetSpColumn (target, target->cfa, &sp_slot);
for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
for (i = 0; i < __LIBGCC_DWARF_FRAME_REGISTERS__; ++i)
{
void *c = (void *) (_Unwind_Internal_Ptr) current->reg[i];
void *t = (void *) (_Unwind_Internal_Ptr)target->reg[i];
@ -1674,7 +1674,7 @@ uw_install_context_1 (struct _Unwind_Context *current,
target_cfa = _Unwind_GetPtr (target, __builtin_dwarf_sp_column ());
/* We adjust SP by the difference between CURRENT and TARGET's CFA. */
if (STACK_GROWS_DOWNWARD)
if (__LIBGCC_STACK_GROWS_DOWNWARD__)
return target_cfa - current->cfa + target->args_size;
else
return current->cfa - target_cfa - target->args_size;
@ -1688,7 +1688,7 @@ uw_identify_context (struct _Unwind_Context *context)
/* The CFA is not sufficient to disambiguate the context of a function
interrupted by a signal before establishing its frame and the context
of the signal itself. */
if (STACK_GROWS_DOWNWARD)
if (__LIBGCC_STACK_GROWS_DOWNWARD__)
return _Unwind_GetCFA (context) - _Unwind_IsSignalFrame (context);
else
return _Unwind_GetCFA (context) + _Unwind_IsSignalFrame (context);

View File

@ -22,12 +22,6 @@
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* A target can override (perhaps for backward compatibility) how
many dwarf2 columns are unwound. */
#ifndef DWARF_FRAME_REGISTERS
#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
#endif
/* The result of interpreting the frame unwind info for a frame.
This is all symbolic at this point, as none of the values can
be resolved until the target pc is located. */
@ -52,7 +46,7 @@ typedef struct
REG_SAVED_VAL_EXP,
REG_UNDEFINED
} how;
} reg[DWARF_FRAME_REGISTERS+1];
} reg[__LIBGCC_DWARF_FRAME_REGISTERS__+1];
/* Used to implement DW_CFA_remember_state. */
struct frame_state_reg_info *prev;

View File

@ -32,11 +32,11 @@
#ifdef __USING_SJLJ_EXCEPTIONS__
#ifdef DONT_USE_BUILTIN_SETJMP
#ifdef __LIBGCC_DONT_USE_BUILTIN_SETJMP__
#ifndef inhibit_libc
#include <setjmp.h>
#else
typedef void *jmp_buf[JMP_BUF_SIZE];
typedef void *jmp_buf[__LIBGCC_JMP_BUF_SIZE__];
extern void longjmp(jmp_buf, int) __attribute__((noreturn));
#endif
#else
@ -70,7 +70,7 @@ struct SjLj_Function_Context
_Unwind_Personality_Fn personality;
void *lsda;
#ifdef DONT_USE_BUILTIN_SETJMP
#ifdef __LIBGCC_DONT_USE_BUILTIN_SETJMP__
/* We don't know what sort of alignment requirements the system
jmp_buf has. We over estimated in except.c, and now we have
to match that here just in case the system *didn't* have more
@ -185,7 +185,7 @@ _Unwind_GetCFA (struct _Unwind_Context *context __attribute__((unused)))
{
/* ??? Ideally __builtin_setjmp places the CFA in the jmpbuf. */
#ifndef DONT_USE_BUILTIN_SETJMP
#ifndef __LIBGCC_DONT_USE_BUILTIN_SETJMP__
/* This is a crude imitation of the CFA: the saved stack pointer.
This is roughly the CFA of the frame before CONTEXT. When using the
DWARF-2 unwinder _Unwind_GetCFA returns the CFA of the frame described