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

714 lines
34 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." "VLX"
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="VLX"
TASK.RESet
IF (&nVariant==32.)
(
PRINTF %ERROR "%s: No support for %ubit, please contact support@lauterbach.com." "VLX" &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="VLX"
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." "VLX" &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="VLX"
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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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfoAAAABgAA
AA0AAABOAAAn0gAAB+gAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUWRVkxYAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
IAAAAF9fdDMyX21heF9jcHUAAABfX3R1bmFibGVfX2NvcmVfX21heF9jcHUAAAAAX190MzJfbWF4
X29zAAAAAF9fdHVuYWJsZV9fY29yZV9fbWF4X29zAG5rX3ZtcwAAX190MzJfdm1zAAAAX19ua192
bXMAAAAAX190MzJfdm1fc3RydWN0X3NpemUAAAAAX190MzJfdm1fcHJlc2VudF9vZmYAAAAAX190
MzJfdm1fdmNwdXNfb2ZmAABfX3QzMl92bV9tYXh2Y3B1c19vZmYAAABfX3QzMl92Y3B1X3Byb2Nf
cmVnc19vZmYAAAAAX190MzJfdmNwdV9wcm9jX29mZgBfX3QzMl92Y3B1X2VjdHhfb2ZmAHZtAABF
WFQuVk0gJXgAAABFWFQuVk0AACoAAAAlMmQuAAAAAERhdGEuZHVtcCAleAAAAAAgISEgZm9jdXMg
b24gdm1pZCAlZC4gISEAAAAAdmNwdXM6CgAgICBtYWdpYyAgICAgICAgICAgICBpZAoAAAAAICUz
ZC4KAAAgICBYJWQgICAgJTE2eCAgIFglZCAgICUxNnggCgAAACAgIFglZCAgICUxNnggICBYJWQg
ICAlMTZ4IAoAAAAAICAgWDE1ICAgJTE2eCAgIFBDICAgICUxNnggCgAAAAAgICBFTDA6ICAgICAg
ICAgICAgICAgICAgICAgRUwxOiAKAAAgICBTUCAgICAlMTZ4ICAgU1AgICAgJTE2eCAKAAAAACAg
IEVMUiAgICUxNnggCgAgICBTUFNSICAlMTZ4IAoAICAgTU1VOiAKAAAAICAgU0NUTFJfRUwxICAg
JTh4IAoAAAAAICAgVFRCUjBfRUwxICAgJTE2eCAKAAAAICAgVFRCUjFfRUwxICAgJTE2eCAKAAAA
ICAgVENSX0VMMSAgICAgJTE2eCAKAAAAICAgQ1RYSURfRUwxICAgJTh4IAoAAAAAICAgVkU6IAoA
AAAAICAgSENSX0VMMiAgICAgJTE2eCAKAAAAICAgVk1QSURSX0VMMiAgJTE2eCAKAAAAICAgVlRU
QlJfRUwyICAgJTE2eCAKAAAAbWFnaWMgICAgICAgICAgICAAAABpZCAAdHRiICAgICAgAAAAX19S
VE9TX0tWTV9fRVhUX1ZNAAB2bWlkAAAAAGZvY3VzIHNldCBvbiB2bWlkICVkLgAAAFNvcnJ5OiB2
bWlkIG5vdCBmb3VuZC4AAEZPQ1VTAAAARmN0Vm1GaWxlOiBwYXJhbWV0ZXIgMTogMHglMTZ4AABm
aWxlAAAAAHN5bWJvbCBmaWxlIG9mIHZtaWQgJWQuIHNldCB0byAlcwAAAFNvcnJ5OiB2bWlkIHRv
byBiaWcuAAAAAEVYVC5WTUZJTEUAAF9fUlRPU19NWVJUT1NfX0ZVTkMAU29ycnk6IG5vIHN5bWJv
bCBmaWxlIGZvciB2bWlkICVkLiBkZWZpbmVkLgBcXCVzXC50ZXh0AABkaXNwbGF5UmVsb2FkOiAl
cyAlcyAlcwB5LmQgXFwlcwAAAABkLmxvYWQuZWxmICVzIE46MCAvbm9jb2RlIC9ub2NsZWFyAABz
eW1ib2wgZmlsZSBvZiB2bWlkICVkLiBsb2FkZWQAAFJFTE9BRAAAJUBjTVREIFZlcnNpb24gICVz
ICAlcyAgJTAyZC4lMDJkLiUwNGQgKEJ1aWxkICVzKQoKAG5hbm9rZXJuZWxfdmVyc2lvbgAAVkxY
IHZlcnNpb24gICAgICUxNnggIAAACiAgICAAAABudW0gY3B1cyAgICAgICAgJTh4CgAAAABudW0g
dm1zICAgICAgICAgJTh4CgAAAAB2bSBhcnJheSAgICAgICAgJTE2eCAgJTE2eCAgAAAAAHZtIHNp
emVvZiAgICAgICAlMTZ4ICAlOHggICAgICAgICAgAHZtIHByZXNlbnQgb2ZmcyAlMTZ4ICAlOHgg
ICAgICAgICAgAFRFU1QAAAAAYXJndW1lbnQgICAgICAgIHZhbHVlICAgICAgICAgICAgIGNvbnRl
bnQgICAgICAgICAgIHN5bWJvbAAATlMAAEhTUFIAAAAAcmVhZEN1cnJlbnRHdWVzdElkRnJvbVJl
Z2lzdGVyOiB2dHRicj0weCUxNngsIGlkPTB4JXgAAAAhIUhhbHRlZCBpbiBndWVzdCB3aXRob3V0
IGZvY3VzIQAAAABnZXRDdXJyZW50R3Vlc3RJZDogaWQ9JWQuAAAAZ2V0Q3VycmVudE1hY2hpbmVJ
ZCgpAAAAZ2V0Q3VycmVudFZjcHVJZCgpOiBndWVzdGlkID0gJWQuAAAAZ2V0Q3VycmVudFZjcHVJ
ZCgpOiBndWVzdCA9ICUxNngAAAAAZ2V0Q3VycmVudFZjcHVJZCgpID0gJWQuAAAAAGdldE1hY2hp
bmVMaXN0KCkAAAAAZ2V0TWFjaGluZUxpc3QoKTogbWlzc2luZyBzeW1ib2xzAAAAZ2V0TWFjaGlu
ZUxpc3QoKSwgbnVtdm1zPSVkLgAAAABnZXRNYWNoaW5lSWQoKTogJTE2eAAAAABnZXRNYWNoaW5l
SWQoKSA9ICVkLgAAAABnZXRNYWNoaW5lVnR0YigpIG1hZ2ljPSUxNngAZ2V0TWFjaGluZVZ0dGIo
KSB2dHRiID0lMTZ4AGdldEFybTY0VmNwdUNvbnRleHQ6IGd1ZXN0PSUxNngsIHZjcHU9JTE2eAAA
Z2V0QXJtNjRWY3B1Q29udGV4dDogdmNwdT0lMTZ4IGluIGNvcmU9JWQuAABTUFNSX0VMMQAAAABF
TFJfRUwxAFNQX0VMMAAAU1BfRUwxAABnZXRBcm02NFZjcHVDb250ZXh0OiB2dHRiPSUxNngsIG9s
ZGNvcmU9JWQuAGdldEFybTY0VmNwdUNvbnRleHQ6IHZjcHU9JTE2eCBpbiBtZW1vcnkAAAAAZ2V0
QXJtNjRWY3B1Q29udGV4dDogdnR0Yj0lMTZ4AABnZXRBcm02NFZjcHVDb250ZXh0OiAmcGM9JTE2
eAAAAGdldFZjcHVDb250ZXh0OiBtYWdpYz0lMTZ4LCB2Y3B1aWQ9JWQAAABnZXRWY3B1Q29udGV4
dDogZ3Vlc3Q9JTE2eCwgdmNwdWlkPSVkAAAAdnR0YnIAAABoY3IAbWFpcl9lbDEAAAAAdGNyX2Vs
MQB0dGJyMF9lbDEAAAB0dGJyMV9lbDEAAABzY3Rscl9lbDEAAABzcHNyX2VsMQAAAAB2YmFyX2Vs
MQAAAABlbHJfZWwxAHNwX2VsMAAAc3BfZWwxAAB4MAAAeDEAAHgyAAB4MwAAeDQAAHg1AAB4NgAA
eDcAAHg4AAB4OQAAeDEwAHgxMQB4MTIAeDEzAHgxNAB4MTUAeDE2AHgxNwB4MTgAeDE5AHgyMAB4
MjEAeDIyAHgyMwB4MjQAeDI1AHgyNgB4MjcAeDI4AHgyOQB4MzAAcGMAAGNwc3IAAAAAc2N0bF9u
cwB0Y3JfbnMAAHR0YnIwX25zAAAAAHR0YnIxX25zAAAAAEZjdEV4dENvbmZpZ1N0cjogcGFyYW1l
dGVyIDE6ICVzAAAAAGV4dGZpbGUAZXh0ZGlyAABGY3RFeHRDb25maWdTdHIgZXh0c3RyWyVkXT0l
cwAAAHVua25vd24gdG9waWMAAABFWFQuQ09ORklHU1RSAAAARmN0RXh0UGdkaXI6IHBhcmFtZXRl
ciAxOiAlcwAAAABFWFQuQ1VSUkVOVABGY3RFeHRQZ2RpcjogcGFyYW1ldGVyIDE6IDB4JTE2eAAA
AABFWFQuUEdESVIAAABGY3RFeHRWbU1hZ2ljOiBwYXJhbWV0ZXIgMTogMHglMTZ4AABFWFQuVk0u
TUFHSUMAAAAAVkxYAEFSTTY0AERBVEEAAAADADwAAAAEADQAAAkAAAAAAwAyAAAABAA0AAAHhAAA
M4QAADOEAAAzhAAANawAAAVoAAA1iAAANZwAADWgAAAAAAAAAAIAAAAAAAA14AAAAAAAAAACAAAA
AAAAAAAAABCMAAA1+AAANfgAADX4AAA1PAAADkAAAAACAAAAAAAAAAAAABJAAAAAAgAAAAAAADZM
AAAAAAAANmgAADZoAAA2aAAANTwAABHIAAA2ZAAAAAcAAAADAAAAAAAANnAAABFIAAAAAgAAAAAA
AAAAAAATUAAAAAIAAAAAAAA2TAAAAAAAADckAAA3JAAANyQAADU8AAATEAAAAAEATAAAAAA4NAAA
FVQAADgsAAA4LAAANTwAADU8AAAVIAAAAAAAADuUAAAAAAAAAAAAAAAAAAAACAAAAAAAADucAAAA
AAAAAAAAAAAAAAAACAAAAAAAADugAAAAAAAAAAAAAAAAAAAACAAAAAAAADusAAAAAAAAAAAAAAAA
AAAACAAAAAAAADu0AAAAAAAAAAAAAAAAAAAACAAAAAAAADvAAAAAAAAAAAAAAAAAAAAACAAAAAAA
ADvMAAAAAAAAAAAAAAAAAAAACAAAAAAAADvYAAAAAAAAAAAAAAAAAAAACAAAAAAAADvkAAAAAAAA
AAAAAAAAAAAACAAAAAAAADvwAAAAAAAAAAAAAAAAAAAACAAAAAAAADv4AAAAAAAAAAAAAAAAAAAA
CAAAAAAAADwAAAAAAAAAAAAAAAAAAAAACAAAAAAAADwIAAAAAAAAAAAAAAAAAAAACAAAAAAAADwM
AAAAAAAAAAAAAAAAAAAACAAAAAAAADwQAAAAAAAAAAAAAAAAAAAACAAAAAAAADwUAAAAAAAAAAAA
AAAAAAAACAAAAAAAADwYAAAAAAAAAAAAAAAAAAAACAAAAAAAADwcAAAAAAAAAAAAAAAAAAAACAAA
AAAAADwgAAAAAAAAAAAAAAAAAAAACAAAAAAAADwkAAAAAAAAAAAAAAAAAAAACAAAAAAAADwoAAAA
AAAAAAAAAAAAAAAACAAAAAAAADwsAAAAAAAAAAAAAAAAAAAACAAAAAAAADwwAAAAAAAAAAAAAAAA
AAAACAAAAAAAADw0AAAAAAAAAAAAAAAAAAAACAAAAAAAADw4AAAAAAAAAAAAAAAAAAAACAAAAAAA
ADw8AAAAAAAAAAAAAAAAAAAACAAAAAAAADxAAAAAAAAAAAAAAAAAAAAACAAAAAAAADxEAAAAAAAA
AAAAAAAAAAAACAAAAAAAADxIAAAAAAAAAAAAAAAAAAAACAAAAAAAADxMAAAAAAAAAAAAAAAAAAAA
CAAAAAAAADxQAAAAAAAAAAAAAAAAAAAACAAAAAAAADxUAAAAAAAAAAAAAAAAAAAACAAAAAAAADxY
AAAAAAAAAAAAAAAAAAAACAAAAAAAADxcAAAAAAAAAAAAAAAAAAAACAAAAAAAADxgAAAAAAAAAAAA
AAAAAAAACAAAAAAAADxkAAAAAAAAAAAAAAAAAAAACAAAAAAAADxoAAAAAAAAAAAAAAAAAAAACAAA
AAAAADxsAAAAAAAAAAAAAAAAAAAACAAAAAAAADxwAAAAAAAAAAAAAAAAAAAACAAAAAAAADx0AAAA
AAAAAAAAAAAAAAAACAAAAAAAADx4AAAAAAAAAAAAAAAAAAAACAAAAAAAADx8AAAAAAAAAAAAAAAA
AAAACAAAAAAAADyAAAAAAAAAAAAAAAAAAAAACAAAAAAAADyEAAAAAAAAAAAAAAAAAAAACAAAAAAA
ADyIAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADucAAAAAAAA
AACAAAAAAAAAAAAAAAAAADyQAAAAAAAAAAAwxRg1AAAAAAAAAAAAADyYAAAAAAAAADK1GTUZAAAA
AAAAAAAAADygAAAAAAAAAAAAAAAAAAAAAAAAAAAAADysAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0cAAAABwAAABcAAAAAAAA2cAAAJsgAAD1MAAAAAwAAABcA
AAAAAAA2cAAAJ/gAAD18AAAAAwAAAAMAAAAAAAA2cAAAKJQAAD2sAAAAAwAAAAMAAAAAAAA2cAAA
KuAAADU8AAA9vAAAPcAAAAAAVDMyRQ==
)
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: VLX specific menu
; @Description: -
; @Author: DIE
; @Copyright: (c) 1989-2015 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: vlx.m 7861 2022-07-29 13:45:42Z amerkle $
NAME "TASK.&sMenuName"
IF !MENU.EXIST("TASK.&sMenuName")
(
add
menu
(
popup "&VLX"
(
default
menuitem "Display &VMs" "EXT.&(sInfix)VM"
;menuitem "Display &VCPUs" "EXT.&(sInfix)VCPU"
SEPARATOR
MENUITEM "Display Task Tree" "TASK.List.TREE"
MENUITEM "Display Core Activity" "CORE.List"
)
//popup "&Help"
//(
// MENUITEM "[:manual]OS Awareness Manual VLX" "HELP __RTOS_rtos_"
//)
)
//add
//toolbar
//(
// toolitem "Host Mode" "H:,r" "EXTension.Focus Host"
// toolitem "Guest Mode" "G:,b" "EXTension.Focus Guest"
//)
add
menu "ext.&(sInfix)vm"
(
default
menuitem "Display detailed"
(
PRIVATE &address
&address=address.offset(track.address())
EXT.&(sInfix)VM &address
)
//menuitem "Display vlx struct"
//(
// &address=address.offset(track.address())
// Var.View %Open (struct vlx*)(H:0x0:&address)
//)
menuitem "Dump vlx entry"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump H:0x0:&address /l /dialog
)
)
;add
;menu "ext.vcpu"
;(
; default
; menuitem "Display detailed"
; (
; &address=address.offset(track.address())
; EXT.VCPU &address
; )
; menuitem "Display vcpu struct"
; (
; &address=address.offset(track.address())
; Var.View %Open (struct vcpu_vmx*)(H:0x0:&address)
; )
; menuitem "Dump vcpu entry"
; (
; &address=address.offset(track.address())
; Data.dump H:0x0:&address /l /dialog
; )
;)
)
)
)
PMACRO.UNLOCK
RETURN
)
autoload_64bit: ;(options)
(
PARAMETERS &sOptions
sYmbol.AutoLOAD.CHECKEmBeDded &sOptions
(
; --------------------------------------------------------------------------------
; @Title: VLX Symbol Autoloader Script
; @Description: Autoload script, called by TRACE32 if symbols are to be loaded
; @Keywords: VLX
; @Author: DIE
; @Copyright: (c) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: autoload.cmm 3546 2018-08-08 14:27:40Z rdienstbeck $
// Autoload script, called by TRACE32 if symbols are to be loaded
// VLX version
// define local macros
local &filename &type &code &data &space
local &filename &basename &progname &access
local &symfilename1 &symfilename2
// get filename and relocation information
// these parameters are passed from TRACE32 when calling this skript
entry &filename &type &code &data &space
//print "autoload: " &filename " " &type " " &code " " &data " " &space
// &filename: name of process/file
// &type: type of file: 1=process, 2=library, 3=kernel module
// &code: text segment address
// &data: data segment address
// &space: space id of process
// get symbol file name and program name
&filepath=""
&basename=string.cut(&filename,-string.len(os.file.extension(&filename)))
if (&type==1)
(
// processes
&symfilename1="&basename" // without extension
&symfilename2=&filename // as given in parameter
if task.y.o.s(rootpath)!=""
(
// root path option set, use target path
local &magic
&magic=task.proc.magic(&filename)
&filepath=task.y.o.s(rootpath)+task.proc.path(&magic)
)
)
if ((&type&0xffff)==2)
(
// libraries
&symfilename1=&filename
&symfilename2="&basename"+".so"
if task.y.o.s(rootpath)!=""
(
// root path option set, use target path
local &magic
&magic=task.proc.sid2magic(&type>>16.)
&filepath=task.y.o.s(rootpath)+task.lib.path(&filename,&magic)
)
)
if (&type==3)
(
// kernel modules
&symfilename1="&basename"+".ko"
// Linux converts dashes to underlines - try to reverse this
local &ul &len
&symfilename2="&basename"+".ko"
&len=string.len("&symfilename2")
&ul=string.scan("&symfilename2","_",0)
while &ul!=-1
(
&symfilename2=string.cut("&symfilename2",&ul-&len)+"-"+string.cut("&symfilename2",&ul+1)
&ul=string.scan("&symfilename2","_",0)
)
)
// get program name
&progname=os.file.name("&basename")
// set space id to zero if not given
if "&space"==""
&space=0
// get host/guest mode access
&access=ext.vmaccess()
// delete symbols if they already exist
if y.exist("\\&progname")
(
// create program path - due to possible special characters
&progpath="`"+"\\"+"&progname"+"`"
sYmbol.Delete &progpath
)
GROUP.Delete "&progname"
// check if preset file path is valid
if !os.file("&filepath")
&filepath=y.searchfile("&symfilename1")
// search file in source search path and open dialog when not there
if !os.file("&filepath")
&filepath=y.searchfile("&symfilename2")
if !os.file("&filepath")
(
local &file &spath
&file=os.file.name("&symfilename1")
winpos ,,,,,, filebox normal "Searching symbols for &filename"
dialog.file "*&file*"
entry %line &filepath
if "&filepath"==""
enddo
&spath=os.file.path("&filepath")
sYmbol.SourcePATH.Set "&spath"
)
// load symbol file (options for sourcepath, e.g. /STRIPPART may need to be added when required)
if (&type==1) // processes
(
Data.LOAD.Elf "&filepath" &access:&space:0 /nocode /noclear
GROUP.Create "&progname" &access:&space:0x0--0xffffffff /GREEN
)
if (&type==3) // modules
(
Data.LOAD.Elf "&filepath" &access:0:0 /nocode /noclear /name &progname /reloctype &type
GROUP.Create "&progname" y.secrange(\\&progname\.text) /YELLOW
)
if ((&type&0xffff)==2) // libraries
(
Data.LOAD.Elf "&filepath" &access:&space:&code /nocode /noclear
)
enddo
)
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
IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF !SYStem.Option.MACHINESPACES()
&sOptionMachine=""
)
ELSE
(
&sOptionMachine=""
)
sYmbol.AutoLOAD.CHECKCoMmanD "DO autoload.cmm " &sOptionMachine
RETURN
)