kernel/eka/compsupp/rvct/ucppinit.cpp
author mikek
Tue, 15 Jun 2010 19:10:20 +0100
branchGCC_SURGE
changeset 156 12b6722e7753
parent 0 a41df078684a
permissions -rw-r--r--
1) Revised fix for Bug 2975 - [GCCE] Illegal inline assembler in kernel/eka/drivers/debug/rmdebug/d_rmd_stepping.cpp. Should have conditionally different code for __ARMCC__ and __GCCE_ 2) Fix for Bug 2976 - [GCCE] Overlapping naked function bodies break exception-handling. 3) Fix an incidental "impossible constraint in asm" gripe.

// Copyright (c) 2008-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:
// This file is part of usrt.lib and ksrt.lib.
// 
//


extern "C" __asm void __cpp_initialize__aeabi_()
    {
    CODE32

    IMPORT |SHT$$INIT_ARRAY$$Base|  [WEAK]
    IMPORT |SHT$$INIT_ARRAY$$Limit| [WEAK]

    // Export std::nothrow from here.
    EXPORT    _ZSt7nothrow
    

    STMFD    r13!,{r3-r5,r14}


    LDR      r4,base
    LDR      r5,limit
    CMP      r4,r5
    
    // Exit if the array is empty.
    LDMEQFD  r13!,{r3-r5,pc}

loop
    LDR      r0,[r4,#0]
    #if __ARMCC_VERSION > 300000
    ADD      r0,r0,r4
    #endif

#ifdef __MARM_ARMV4__
    ADR      r14,ret
    MOV      pc,r0
#else
    BLX      r0
#endif

ret
    ADD      r4,r4,#4
    CMP      r4,r5
    BNE      loop
    LDMFD    r13!,{r3-r5,pc}

base
    DCD    |SHT$$INIT_ARRAY$$Base|
limit
    DCD    |SHT$$INIT_ARRAY$$Limit|

_ZSt7nothrow
    }