os/kernelhwsrv/kernel/eka/memmodel/epoc/multiple/arm/xkernel.cia
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// e32\memmodel\epoc\multiple\arm\xkernel.cia
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include <arm_mem.h>
sl@0
    19
sl@0
    20
sl@0
    21
__NAKED__ TBool Exc::IsMagic(TLinAddr /*anAddress*/)
sl@0
    22
//
sl@0
    23
// Return TRUE if anAddress is a 'magic' exception handling instruction
sl@0
    24
//
sl@0
    25
	{
sl@0
    26
	asm("adr r1, __magic_addresses ");		// r1 points to list of magic addresses
sl@0
    27
	asm("is_magic_1: ");
sl@0
    28
	asm("ldr r2, [r1], #4 ");				// r2=next magic address to check
sl@0
    29
	asm("cmp r2, r0 ");						// is r0=magic address?
sl@0
    30
	asm("cmpne r2, #0 ");					// if not, have we reached end of list?
sl@0
    31
	asm("bne is_magic_1 ");					// if neither, check next address
sl@0
    32
	asm("movs r0, r2 ");					// r0=0 if not magic, r0 unchanged if magic
sl@0
    33
	__JUMP(,lr);
sl@0
    34
sl@0
    35
	asm("__magic_addresses: ");
sl@0
    36
	asm(".word __magic_address_kusaferead ");
sl@0
    37
	asm(".word __magic_address_saferead ");
sl@0
    38
	asm(".word __magic_address_kusafewrite ");
sl@0
    39
	asm(".word __magic_address_safewrite ");
sl@0
    40
	asm(".word __magic_address_msg_lookup_1 ");			// in preprocess handler
sl@0
    41
	asm(".word __magic_address_readdesheader1 ");
sl@0
    42
	asm(".word __magic_address_readdesheader2 ");
sl@0
    43
	asm(".word __magic_address_readdesheader3 ");
sl@0
    44
#ifdef __MESSAGE_MACHINE_CODED_2__
sl@0
    45
	asm(".word __magic_address_msg_lookup_2 ");
sl@0
    46
#endif
sl@0
    47
#ifdef __CLIENT_REQUEST_MACHINE_CODED__
sl@0
    48
	asm(".word __magic_address_client_request_callback");
sl@0
    49
	asm(".word __magic_address_svr_accept_1 ");
sl@0
    50
	asm(".word __magic_address_svr_accept_2 ");
sl@0
    51
	asm(".word __magic_address_svr_accept_3 ");
sl@0
    52
	asm(".word __magic_address_svr_accept_4 ");
sl@0
    53
	asm(".word __magic_address_svr_accept_5 ");
sl@0
    54
	asm(".word __magic_address_svr_accept_6 ");
sl@0
    55
	asm(".word __magic_address_svr_accept_7 ");
sl@0
    56
	asm(".word __magic_address_svr_accept_8 ");
sl@0
    57
#endif
sl@0
    58
#ifdef __REQUEST_COMPLETE_MACHINE_CODED__
sl@0
    59
	asm(".word __magic_address_reqc ");
sl@0
    60
	asm(".word __magic_address_kern_request_complete ");
sl@0
    61
#endif
sl@0
    62
	// list terminator
sl@0
    63
	asm(".word 0 ");
sl@0
    64
	}
sl@0
    65