Debug Arm CCA on FVP models in Arm Studio

Hi!

  I'm doing research on Arm CCA and new to the Arm studio. I'm a little bit confused about what role does Arm Studio play in CCA software stack debugging? 

  In the tutorial for CCA, I can create a realm world VM and then run application in it on a FVP model. But can I debug the application within the realm world by using Arm Studio?

  

Thank you if anyone can help!

  • Yes, the debugger will give you visibility of memory, registers, MMU tables etc which will help you understand how the system is configured and changing based on your code.

    Below is a screenshot using the supplied RME example.

  • Thank you! I run a simple C++ program when connecting to a CCA supported FVP, and it starts the debugging session. I can indeed see some of the MMU, etc. However, how would I be certain that if a certain program is being run in realm world instead of normal world?From the view of Arm Development Studio.

    My further question is: the example provided is not written in C++, and does that mean if I want to have a program to be run in CCA realm world, I have to write an assembly program instead of C++ program? I don't think I can find a way to write c++ codes to be exclusively run in realm world. I checked other tutorials but couldn't find anything useful. Is there any resource that I can find to teach me how to write programs to create a realm world and then run an application inside it? 

    Thank you again for your help!

  • In the Debugger of Arm Development Studio, when code is running/stopped in Realm state, you will see in the Commands view, e.g.:

    Execution stopped in EL1h mode at breakpoint 1: EL1RL:0x0000000080000818
    EL1RL:0x0000000080000818   101,0   ISB

    where "RL" means "Realm".

    The "RME" example in Arm Development Studio is just a simple demonstration to show the support for the Realm Management Extension (RME) in the Arm Compiler, the AEMvA FVP model, and the Debugger.  It is not intended to be a complete or reference implementation.  In real implementations, a Realm Management Monitor firmware (RMM) manages the execution of Realm VMs and their interaction with the hypervisor.  See:

    https://trustedfirmware-a.readthedocs.io/en/v2.12.0/components/realm-management-extension.html

    Early startup code is typically written in assembler, but the bulk of the RMM firmware is written in C.  See:

    https://www.trustedfirmware.org/projects/tf-rmm.

    Applications can be written in C, C++, or maybe some other language.

    For more help on the details of RME, please reach out on

    https://community.arm.com/forums/f/architectures-and-processors-forum