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

169 lines
4.4 KiB
Plaintext

; --------------------------------------------------------------------------------
; @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 <elf> <outfile>
; 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 &param
ENTRY %LINE &param
RESet
SYStem.RESet
PRIVATE &elf &outfile
GOSUB ParseParameters &param
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) " <elf> <outfile>"
ENDDO FALSE()
)
RETURN "&elf" "&outfile"
)