Files
2025-10-14 09:52:32 +09:00

525 lines
27 KiB
Plaintext

;@Extension.Container.Version.1
;-- DO NOT CHANGE THE LINE ABOVE --
IF (VERSION.BUILD.BASE()<138311.)
(
PRINTF %ERROR "%s: Software too old, please contact support@lauterbach.com." "KVM"
ENDDO
)
PMACRO.EXPLICIT
PRIVATE &sParamline &sPpf &sCmd &sParameters &sAccess &sAccessSpaces &sAccessMachine &sOptionAccess &sOptionAccessMisc &sName &sMachine &sArguments &nVariant
PRIVATE &bTaskConfig &bExtLoad &bCleanup
ENTRY &sCmd %LINE &sParamline
&sParameters=STRing.SCANAndExtract("&sParamline","PARAMETERS=","")
&sAccess=STRing.SCANAndExtract("&sParamline","ACCESS=","")
&sAccessSpaces=STRing.SCANAndExtract("&sParamline","ACCESSSPACES=","")
&sAccessMachine=STRing.SCANAndExtract("&sParamline","ACCESSMACHINE=","")
&sName=STRing.SCANAndExtract("&sParamline","NAME=","")
&sMachine=STRing.SCANAndExtract("&sParamline","MACHINE=","")
&sArguments=STRing.SCANAndExtract("&sParamline","ARGUMENTS=","")
&sParameters=STRing.Replace("&sParameters","""","",0.)
IF ("&sArguments"!="")
&sArguments=&sArguments
IF ("&sAccess"!="")
&sOptionAccess="/ACCESS &sAccess"
IF ("&sAccessSpaces"!="")
&sOptionAccessMisc="/ACCESSSPACES &sAccessSpaces"
IF ("&sAccessMachine"!="")
&sOptionAccessMisc="&(sOptionAccessMisc) /ACCESSMACHINE &sAccessMachine"
&sName=STRing.Replace("&sName","""","",0.)
&bTaskConfig=STRing.SCAN("task.config,ext.config",STRing.LoWeR("&sCmd"),0.)>=0.
&bExtLoad=STRing.SCAN("ext.load",STRing.LoWeR("&sCmd"),0.)>=0.
&bCleanup=STRing.SCAN("task.res,ext.res,ext.delete",STRing.LoWeR("&sCmd"),0.)>=0.
&sPpf=OS.PresentPracticeFile()
IF (&bTaskConfig||&bExtLoad)
(
IF ("&nVariant"!="32.")&&("&nVariant"!="64.")
(
IF CPUIS64BIT()
&nVariant="64."
ELSE
&nVariant="32."
)
IF STRing.ComPare("&sArguments","*32BIT*")
&nVariant="32."
ELSE IF STRing.ComPare("&sArguments","*64BIT*")
&nVariant="64."
)
IF (&bTaskConfig)
(
PRIVATE &sMachineName
&sMachineName="KVM"
TASK.RESet
IF (&nVariant==32.)
(
PRINTF %ERROR "%s: No support for %ubit, please contact support@lauterbach.com." "KVM" &nVariant
)
ELSE IF (&nVariant==64.)
(
GOSUB extension_64bit "&sParameters" "&sOptionAccess"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_64bit "&sMachineName" ""
GOSUB autoload_64bit ""
)
)
ELSE IF (&bExtLoad)
(
PRIVATE &sMachineName &sInfix &sOptionName &sOptionMachine
&sInfix=""
&sMachineName="KVM"
IF ("&sName"!="")
(
&sInfix=STRing.UPpeR("&(sName).")
&sMachineName="&(sName)"
&sOptionName="/NAME &sMachineName"
)
ELSE IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF SYStem.Option.MACHINESPACES()
&sInfix=TASK.TRANSPOSE.INFIX(OS.FILE.BASENAME("&sPpf",".**"))+"."
)
IF ("&sMachine"!="")
(
&sOptionMachine="/MACHINE &sMachine"
)
IF (&nVariant==32.)
(
PRINTF %ERROR "%s: No support for %ubit, please contact support@lauterbach.com." "KVM" &nVariant
)
ELSE IF (&nVariant==64.)
(
GOSUB extension_64bit "&sParameters" "&sOptionAccess &sOptionAccessMisc &sOptionName &sOptionMachine"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_64bit "&sMachineName" "&sInfix"
GOSUB autoload_64bit "&sOptionMachine"
)
)
ELSE IF (&bCleanup)
(
PRIVATE &sMachineName &sOptionMachine
&sMachineName="KVM"
IF ("&sName"!="")
(
&sMachineName="&(sName)"
)
IF ("&sMachine"!="")
(
&sOptionMachine="/MACHINE &sMachine"
)
GOSUB menu_delete "&sMachineName"
GOSUB autoload_delete "&sOptionMachine"
)
ENDDO
extension_64bit: ; (options)
(
PARAMETERS &sParameters &sOptions
EXTension.LOAD &sParameters &sOptions
(
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR0NDIDkuNS4w
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAfoAAAABgAAAA0AAABOAAAn0gAAB+gAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAATl9
S1ZNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAIAAAAF9fcGVyX2NwdV9vZmZzZXQAAAAAdmNwdXNfb25fY3B1AAAAAHBl
cl9jcHVfX3ZjcHVzX29uX2NwdQAAAGt2bV9ob3N0X2RhdGEAAAB2bV9saXN0AHN0cnVjdCBrdm1f
dmNwdQAua3ZtAAAAAC52Y3B1X2lkAAAAAC5jcHUAAAAALmFyY2gAAAAubW9kZQAAAHN0cnVjdCBr
dm1fdmNwdV9hcmNoAAAAAHN0cnVjdCBrdm1fYXJjaAAucGdkAAAAAC5wZ2RfcGh5cwAAAC5tbXUA
AAAAc3RydWN0IGt2bV9zMl9tbXUAAABzdHJ1Y3Qga3ZtAAAudmNwdXMAAC5jcmVhdGVkX3ZjcHVz
AAAudm1fbGlzdAAAAABnZXRDdXJyZW50VmNwdUlkKCkAAGdldE1hY2hpbmVMaXN0AABtYWNoaW5l
WyVkXSA9ICUxNngAAFVOS05PV04gVk0gJTE2eAAhIXJhbiBvdXQgb2Yga3ZtIGlkcyEAAABnZXRD
dXJyZW50TWFjaGluZUlkKCkAAABIRAAARVhULlZNICV4AAAARVhULlZNAAAlMTZ4AAAAACUyZC4A
AAAAJWQAACglZCkuAAAARGF0YS5kdW1wICV4AAAAAEtWTSBzeW1ib2xzIG5vdCBmb3VuZCEKAHJl
Z2lzdGVyczoKAFZDUFUgJWQgKENQVSAlZCkAAAAAbWFnaWMgICAgICAgICAgICAAAABpZCAAdmNw
dXMgICAgICAAdHRiICAgICAgICAgICAgICAAAABfX1JUT1NfS1ZNX19FWFRfVk0AAHZjcHUAAAAA
a3ZtIGlkAAB2Y3B1IGlkAF9fUlRPU19LVk1fX0VYVF9WQ1BVAAAAAE1URCBWZXJzaW9uICAlcyAg
JXMgICUyZC4lMmQuJTRkIChCdWlsZCAlcykKCgAAAHZjcHVzICAgICAgICAgICAgJTE2eCAgICAg
ICAgICAgIAAAAGNwdSBvZmZzZXRzICAgICAgJTE2eCAgJTh4ICAAAAAAVEVTVEtWTQBhcmd1bWVu
dCAgICAgICAgIHZhbHVlICAgICBjb250ZW50ICAgc3ltYm9sAEVYVC5QR0RJUgAAAF9fUlRPU19N
WVJUT1NfX0ZVTkMAZ2V0VmNwdUNvbnRleHQgJTE2eABOUwAASFNQUgAAAABIQ1IAc3RydWN0IGt2
bV9ob3N0X2RhdGEuaG9zdF9jdHh0Ll9faHlwX3J1bm5pbmdfdmNwdQAAAHN0cnVjdCBrdm1faG9z
dF9kYXRhLmhvc3RfY3R4dC5yZWdzLnJlZ3MAAAAAWDAAAFgxAABYMgAAWDMAAFg0AABYNQAAWDYA
AFg3AABYOAAAWDkAAFgxMABYMTEAWDEyAFgxMwBYMTQAWDE1AFgxNgBYMTcAWDE4AFgxOQBYMjAA
WDIxAFgyMgBYMjMAWDI0AFgyNQBYMjYAWDI3AFgyOABYMjkAUEMAAENQU1IAAAAAc3RydWN0IGt2
bV92Y3B1X2FyY2guY3R4dC5ncF9yZWdzLnJlZ3MAAHN0cnVjdCBrdm1fdmNwdV9hcmNoLmN0eHQu
cmVncwAAWDMwAHN0cnVjdCB1c2VyX3B0X3JlZ3MALnNwAFNQAAAucGMALnBzdGF0ZQBTQ1RMUl9F
TDEAAAB2Y3B1X3N5c3JlZwBUVEJSMF9FTDEAAABUVEJSMV9FTDEAAABUQ1JfRUwxAHN0cnVjdCBr
dm1fdmNwdV9hcmNoLmhjcl9lbDIAAAAAVlRUQlJfRUwyAAAAc3RydWN0IGt2bV92Y3B1X2FyY2gu
Y3R4dC5zeXNfcmVncwAAc3RydWN0IHVzZXJfcHRfcmVncy5zcAAAc3RydWN0IHVzZXJfcHRfcmVn
cy5wYwAAc3RydWN0IHVzZXJfcHRfcmVncy5wc3RhdGUAAHN0cnVjdCBrdm1fcmVncy5zcF9lbDEA
AHN0cnVjdCBrdm1fcmVncy5lbHJfZWwxAHN0cnVjdCBrdm1fcmVncy5zcHNyAAAAAHgwAAB4MQAA
eDIAAHgzAAB4NAAAeDUAAHg2AAB4NwAAeDgAAHg5AAB4MTAAeDExAHgxMgB4MTMAeDE0AHgxNQB4
MTYAeDE3AHgxOAB4MTkAeDIwAHgyMQB4MjIAeDIzAHgyNAB4MjUAeDI2AHgyNwB4MjgAeDMwAGNw
c3IAAAAAc3Bzcl9lbDEAAAAAc3Bzcl9zdmMAAAAAc3Bzcl9hYnQAAAAAc3Bzcl91bmQAAAAAc3Bz
cl9pcnEAAAAAc3Bzcl9maXEAAAAAc2N0bF9ucwB0dGJyMF9ucwAAAAB0dGJyMV9ucwAAAAB0Y3Jf
bnMAAGhjcgB2dHRicgAAAGFybTY0AERBVEEAAAADAFAAAAAEADQAABKkAAAAAwBQAAAABAA0AAAR
oAAAMLgAADC4AAAwuAAAMVgAAA7YAAAxIAAAMTQAADE4AAAxRAAAAAAAAAADAFAAAAAEAHwAABQ4
AAAAAwBQAAAABAB8AAAUNAAAMZQAADGUAAAxlAAAMYQAABQ8AAAxIAAAMXQAADF8AAAvdAAAMUQA
AAAAAAAAAQA8AAAAADIYAAAVOAAAMhAAADIQAAAyDAAAMgwAABUEAAAyRAAAAAMAAAADAAAAAAAA
MlAAABZYAAA0/AAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1
BAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1CAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1DAAAAAAAAAAA
AAAAAAAAAAgAAAAAAAA1EAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1FAAAAAAAAAAAAAAAAAAAAAgA
AAAAAAA1GAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1HAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1IAAA
AAAAAAAAAAAAAAAAAAgAAAAAAAA1JAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1KAAAAAAAAAAAAAAA
AAAAAAgAAAAAAAA1LAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1MAAAAAAAAAAAAAAAAAAAAAgAAAAA
AAA1NAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1OAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1PAAAAAAA
AAAAAAAAAAAAAAgAAAAAAAA1QAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1RAAAAAAAAAAAAAAAAAAA
AAgAAAAAAAA1SAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1TAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1
UAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1VAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1WAAAAAAAAAAA
AAAAAAAAAAgAAAAAAAA1XAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1YAAAAAAAAAAAAAAAAAAAAAgA
AAAAAAA1ZAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1aAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1bAAA
AAAAAAAAAAAAAAAAAAgAAAAAAAA1bAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1cAAAAAAAAAAAAAAA
AAAAAAgAAAAAAAA0fAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA0lAAAAAAAAAAAAAAAAAAAAAgAAAAA
AAA1dAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA0xAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA03AAAAAAA
AAAAAAAAAAAAAAgAAAAAAAA1fAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1iAAAAAAAAAAAAAAAAAAA
AAgAAAAAAAA1lAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1oAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1
rAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1uAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA1xAAAAAAAAAAA
AAAAAAAAAAgAAAAAAAA1zAAAAAAAAAAAAAAAAAAAAAgAAAAAAAA12AAAAAAAAAAAAAAAAAAAAAgA
AAAAAAA15AAAAAAAAAAAAAAAAAAAAAgAAAAAAAA17AAAAAAAAAAAAAAAAAAAAAgAAAAAAAA18AAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyDAAAMhQAADX4AAAA
AP//////////////////////////VDMyRQ==
)
RETURN
)
menu_64bit: ;(header, infix)
(
PMACRO.LOCK
(
PRIVATE &sHeader &sInfix &sMenuName
PARAMETERS &sHeader &sInfix
&sMenuName=TASK.TRANSPOSE.INFIX("&sHeader")
IF MENU.EXIST("TASK.&(sMenuName)")
MENU.Delete.NAME TASK.&(sMenuName)
IF MENU.EXIST("EXT.&(sMenuName)")
MENU.Delete.NAME EXT.&(sMenuName)
MENU.ReProgram
(&+
; --------------------------------------------------------------------------------
; @Title: Menu File for TRACE32 KVM Awareness
; @Description: -
; @Keywords: Linux KVM menu awareness
; @Author: AME DIE KJM
; @Copyright: (C) 1989-2021 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: kvm.m 8403 2022-12-12 13:50:51Z amerkle $
NAME "EXT.&sMenuName"
IF !MENU.EXIST("EXT.&sMenuName")
(
add
menu
(
popup "&KVM"
(
default
menuitem "[:objects]Display &VMs" "EXT.&(sInfix)VM"
)
)
add
menu "ext.&(sInfix)vm"
(
default
menuitem "[:objects]Display detailed"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
EXT.&(sInfix)VM &nAddress
)
menuitem "[:var]Display kvm struct"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
IF ARMARCHVERSION()<0x81
Var.View %Open (struct kvm*)(NSD:0x0::&nAddress)
ELSE
Var.View %Open (struct kvm*)(H:0x0::&nAddress)
)
menuitem "[:dump]Dump kvm entry"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
Data.dump H:0x0::&nAddress /Long /DIALOG
IF ARMARCHVERSION()<0x81
Data.dump NS:0x0::&nAddress /Long /DIALOG
ELSE
Data.dump H:0x0::&nAddress /Long /DIALOG
)
)
add
menu "ext.&(sInfix)vcpu"
(
default
menuitem "[:objects]Display detailed"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
EXT.&(sInfix)VCPU &nAddress
)
menuitem "[:var]Display vcpu struct"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
Var.View %Open (struct vcpu_vmx*)(H:0x0::&nAddress)
)
menuitem "[:dump]Dump vcpu entry"
(
PRIVATE &nAddress
&nAddress=address.offset(track.address())
IF ARMARCHVERSION()<0x81
Data.dump NS:0x0::&nAddress /Long /DIALOG
ELSE
Data.dump H:0x0::&nAddress /Long /DIALOG
)
)
)
)
)
PMACRO.UNLOCK
RETURN
)
autoload_64bit: ;(options)
(
PARAMETERS &sOptions
RETURN
)
menu_delete: ;(header)
(
PRIVATE &sHeader &sMenuName
PARAMETERS &sHeader
&sMenuName=TASK.TRANSPOSE.INFIX("&sHeader")
IF MENU.EXIST("TASK.&(sMenuName)")
MENU.Delete.NAME TASK.&(sMenuName)
IF MENU.EXIST("EXT.&(sMenuName)")
MENU.Delete.NAME EXT.&(sMenuName)
RETURN
)
autoload_delete: ;(options)
(
PARAMETERS &sOptionMachine
RETURN
)