kernel/eka/memmodel/epoc/flexible/arm/xipc.cia
changeset 121 661475905584
parent 0 a41df078684a
child 257 3e88ff8f41d5
equal deleted inserted replaced
120:b42b9ce90ea9 121:661475905584
    31 
    31 
    32 #ifdef _DEBUG
    32 #ifdef _DEBUG
    33 extern "C" void __FaultIpcClientNotNull();  // defined in ckernel.cpp
    33 extern "C" void __FaultIpcClientNotNull();  // defined in ckernel.cpp
    34 #endif
    34 #endif
    35 
    35 
    36 
    36 #ifdef _DEBUG
       
    37 __NAKED__ TInt DoThreadReadAndParseDesHeader(DThread* aThread, const TAny* aSrc, TDesHeader& aDest)
       
    38 #else
    37 __NAKED__ TInt DThread::ReadAndParseDesHeader(const TAny* aSrc, TDesHeader& aDest)
    39 __NAKED__ TInt DThread::ReadAndParseDesHeader(const TAny* aSrc, TDesHeader& aDest)
       
    40 #endif
    38 	{
    41 	{
    39 	ASM_ASSERT_PAGING_SAFE;
    42 	ASM_ASSERT_PAGING_SAFE;
    40 	// save state including 'this', aSrc and sDest. Double word aligns the stack 
    43 	// save state including 'this', aSrc and sDest. Double word aligns the stack 
    41 	// which is required to call c++ functions.
    44 	// which is required to call c++ functions.
    42 	asm("stmdb sp!, {r0-r2, r4-r8, r10, lr} ");
    45 	asm("stmdb sp!, {r0-r2, r4-r8, r10, lr} ");
    59 	asm("mov r0, r4");		// r0 = target process ('this' for TryOpenOsAsid() below).
    62 	asm("mov r0, r4");		// r0 = target process ('this' for TryOpenOsAsid() below).
    60 	asm("bl " CSM_ZN16DMemModelProcess13TryOpenOsAsidEv);
    63 	asm("bl " CSM_ZN16DMemModelProcess13TryOpenOsAsidEv);
    61 	// Check a reference could be opened on target process's os asid, failed if r0 < 0.
    64 	// Check a reference could be opened on target process's os asid, failed if r0 < 0.
    62 	asm("cmp r0, #0");
    65 	asm("cmp r0, #0");
    63 	asm("bmi readParseDesHeader_ExitErr");
    66 	asm("bmi readParseDesHeader_ExitErr");
       
    67 	asm("mov r10, r0");			// r10 = os asid of current process
    64 
    68 
    65 	asm("mov r10, r0");			// r10 = os asid of current process
       
    66 	asm("ldmia sp!, {r0-r2}");	// r0 = this, r1 = aSrc, r2 = aDest
    69 	asm("ldmia sp!, {r0-r2}");	// r0 = this, r1 = aSrc, r2 = aDest
    67 	
    70 	
    68 	__ASM_CLI(); // disable all interrupts
    71 	__ASM_CLI(); // disable all interrupts
    69 #ifdef __SMP__
    72 #ifdef __SMP__
    70 	GET_RWNO_TID(,r6);														// r6->TSubScheduler
    73 	GET_RWNO_TID(,r6);														// r6->TSubScheduler