Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/kernel/fiasco/fiasco.men
2025-10-14 09:52:32 +09:00

407 lines
9.9 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: L4Re specific menu
; @Description: -
; @Keywords: fiasco l4re menu awareness hypervisor
; @Author: AME
; @Copyright: (c) 1989-2024 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: fiasco.m 9987 2024-03-21 13:44:34Z amerkle $
IF PRACTICE.CoMmanD.AVAILable(TASK.ListObj)
(
NAME "TASK.L4RE"
IF !MENU.EXIST("TASK.L4RE")
(
add
menu
(
popup "L4Re"
(
MENUITEM "Display &Objects"
(
TASK.ListObj
)
default
MENUITEM "Display &Threads"
(
TASK.ListThr
)
MENUITEM "Display &Tasks"
(
TASK.ListTASK
)
SEPARATOR
MENUITEM "Display Task Tree" "TASK.List.TREE"
MENUITEM "Display Core Activity" "CORE.List"
)
//popup "&Help"
//(
// MENUITEM "[:manual]OS Awareness Manual Fiasco" "HELP __RTOS_FIASCO_"
//)
)
menu "task.lt"
(
default
//menuitem "Display detailed"
//(
// &address=address.offset(track.address())
// TASK.ListThread &address
//)
menuitem "Display thread object"
(
PRIVATE &pAddress &nAddress &nMask
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&nMask=TASK.MASKOF("threadtocontext")
&pAddress=&pAddress-&nAddress+(&nAddress&(&nMask))
Var.View %Open %String (Thread*)(&pAddress)
)
menuitem "Display context object"
(
PRIVATE &pAddress &nAddress &nMask
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&nMask=TASK.MASKOF("threadtocontext")
&pAddress=&pAddress-&nAddress+(&nAddress&(&nMask))
Var.View %Open %String (Context*)(&pAddress)
)
menuitem "Display thread context"
(
PRIVATE &pAddress &nAddress &sExpr &sExprEx
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&sExpr=TASK.TASKCTX(&nAddress)
&sExprEx=TASK.VCPUCTX(&nAddress)
Var.View %Open %String %Hex &sExpr &sExprEx
)
separator
menuitem "Dump thread entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
menu "task.lo"
(
default
//menuitem "Display detailed"
//(
// &address=address.offset(track.address())
// TASK.ListObj &address
//)
menuitem "Display kernel object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %M %String (Kobject*)(&pAddress)
)
separator
menuitem "Dump object entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
menu "task.ltask"
(
default
menuitem "[:objects]Display detailed"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
TASK.ListTASK &nAddress
)
separator
menuitem "[:var]Display Task object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %Open %String (Task*)(&pAddress)
)
menuitem "[:var]Display Kobject object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %Open %String (Kobject*)(&pAddress)
)
menuitem "[:var]Display Space object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()+TASK.OFFSETOF(Task.Space)
Var.View %Open %String (Space*)(&pAddress)
)
menuitem "[:var]Display Mem_space object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()+TASK.OFFSETOF(Task.Space)
Var.View %Open %String (Mem_space*)(&pAddress)
)
separator
menuitem "[:dump]Dump object entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
)
)
ELSE
(
NAME "EXT.L4RE"
IF !MENU.EXIST("EXT.L4RE")
(
add
menu
(
popup "L4Re"
(
MENUITEM "Display &Objects"
(
EXTension.ListObj
)
default
MENUITEM "Display &Threads"
(
EXTension.ListThr
)
MENUITEM "Display &Tasks"
(
EXTension.ListTASK
)
SEPARATOR
MENUITEM "List Machines" "TASK.List.MACHINES"
MENUITEM "Display Task Tree" "TASK.List.TREE"
MENUITEM "Display Core Activity" "CORE.List"
)
//popup "&Help"
//(
// MENUITEM "[:manual]OS Awareness Manual Fiasco" "HELP __RTOS_FIASCO_"
//)
)
menu "task.lt"
(
default
//menuitem "Display detailed"
//(
// &address=address.offset(track.address())
// EXTension.ListThread &address
//)
menuitem "Display thread object"
(
PRIVATE &pAddress &nAddress &nMask
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&nMask=TASK.MASKOF("threadtocontext")
&pAddress=&pAddress-&nAddress+(&nAddress&(&nMask))
Var.View %Open %String (Thread*)(&pAddress)
)
menuitem "Display context object"
(
PRIVATE &pAddress &nAddress &nMask
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&nMask=TASK.MASKOF("threadtocontext")
&pAddress=&pAddress-&nAddress+(&nAddress&(&nMask))
Var.View %Open %String (Context*)(&pAddress)
)
menuitem "Display thread context"
(
PRIVATE &pAddress &nAddress &sExpr &sExprEx
&pAddress=TRACK.ADDRESS()
&nAddress=ADDRESS.OFFSET(&pAddress)
&sExpr=TASK.TASKCTX(&nAddress)
&sExprEx=TASK.VCPUCTX(&nAddress)
Var.View %Open %String %Hex &sExpr &sExprEx
)
separator
menuitem "Dump thread entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
menu "task.lo"
(
default
//menuitem "Display detailed"
//(
// &address=address.offset(track.address())
// EXTension.ListObj &address
//)
menuitem "Display kernel object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %M %String (Kobject*)(&pAddress)
)
separator
menuitem "Dump object entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
menu "task.ltask"
(
default
menuitem "[:objects]Display detailed"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
EXTension.ListTASK &nAddress
)
IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF SYStem.Option.MACHINESPACES()
(
separator
menuitem "[:varframe]Display Stack Frame"
(
PRIVATE &nAddress &nVmid
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
IF TASK.VCPULIST(&nAddress,0)!=0x0
(
&nVmid=CONVert.HEXTOINT(TASK.VMID)(&nAddress))
GOSUB interactiveVcpuSelection "&nAddress" "Frame /MACHINE &nVmid /VCPU <VCPU>"
)
ELSE
(
PRINT %WARNing "Cannot show Stack Frame (Reason: no Thread available)"
)
)
menuitem "[:correlate]Switch Context"
(
PRIVATE &nAddress &nVmid
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
&nVmid=CONVert.HEXTOINT(TASK.VMID(&nAddress))
IF TASK.VCPULIST(&nAddress,0)==0x0
(
MACHINE.select &nVmid 0.
PRINT %WARNing "Context incomplete - only memory context (Reason: no Thread available)"
)
ELSE
(
GOSUB interactiveVcpuSelection "&nAddress" "MACHINE.select &nVmid <VCPU>"
)
)
)
)
separator
menuitem "[:var]Display Task object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %Open %String (Task*)(&pAddress)
)
menuitem "[:var]Display Kobject object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Var.View %Open %String (Kobject*)(&pAddress)
)
menuitem "[:var]Display Space object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()+TASK.OFFSETOF(Task.Space)
Var.View %Open %String (Space*)(&pAddress)
)
menuitem "[:var]Display Mem_space object"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()+TASK.OFFSETOF(Task.Space)
Var.View %Open %String (Mem_space*)(&pAddress)
)
IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF SYStem.Option.MACHINESPACES()
(
separator
menuitem "[:mmu]Show Guest/Task PageTable"
(
PRIVATE &nAddress &nVmid
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
&nVmid=CONVert.HEXTOINT(TASK.VMID(&nAddress))
MMU.List.PageTable /MACHINE &(nVmid)
)
menuitem "[:mmu]Show Intermediate PageTable"
(
PRIVATE &nAddress &nVmid
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
&nVmid=CONVert.HEXTOINT(TASK.VMID(&nAddress))
MMU.List.IntermedPageTable /MACHINE &(nVmid)
)
)
)
separator
menuitem "[:dump]Dump object entry"
(
PRIVATE &pAddress
&pAddress=TRACK.ADDRESS()
Data.dump &pAddress /Long /DIALOG
)
)
)
)
SUBROUTINE interactiveVcpuSelection
(
PRIVATE &nMagic &sCmd &nVcpuMagic &nVcpu &sVcpus
PARAMETERS &nMagic &sCmd
&nVcpuMagic=TASK.VCPULIST(&nMagic,0)
IF (&nVcpuMagic==0x0)
(
RETURN
)
&nVcpu=0.
WHILE (&nVcpuMagic!=0x0)
(
SPRINTF &sVcpus "%s,%u." "&sVcpus" &nVcpu
&nVcpu=&nVcpu+1.
&nVcpuMagic=TASK.VCPULIST(&nMagic,&nVcpuMagic)
)
&sVcpus=STRing.CUT("&sVcpus",1.)
IF (&nVcpu==1.)
(
&sExec=STRing.Replace("&sCmd","<VCPU>","&sVcpus",0.)
ON ERROR CONTinue
&sExec
ON ERROR inherit
RETURN
)
DIALOG
(&+
TEXT "Please select a VCPU"
VCPUS: COMBOBOX "&sVcpus" ""
BUTTON "OK"
(
PRIVATE &sVcpu &sExec
&sVcpu=DIALOG.STRing(VCPUS)
&sExec=STRing.Replace("&sCmd","<VCPU>","&sVcpu",0.)
ON ERROR CONTinue
&sExec
ON ERROR inherit
DIALOG.END
ENDDO
)
)
)