Skip to content

Commit 3a975ab

Browse files
committed
Add ApplicationBlockGraph, ml deps
1 parent f37c4e6 commit 3a975ab

File tree

6 files changed

+76
-0
lines changed

6 files changed

+76
-0
lines changed

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ object Versions {
88
const val mockk = "1.13.4"
99
const val junitParams = "5.9.3"
1010
const val logback = "1.4.8"
11+
const val onnxruntime = "1.15.1"
1112

1213
// versions for jvm samples
1314
const val samplesLombok = "1.18.20"

buildSrc/src/main/kotlin/usvm.kotlin-conventions.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919

2020
implementation(kotlin("stdlib-jdk8"))
2121
implementation(kotlin("reflect"))
22+
implementation("com.microsoft.onnxruntime", "onnxruntime", Versions.onnxruntime)
2223
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutines}")
2324

2425
testImplementation(kotlin("test"))

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ include("usvm-core")
44
include("usvm-jvm")
55
include("usvm-util")
66
include("usvm-sample-language")
7+
include("usvm-path-selection")

usvm-path-selection/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
plugins {
2+
id("usvm.kotlin-conventions")
3+
}
4+
5+
dependencies {
6+
implementation(project(":usvm-core"))
7+
implementation(project(":usvm-jvm"))
8+
9+
implementation("org.jacodb:jacodb-analysis:${Versions.jcdb}")
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.usvm
2+
3+
import org.usvm.statistics.ApplicationGraph
4+
5+
interface ApplicationBlockGraph<Method, BasicBlock, Statement> : ApplicationGraph<Method, BasicBlock> {
6+
fun block(stmt: Statement): BasicBlock
7+
fun instructions(block: BasicBlock): Sequence<Statement>
8+
fun blocks(): Sequence<BasicBlock>
9+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.usvm.jvm
2+
3+
import org.jacodb.api.JcMethod
4+
import org.jacodb.api.cfg.JcBasicBlock
5+
import org.jacodb.api.cfg.JcBlockGraph
6+
import org.jacodb.api.cfg.JcGraph
7+
import org.jacodb.api.cfg.JcInst
8+
import org.jacodb.impl.cfg.JcBlockGraphImpl
9+
import org.usvm.ApplicationBlockGraph
10+
import org.usvm.machine.JcApplicationGraph
11+
12+
class JcApplicationBlockGraph(jcGraph: JcGraph) :
13+
ApplicationBlockGraph<JcMethod, JcBasicBlock, JcInst> {
14+
private val jcBlockGraphImpl: JcBlockGraph = JcBlockGraphImpl(jcGraph)
15+
private val jcApplicationGraph: JcApplicationGraph = JcApplicationGraph(jcGraph.classpath)
16+
override fun predecessors(node: JcBasicBlock): Sequence<JcBasicBlock> =
17+
jcBlockGraphImpl.predecessors(node).asSequence()
18+
19+
override fun successors(node: JcBasicBlock): Sequence<JcBasicBlock> = jcBlockGraphImpl.successors(node).asSequence()
20+
21+
override fun callees(node: JcBasicBlock): Sequence<JcMethod> {
22+
return jcBlockGraphImpl.instructions(node)
23+
.map { jcApplicationGraph.callees(it) }
24+
.reduce { acc, sequence -> acc + sequence }
25+
.toSet()
26+
.asSequence()
27+
}
28+
29+
override fun callers(method: JcMethod): Sequence<JcBasicBlock> {
30+
return jcApplicationGraph
31+
.callers(method)
32+
.map { stmt -> block(stmt) }
33+
.toSet()
34+
.asSequence()
35+
}
36+
37+
override fun entryPoints(method: JcMethod): Sequence<JcBasicBlock> = jcBlockGraphImpl.entries.asSequence()
38+
39+
override fun exitPoints(method: JcMethod): Sequence<JcBasicBlock> = jcBlockGraphImpl.exits.asSequence()
40+
41+
override fun methodOf(node: JcBasicBlock): JcMethod = jcBlockGraphImpl.instructions(node).first().location.method
42+
43+
override fun statementsOf(method: JcMethod): Sequence<JcBasicBlock> {
44+
return jcApplicationGraph
45+
.statementsOf(method)
46+
.map { stmt -> block(stmt) }
47+
.toSet()
48+
.asSequence()
49+
}
50+
51+
override fun block(stmt: JcInst): JcBasicBlock = jcBlockGraphImpl.block(stmt)
52+
override fun instructions(block: JcBasicBlock): Sequence<JcInst> = jcBlockGraphImpl.instructions(block).asSequence()
53+
override fun blocks(): Sequence<JcBasicBlock> = jcBlockGraphImpl.asSequence()
54+
}

0 commit comments

Comments
 (0)