diff options
author | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-09-05 12:03:46 +0000 |
---|---|---|
committer | jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-09-05 12:03:46 +0000 |
commit | 325b8c3ceb2723870dd89f0da419841e2454b273 (patch) | |
tree | 71d3ae38a17711fac14acd3253bc2f21685ebb65 /libgcc/crtstuff.c | |
parent | 857e182a26d9b06a4fafd9cfc2489cda491c79d4 (diff) |
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__.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@214954 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc/crtstuff.c')
-rw-r--r-- | libgcc/crtstuff.c | 102 |
1 files changed, 53 insertions, 49 deletions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c index 9d5399acb5e..4bea6b9f8cc 100644 --- a/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c @@ -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 |