StigAnalysisP5DeriveInterfacePointsTask

@CacheableTask
abstract class StigAnalysisP5DeriveInterfacePointsTask : DefaultTask, StigProblemProducerTask

stigAnalysisP5DeriveInterfacePoints derives LLVM symbols for the element's interface points (sources, sinks, and entry points) from the final transformed P5 analyzer input.

The task has two configuration modes:

Mode 1: LLVM harness discovery (default — interfacePointMode = LLVM_HARNESS_DISCOVERY)

  • Input: module.ll + optional ASIL annotation JSON

  • Logic: Scan LLVM IR, demangle symbols with the pinned LLVM demangler, match the hard-coded harness templates harness::SourceGroup<, harness::SourceLeaf<, harness::SinkGroup<, and harness::SinkLeaf<, then resolve configured harness entry points from module.ll.

  • Output: component_interface_points_llvm_symbols.json, discovery_symbols.json

This mode does not scan C++ harness source files. It only reads the compiled LLVM IR (module.ll) and derives interface points from demangled harness symbols. The annotation JSON can provide ASIL metadata for discovered points; it does not create source/sink symbols by itself.

Mode 2: DSL declaration (manual — interfacePointMode = DSL_DECLARATION)

  • Input: module.ll + DSL-declared source/sink tokens (demangled C++ names)

  • Logic: Scan module.ll → demangle ALL symbols → build reverse map (demangled→mangled) → look up each DSL token in the reverse map → resolve entry points from module.ll

  • Output: component_interface_points_llvm_symbols.json (same format), discovery_symbols.json (same format)

This mode takes DSL-declared demangled names (e.g., ns::Class::ReadFoo()), scans module.ll for ALL mangled symbols, demangles them all, builds a reverse map, and looks up each token to find its mangled name. Entry points are still resolved from module.ll using the normal selector logic.

Key properties

  • Both modes produce the same output format. Both write component_interface_points_llvm_symbols.json with name = mangled LLVM symbol and demangledName = human-readable. Downstream tasks (stigAnalysisP5GenerateAnalyzerRunPlan, stigAnalysisP6RunAnalyzer, stigGenerateMarkdown) don't care which mode produced the file.

  • Both modes need module.ll (bitcode). Even in DSL_DECLARATION mode, compilation to bitcode is required because DSL tokens are demangled C++ names, while PhASAR needs mangled LLVM symbols. The only way to resolve this mapping is to scan the compiled module.

  • Phase 2 vs Phase 3: In Phase 2 the task reads stigAnalysisP3BuildProvenanceBitcode/module.ll (all TUs). In P5 it reads stigAnalysisP5ApplyBitcodeTransforms/module.ll (final analyzer input). Each phase does its own independent symbol discovery/resolution.

Constructors

Link copied to clipboard
constructor()

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard
open override var actions: List<Action<in Task?>?>?
Link copied to clipboard
@get:Input
abstract val analysisDepth: Property<AnalysisDepth>

Analysis depth for LLVM_HARNESS_DISCOVERY mode.

Link copied to clipboard
open override val ant: AntBuilder?
Link copied to clipboard
@get:Internal
open val asDynamicObject: DynamicObject
Link copied to clipboard
@get:OutputFile
abstract val componentInterfacePointsOutFile: RegularFileProperty
Link copied to clipboard
@get:Input
abstract val cxxfiltBinary: Property<String>
Link copied to clipboard
open override val dependsOn: Set<Any?>?
Link copied to clipboard
open override var description: @Nullable String?
Link copied to clipboard
open override val destroyables: TaskDestroyables?
Link copied to clipboard
open override var didWork: Boolean
Link copied to clipboard
@get:OutputFile
@get:Optional
abstract val discoverySymbolsOutFile: RegularFileProperty
Link copied to clipboard
@get:Input
@get:Optional
abstract val dslDefaultAsil: Property<String>

Default ASIL rating string for DSL-declared sources/sinks without an explicit override.

Link copied to clipboard
@get:Input
abstract val dslSinkTokens: ListProperty<String>

Sink function tokens. Each entry is formatted as token|paramIndex|ASIL where ASIL may be blank.

Link copied to clipboard
@get:Input
abstract val dslSourceTokens: ListProperty<String>

Source function tokens (fully qualified, e.g. "ns::Class::ReadFoo()"). Each entry is formatted as token|ASIL where ASIL may be blank to use the default.

