; -------------------------------------------------------------------------------- ; @Title: Detect Decisions with Observability Gaps ; @Description: ; ; Load the demo application into an instruction set simulator ; and export observability gaps to a file. The inputs arguments are: ; 1. the ELF file for which the code coverage should be measured and ; 2. the path of the output file containing the detected observability gaps ; Usage: ; DO detect-obs-gaps ; e.g. DO detect-obs-gaps "demo.elf" "demo.json" ; ; @Author: CSA ; @Copyright: (C) 1989-2024 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: detect-obs-gaps.cmm 22909 2024-06-11 14:25:28Z csax $ PRIVATE ¶m ENTRY %LINE ¶m RESet SYStem.RESet PRIVATE &elf &outfile GOSUB ParseParameters ¶m RETURNVALUES &elf &outfile IF STRing.SCAN("&elf","arm_cr.elf",0.)>=0 ( SYStem.CPU RM57L843-ZWT SYStem.Up Data.LOAD.Elf "~~~~/../coverage_arm_cr.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","arm_cr_flash.elf",0.)>=0 ( SYStem.CPU RM57L843-ZWT SYStem.Up Data.LOAD.Elf "~~~~/../coverage_arm_cr_flash.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","arm_cm.elf",0.)>=0 ( SYStem.CPU STM32F407IG SYStem.Up Data.LOAD.Elf "~~~~/../coverage_arm_cm.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","ppc_mpc55xx.elf",0.)>=0 ( SYStem.CPU MPC55XX SYStem.Up Data.LOAD.Elf "~~~~/../coverage_ppc_mpc55xx.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","ppc_t2080.elf",0.)>=0 ( SYStem.CPU T2080 SYStem.Up Data.LOAD.Elf "~~~~/../coverage_ppc_t2080.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","tricore_tc3.elf",0.)>=0 ( SYStem.CPU TC399XE SYStem.Up Data.LOAD.Elf "~~~~/../coverage_tricore_tc3.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","tricore_tc2.elf",0.)>=0 ( SYStem.CPU TC399XE SYStem.Up Data.LOAD.Elf "~~~~/../coverage_tricore_tc2.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","riscv_rv32.elf",0.)>=0 ( SYStem.CPU RV32 SYStem.Up Data.LOAD.Elf "~~~~/../coverage_riscv_rv32.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","riscv_rv32_flash.elf",0.)>=0 ( SYStem.CPU RV32 SYStem.Up Data.LOAD.Elf "~~~~/../coverage_riscv_rv32_flash.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","riscv_rv64.elf",0.)>=0 ( SYStem.CPU RV64 SYStem.Up Data.LOAD.Elf "~~~~/../coverage_riscv_rv64.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","riscv_rv64_flash.elf",0.)>=0 ( SYStem.CPU RV64 SYStem.Up Data.LOAD.Elf "~~~~/../coverage_riscv_rv64_flash.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","mips_m14k_mips32.elf",0.)>=0 ( SYStem.CPU PIC32MZ SYStem.Up Data.LOAD.Elf "~~~~/../coverage_mips_m14k_mips32.elf" /RelPath /PlusVM ) ELSE IF STRing.SCAN("&elf","mips_m14k_micro.elf",0.)>=0 ( SYStem.CPU PIC32MZ SYStem.Up Data.LOAD.Elf "~~~~/../coverage_mips_m14k_micro.elf" /RelPath /PlusVM ) ELSE ( PRINT %ERROR "Error: Executable variant is not supported." ENDDO FALSE() ) PRIVATE &eca &eca="coverage.c.eca" IF !OS.FILE.EXIST(&eca) ( PRINT %ERROR "Error: ECA file ""&eca"" does not exist." ENDDO FALSE() ) sYmbol.ECA.LOADALL /SkipErrors sYmbol.ECA.BINary.ControlFlowMode.Trace ON sYmbol.ECA.BINary.ControlFlowMode.INSTR ON sYmbol.ECA.BINary.PROCESS sYmbol.ECA.BINary.EXPORT.GAPS "&outfile" QUIT ; -------------------------------------------------------------------------------- ; Parse script input parameters ; SUBROUTINE ParseParameters ( PRIVATE &elf &outfile ENTRY &elf &outfile IF STRing.SCAN("&elf","arm_cr.elf",0.)<0.&&STRing.SCAN("&elf","arm_cr_flash.elf",0.)<0.&&STRing.SCAN("&elf","arm_cm.elf",0.)<0.&&STRing.SCAN("&elf","ppc_mpc55xx.elf",0.)<0.&&STRing.SCAN("&elf","ppc_t2080.elf",0.)<0.&&STRing.SCAN("&elf","tricore_tc3.elf",0.)<0.&&STRing.SCAN("&elf","tricore_tc2.elf",0.)<0.&&STRing.SCAN("&elf","riscv_rv32.elf",0.)<0.&&STRing.SCAN("&elf","riscv_rv32_flash.elf",0.)<0.&&STRing.SCAN("&elf","riscv_rv64.elf",0.)<0.&&STRing.SCAN("&elf","riscv_rv64_flash.elf",0.)<0.&&STRing.SCAN("&elf","mips_m14k_mips32.elf",0.)<0.&&STRing.SCAN("&elf","mips_m14k_micro.elf",0.)<0. ( PRINT %ERROR "Error: Executable variant is not supported." ENDDO FALSE() ) IF "&outfile"=="" ( PRIVATE &fname &fname=OS.PresentPracticeFile() PRINT %ERROR "Error: Missing Argument - Usage DO " OS.FILE.NAME(&fname) " " ENDDO FALSE() ) RETURN "&elf" "&outfile" )