diff -r d37db4dcc88d -r 1560c419b176 kernel/eka/compsupp/rvct2_1/ucppinit_aeabi.cpp --- a/kernel/eka/compsupp/rvct2_1/ucppinit_aeabi.cpp Tue Aug 24 14:49:21 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of the License "ARM EABI LICENCE.txt" -// which accompanies this distribution, and is available -// in kernel/eka/compsupp. -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// toplevel initialization/destruction routines for 'user side' code compiled -// with the ARMCC EABI compiler. intended for static linking -// -// - -extern "C" { - -// This calls each of the compiler constructed functions referenced from pi_ctorvec. -// These functions arrange to 'call' the appropriate constructor for the 'static' instance -// (in fact the call may be inlined). If the class of the instance has a destructor then -// compiler records that this object needs 'destructing' at 'exit' time. It does this by -// calling the function __cxa_atexit. We provide our own definition of this. -// -// This is the EABI compliant version - it uses .init_array rather than C$$pi_ctorvec -// which means we need to do via assembler :-( - -#ifdef __thumb - __asm void __cpp_initialize__aeabi_(void) - { - CODE16 -#ifndef _NO_FP - IMPORT _fp_init [WEAK] -#endif - IMPORT |.init_array$$Base| [WEAK] - IMPORT |.init_array$$Limit| [WEAK] - - // export std::nothrow from here - EXPORT _ZSt7nothrow - -#ifndef _NO_FP - LDR r0,fpinit -#endif - PUSH {r4-r6,r14} -#ifndef _NO_FP - CMP r0,#0 - BEQ skip - BL _fp_init ; -skip -#endif - LDR r4,base - LDR r5,limit - B check -loop - LDR r0,[r4,#0] - ADD r0,r0,r4 - - BLX r0 - ADD r4,#4 -check - CMP r4,r5 - BCC loop - POP {r4-r6,pc} - -#ifndef _NO_FP -fpinit - DCD _fp_init -#endif - -// cheat - saved a whole 4 bytes!!! - value is never user -_ZSt7nothrow -base - DCD |.init_array$$Base| -limit - DCD |.init_array$$Limit| - - } - -#else - __asm void __cpp_initialize__aeabi_(void) - { - CODE32 -#ifndef _NO_FP - IMPORT _fp_init [WEAK] -#endif - IMPORT |.init_array$$Base| [WEAK] - IMPORT |.init_array$$Limit| [WEAK] - - // export std::nothrow from here - EXPORT _ZSt7nothrow - -#ifndef _NO_FP - LDR r0, fpinit -#endif - STMFD r13!,{r3-r5,r14} -#ifndef _NO_FP - CMP r0, #0 - BEQ skip - BL _fp_init -skip -#endif - LDR r4,base - LDR r5,limit - CMP r4,r5 - LDMEQFD r13!,{r3-r5,pc} -loop - LDR r0,[r4,#0] - ADR r14,ret - ADD r0,r0,r4 - MOV pc,r0 -ret - ADD r4,r4,#4 - CMP r4,r5 - BNE loop - LDMFD r13!,{r3-r5,pc} - -#ifndef _NO_FP -fpinit - DCD _fp_init -#endif - -base - DCD |.init_array$$Base| -limit - DCD |.init_array$$Limit| - -// cheat - defining this here saves a whole 4 bytes!!! - value is never user -_ZSt7nothrow - - } -#endif - -} -