Link copied to clipboard
open override var enabled: Boolean
Link copied to clipboard
@get:Input
abstract val entryPoints: ListProperty<String>
Link copied to clipboard
@get:Inject
abstract val execOperations: ExecOperations
Link copied to clipboard
open override val extensions: ExtensionContainer?
Link copied to clipboard
@get:Input
@get:Optional
abstract val failAt: Property<ProblemSeverity>
Link copied to clipboard
open override val finalizedBy: TaskDependency?
Link copied to clipboard
open override var group: @Nullable String?
Link copied to clipboard
open val identityPath: Path?
Link copied to clipboard
@get:Input
abstract val ignoreEnumValues: Property<Boolean>
Link copied to clipboard
@get:Input
abstract val implementationClassName: Property<String>

Upstream C++ class name (e.g. "FusionActivity"). Used both to build the LLVM symbol prefix for class-scoped member matching, and as the componentName field of the output JSON (the wire format keeps the historical name).

Link copied to clipboard
@get:Input
abstract val implementationNamespace: Property<String>

Upstream namespace where implementationClassName lives (e.g. "app::aeb::fusion_activity"). Multiple namespaces can be passed as a ;-separated list.

Link copied to clipboard
Link copied to clipboard
@get:Internal
abstract val includedInDefaultProblemAggregate: Property<Boolean>
Link copied to clipboard
open override val inputs: TaskInputsInternal?
Link copied to clipboard
@get:Input
abstract val interfacePointMode: Property<InterfacePointMode>
Link copied to clipboard
@get:InputFile
@get:Optional
@get:PathSensitive(value = PathSensitivity.RELATIVE)
abstract val interfacePointsFile: RegularFileProperty
Link copied to clipboard
@get:Internal
open var isEnabled: Boolean
Link copied to clipboard
Link copied to clipboard
@get:Internal
open val lifecycleDependencies: TaskDependencyInternal?
Link copied to clipboard
open override val localState: TaskLocalState?
Link copied to clipboard
open override val logger: Logger?
Link copied to clipboard
open override val logging: LoggingManager?
Link copied to clipboard
open val loggingManager: @Nullable LoggingManagerInternal?
Link copied to clipboard
@get:InputFile
@get:PathSensitive(value = PathSensitivity.RELATIVE)
abstract val moduleLl: RegularFileProperty
Link copied to clipboard
open override val mustRunAfter: TaskDependency?
Link copied to clipboard
open override val name: String?
Link copied to clipboard
open val onlyIf: Spec<in TaskInternal?>?
Link copied to clipboard
open override val outputs: TaskOutputsInternal?
Link copied to clipboard
open override val path: String?
Link copied to clipboard
@get:OutputFile
abstract override val problemsFile: RegularFileProperty
Link copied to clipboard
open override val project: Project?
Link copied to clipboard
@get:Input
abstract val projectPath: Property<String>

Gradle project path captured during configuration for canonical problem provenance.

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
open val requiredServices: TaskRequiredServices?
Link copied to clipboard
open val sharedResources: List<ResourceLock?>?
Link copied to clipboard
open override val shouldRunAfter: TaskDependency?
Link copied to clipboard
open val standardOutputCapture: StandardOutputCapture?
Link copied to clipboard
open override val state: TaskStateInternal?
Link copied to clipboard
open val taskActions: List<InputChangesAwareTaskAction?>?
Link copied to clipboard
open override val taskDependencies: TaskDependencyInternal?
Link copied to clipboard
open val taskIdentity: TaskIdentity<*>?
Link copied to clipboard
open override val temporaryDir: File?
Link copied to clipboard
open val temporaryDirFactory: Factory<File?>?
Link copied to clipboard
open override val timeout: Property<Duration?>?
Link copied to clipboard
@get:Input
@get:Optional
abstract val topicNamespace: Property<String>
Link copied to clipboard
@get:InputFile
@get:Optional
@get:PathSensitive(value = PathSensitivity.RELATIVE)
abstract val topicsFile: RegularFileProperty

Functions

