Hello,

In my simple arm kernel I added a simple test case of the SMC instruction to test
the switch from normal to secure world.
https://github.com/macdi/simple-arm-kernel/blob/master/kernel.c

This is what I think regarding regarding the execution flow when an SMC is executed in the normal world:

When the processor in the normal world encounters the SMC instruction it generates
an exception, this exception is caught in the exception function void exception(unsigned const cpu)
defined in core/include/kernel/vm.h and execute the default switch case as follow


void exception(unsigned const cpu) {

...

default:
PDBG("SMC instruction caught");
Cpu_job::_deactivate_own_share();
_context->submit(1);

}


As we can see this function interrupts the execution of the VM
then sends a message (I think to)  to the VMM server in order to handle
the call to secure world.

This is the debug messages that I get when executing a simple test case. 

int main(): --- start init ---
int main(): transferred 505 MB to init
int main(): --- init created, waiting for exit condition ---
[init] Could not open file "ld.lib.so"
[init] parent provides
[init]   service "ROM"
[init]   service "RAM"
[init]   service "IRQ"
[init]   service "IO_MEM"
[init]   service "CAP"
[init]   service "PD"
[init]   service "RM"
[init]   service "CPU"
[init]   service "LOG"
[init]   service "SIGNAL"
[init]   service "VM"
[init] child "tz_vmm"
[init]   RAM quota:  3932160
[init]   ELF binary: tz_vmm
[init]   priority:   0
[init -> tz_vmm] Start virtual machine
virtual void Kernel::Vm::exception(unsigned int): SMC instruction caught
[init -> tz_vmm] Hi from Normal Word!



Unfortunately, I was unable to follow the exact and complete execution flow and the function calls
step by step while debugging the source code using my JTAG debugger.

I get this warning message when I tried to put a breakpoint in the source code.

Starting target with image /home/aichouch/DS-5-Workspace-examples/genode-14.11/build_hw_imx6_tz/var/run/tz_vmm/image.elf
Running from entry point
Execution stopped at: S:0x10001000
In image.elf (no debug info)

Breakpoint 2 unsilenced
break -p "/home/aichouch/DS-5-Workspace-examples/genode-14.11/repos/base-hw/src/core/include/kernel/vm.h":90
WARNING(CMD452-COR167): 
! Breakpoint 3 has been pended
! No compilation unit matching "/home/aichouch/DS-5-Workspace-examples/genode-14.11/repos/base-hw/src/core/include/kernel/vm.h" was found


Does anyone have an idea of how could I activate these debug information ?


Thank you very much in advance.

best regards,
Mahdi




On Fri, Jan 23, 2015 at 6:11 AM, chirag garg <chiragdthinker@...9...> wrote:
Hi all,

I have some doubts in Genode Flow, ARM provides the smc instruction to enter in the monitor-mode which performs the world switch between normal world and secure world.

As tz_vmm script is also successfully achieving the above objective of world switch from the secure world to the normal world. But i am not able to figure out flow which will which execute a call of smc instruction in the run of tz_vmm script.

Can anyone explain me the flow ?

Thanks in advance.

Regards
Chirag Garg
IIT Madras , Rise Lab

------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
genode-main mailing list
genode-main@...12...ceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main