; --------------------------------------------------------------------------------
; @Title: Lynx Symbol Autoloader Script
; @Description: Autoload script, called by TRACE32 if symbols are to be loaded
; @Keywords: lynx
; @Author: DIE
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: autoload.cmm 6904 2014-04-21 15:16:07Z kjmal $


// define local macros
 LOCAL &filename &type &code &data &space &basename &progname &symfilename &filepath

// 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: 0=kernel, 1=process, 2=library, 3=driver
 // &code:          text segment address
 // &data:          data segment address
 // &space:         space id of process
 
// no processing for kernel
 IF (&type==0)  // kernel
   ENDDO
 
// get symbol file name and program name
 &basename=STRing.CUT(&filename,-STRing.LENgth(OS.FILE.EXTENSION(&filename)))
 IF (&type==1)
   &symfilename="&basename"
 IF (&type==2)
   &symfilename="&basename"+".so"
 &progname=OS.FILE.NAME("&basename")

// delete symbols if they already exist
 IF sYmbol.EXIST("\\&progname")
   sYmbol.Delete \\&progname
 GROUP.Delete "&progname"

// search file in source search path and open dialog when not there
 &filepath=sYmbol.SEARCHFILE("&symfilename")
 IF !OS.FILE("&filepath")               // not found
 (
   LOCAL &file
   &file=OS.FILE.NAME("&symfilename")
   WinPOS ,,,,,, filebox normal "Searching symbols for &filename"
   DIALOG.File "*\&file"
   ENTRY %LINE &filepath
   IF "&filepath"==""
     ENDDO
 )

// load symbol file (options for sourcepath, e.g. /STRIPPART may need to be added when required)

 IF (&type==1)  // processes
 (
    &version=task.lynxos(VERSION.view)
    IF (&version==31.)||(&version==20.)||(&version==21.)||(&version==22.)
    (
        ; LynxOS 3.1 or LynxOS-178 2.x
        Data.LOAD.XCoff "&filepath" &space:0 /NoCODE /NoClear /name &progname
    )
    ELSE IF (&version==40.)||(&version==42.)||(&version==50.)
    (
        ; LynxOS 4.x or LynxOS 5.0
        Data.LOAD.Elf "&filepath" &space:0 /CPP /NoCODE /NoClear /name &progname
    )
    ELSE
    (
        PRINT "unknown LynxOS version " &version/10. "." &version%10.
        ENDDO
    )
 
    IF task.y.o(mmuscan)==1      // scan only if TRANSlation.TableWalk not configured
        MMU.TaskPageTable.SCAN &space:0
    GROUP.Create "&progname" &space:0x0--0xffffffff /GREEN
 )
 
 IF ((&type&0xff)==2) // libraries
 (
   Data.LOAD.Elf &filepath &space:&code /NoCODE /NoClear
 )
 
 ENDDO