Link copied to clipboard
open fun acceptServiceReferences(serviceReferences: Set<ServiceReferenceSpec?>?)
Link copied to clipboard
open fun appendParallelSafeAction(action: Action<in Task?>?)
Link copied to clipboard
open operator fun compareTo(otherTask: Task?): Int
Link copied to clipboard
open fun configure(closure: Closure<*>?): Task?
Link copied to clipboard
open fun dependsOn(vararg paths: Any?): Task?
Link copied to clipboard
open fun doFirst(action: Closure<*>?): Task?
open fun doFirst(action: Action<in Task?>?): Task?
open fun doFirst(actionName: String?, action: Action<in Task?>?): Task?
Link copied to clipboard
open fun doLast(action: Closure<*>?): Task?
open fun doLast(action: Action<in Task?>?): Task?
open fun doLast(actionName: String?, action: Action<in Task?>?): Task?
Link copied to clipboard
open fun doNotTrackState(reasonNotToTrackState: String?)
Link copied to clipboard
open fun doNotTrackStateIf(reason: String?, spec: Spec<in TaskInternal?>?)
Link copied to clipboard
open fun finalizedBy(vararg paths: Any?): Task?
Link copied to clipboard
open fun getActions(): List<Action<in Task?>?>?
Link copied to clipboard
open fun getAnt(): AntBuilder?
Link copied to clipboard
open fun getDependsOn(): Set<Any?>?
Link copied to clipboard
open fun getDescription(): @Nullable String?
Link copied to clipboard
open fun getDestroyables(): TaskDestroyables?
Link copied to clipboard
open fun getDidWork(): Boolean
Link copied to clipboard
open fun getEnabled(): Boolean
Link copied to clipboard
open fun getExtensions(): ExtensionContainer?
Link copied to clipboard
open fun getFinalizedBy(): TaskDependency?
Link copied to clipboard
open fun getGroup(): @Nullable String?
Link copied to clipboard
open fun getInputs(): TaskInputsInternal?
Link copied to clipboard
open fun getLocalState(): TaskLocalState?
Link copied to clipboard
open fun getLogger(): Logger?
Link copied to clipboard
open fun getLogging(): LoggingManager?
Link copied to clipboard
open fun getMustRunAfter(): TaskDependency?
Link copied to clipboard
open fun getName(): String?
Link copied to clipboard
open fun getOutputs(): TaskOutputsInternal?
Link copied to clipboard
open fun getPath(): String?
Link copied to clipboard
open fun getProject(): Project?
Link copied to clipboard
open fun getShouldRunAfter(): TaskDependency?
Link copied to clipboard
open fun getState(): TaskStateInternal?
Link copied to clipboard
open fun getTaskDependencies(): TaskDependencyInternal?
Link copied to clipboard
open fun getTemporaryDir(): File?
Link copied to clipboard
open fun getTimeout(): Property<Duration?>?
Link copied to clipboard
open fun hasProperty(propertyName: String?): Boolean
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
open fun mustRunAfter(vararg paths: Any?): Task?
Link copied to clipboard
open fun onlyIf(onlyIfClosure: Closure<*>?)
open fun onlyIf(spec: Spec<in Task?>?)
open fun onlyIf(onlyIfReason: String?, spec: Spec<in Task?>?)
Link copied to clipboard
open fun prependParallelSafeAction(action: Action<in Task?>?)
Link copied to clipboard
open fun property(propertyName: String?): Any?
Link copied to clipboard
open fun restoreOnlyIf(onlyIf: Spec<in TaskInternal?>?)
Link copied to clipboard
open fun restoreTaskActions(taskActions: List<InputChangesAwareTaskAction?>?)
Link copied to clipboard
fun run()
Link copied to clipboard
open fun setActions(replacements: List<Action<in Task?>?>?)
Link copied to clipboard
open fun setDependsOn(dependsOn: Iterable<*>?)
Link copied to clipboard
open fun setDescription(description: @Nullable String?)
Link copied to clipboard
open fun setDidWork(didWork: Boolean)
Link copied to clipboard
open fun setEnabled(enabled: Boolean)
Link copied to clipboard
open fun setFinalizedBy(finalizedByTasks: Iterable<*>?)
Link copied to clipboard
open fun setGroup(group: @Nullable String?)
Link copied to clipboard
open fun setMustRunAfter(mustRunAfterTasks: Iterable<*>?)
Link copied to clipboard
open fun setOnlyIf(onlyIfClosure: Closure<*>?)
open fun setOnlyIf(spec: Spec<in Task?>?)
open fun setOnlyIf(onlyIfReason: String?, spec: Spec<in Task?>?)
Link copied to clipboard
open fun setProperty(name: String?, value: Any?)
Link copied to clipboard
open fun setShouldRunAfter(shouldRunAfterTasks: Iterable<*>?)
Link copied to clipboard
open fun shouldRunAfter(vararg paths: Any?): TaskDependency?
Link copied to clipboard
open fun usesService(service: Provider<out BuildService<*>?>?)