author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Fri, 25 Jan 2019 13:33:51 +0000 | |
changeset 143 | df7f89efd39d |
parent 98 | 8601c1b9e7ba |
child 237 | 53a7322c7128 |
permissions | -rw-r--r-- |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
1 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
2 |
jv:vdb - Visual / VM Debugger |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
3 |
Copyright (C) 2015-now Jan Vrany |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
4 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
6 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
7 |
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
8 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
9 |
"{ Package: 'jv:vdb' }" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
10 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
11 |
"{ NameSpace: Smalltalk }" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
12 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
13 |
Object subclass:#VDBInstructionBasicBlock |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
instanceVariableNames:'instructions precedessors successor1 successor2' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
classVariableNames:'' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
poolDictionaries:'' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
category:'VDB-UI-Support' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
18 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
19 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
20 |
!VDBInstructionBasicBlock class methodsFor:'documentation'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
21 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
22 |
copyright |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
23 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
jv:vdb - Visual / VM Debugger |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
Copyright (C) 2015-now Jan Vrany |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
27 |
This software is licensed under 'Creative Commons Attribution-NonCommercial 4.0 International License' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
You may find a full license text in LICENSE.txt or at http://creativecommons.org/licenses/by-nc/4.0/ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
30 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
31 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
32 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
33 |
!VDBInstructionBasicBlock class methodsFor:'utilities'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
34 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
35 |
analyze: instructions |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
36 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
37 |
Analyzes `instructions`, create and connect basic blocks and return |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
38 |
them in a collection. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
39 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
40 |
`instructions` parameter should be a list of GDBInstruction or |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
41 |
polymorphic objects). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
42 |
" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
43 |
| blocks curBB firstI | |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
44 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
45 |
"/ Pass 1, initial blocks by cutting after each branch |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
"/ or return instruction. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
blocks := OrderedCollection new. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
curBB := VDBInstructionBasicBlock new. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
instructions withIndexDo:[:last :lastI | |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
firstI isNil ifTrue:[ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
firstI := lastI |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
]. |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
53 |
last isBranch ifTrue:[ |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
| prevBB | |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
55 |
curBB setInstructions: (instructions copyFrom: firstI to: lastI). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
56 |
blocks add: curBB. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
57 |
prevBB := curBB. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
58 |
curBB := VDBInstructionBasicBlock new. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
59 |
prevBB setSuccessor1: curBB. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
60 |
firstI := nil. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
61 |
] ifFalse:[ |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
62 |
last isReturn ifTrue:[ |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
63 |
curBB setInstructions: (instructions copyFrom: firstI to: lastI). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
64 |
blocks add: curBB. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
65 |
curBB := VDBInstructionBasicBlock new. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
66 |
firstI := nil. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
67 |
]]. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
]. |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
69 |
firstI notNil ifTrue:[ |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
70 |
curBB setInstructions: (instructions copyFrom: firstI). |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
71 |
blocks add: curBB. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
72 |
]. |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |
"/ Pass 2: iterate ober basic blocks and connect successor2 based on |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
75 |
"/ last instructions #branchTargetAddress. If target address points in |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
76 |
"/ the middle of basic block, split it. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
77 |
blocks copy do:[:bb | |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
78 |
bb last isBranch ifTrue:[ |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
79 |
| targetAddress succBB | |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
80 |
|
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
81 |
targetAddress := bb last branchTarget. |
98
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
82 |
targetAddress notNil ifTrue:[ |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
83 |
"/ Find successor block. Note, that we may found none if the branch target is |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
84 |
"/ outside given coce. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
85 |
succBB := blocks detect:[:e | e includesAddress: targetAddress ] ifNone: [ nil ]. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
86 |
succBB notNil ifTrue:[ |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
87 |
"/ If `targetAddress` points into the middle of `succBB` we have to split |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
88 |
"/ succBB into two. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
89 |
succBB firstAddress < targetAddress ifTrue:[ |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
90 |
| succBBs | |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
91 |
|
98
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
92 |
succBBs := succBB splitAtAddress: targetAddress. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
93 |
blocks remove: succBB; addAll: succBBs. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
94 |
succBB := succBBs last. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
95 |
]. |
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
96 |
bb setSuccessor2: succBB. |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
97 |
]. |
98
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
98 |
] |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
99 |
]. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
100 |
]. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
101 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
102 |
"/ Jo done!! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
103 |
^ blocks. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
104 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
105 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
106 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
107 |
^ blocks |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
108 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
109 |
"Created: / 27-06-2018 / 13:03:16 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
98
8601c1b9e7ba
Fix `VDBInstructionBasicBlock class >> analyze:` to handle indirect jumps
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
96
diff
changeset
|
110 |
"Modified: / 31-08-2018 / 23:50:44 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
111 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
112 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
113 |
!VDBInstructionBasicBlock methodsFor:'accessing'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
114 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
115 |
first |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
116 |
^ instructions first |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
117 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
118 |
"Created: / 27-06-2018 / 15:41:58 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
119 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
120 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
121 |
firstAddress |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
122 |
^ self first address |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
123 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
124 |
"Created: / 27-06-2018 / 15:41:34 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
125 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
126 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
127 |
last |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
128 |
^ instructions last |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
129 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
130 |
"Created: / 27-06-2018 / 15:42:09 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
131 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
132 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
133 |
lastAddress |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
134 |
^ self last address |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
135 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
136 |
"Created: / 27-06-2018 / 15:41:38 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
137 |
! |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
138 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
139 |
precedessors |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
140 |
^ precedessors ? #() |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
141 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
142 |
"Modified: / 16-08-2018 / 11:47:38 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
143 |
! |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
144 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
145 |
successor1 |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
146 |
^ successor1 |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
147 |
! |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
148 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
149 |
successor2 |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
150 |
^ successor2 |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
151 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
152 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
153 |
!VDBInstructionBasicBlock methodsFor:'initialization'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
154 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
155 |
addPrecedessor: aVDBInstructionBlock |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
156 |
precedessors isNil ifTrue:[ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
157 |
precedessors := Array with: aVDBInstructionBlock. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
158 |
] ifFalse:[ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
159 |
precedessors := precedessors copyWith: aVDBInstructionBlock |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
160 |
]. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
161 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
162 |
"Created: / 27-06-2018 / 15:29:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
163 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
164 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
165 |
setInstructions: aCollection |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
166 |
instructions := aCollection |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
167 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
168 |
"Created: / 27-06-2018 / 14:59:31 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
169 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
170 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
171 |
setSuccessor1: aVDBInstructionBasicBlock |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
172 |
successor1 := aVDBInstructionBasicBlock. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
173 |
successor1 addPrecedessor: self. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
174 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
175 |
"Created: / 27-06-2018 / 15:28:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
176 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
177 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
178 |
setSuccessor2: aVDBInstructionBasicBlock |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
179 |
successor2 := aVDBInstructionBasicBlock. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
180 |
successor2 addPrecedessor: self. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
181 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
182 |
"Created: / 27-06-2018 / 15:28:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
183 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
184 |
|
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
185 |
!VDBInstructionBasicBlock methodsFor:'printing & storing'! |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
186 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
187 |
printOn:aStream |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
188 |
"append a printed representation of the receiver to the argument, aStream" |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
189 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
190 |
super printOn:aStream. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
191 |
aStream nextPut: $(. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
192 |
self firstAddress printOn: aStream base: 16 size: 15 fill: $0. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
193 |
aStream nextPutAll: ' - '. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
194 |
self lastAddress printOn: aStream base: 16 size: 15 fill: $0. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
195 |
successor1 notNil ifTrue:[ |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
196 |
aStream nextPutAll: ' 1> '. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
197 |
successor1 firstAddress printOn: aStream base: 16 size: 15 fill: $0. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
198 |
]. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
199 |
successor2 notNil ifTrue:[ |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
200 |
aStream nextPutAll: ' 2> '. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
201 |
successor2 firstAddress printOn: aStream base: 16 size: 15 fill: $0. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
202 |
]. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
203 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
204 |
aStream nextPut: $) |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
205 |
|
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
206 |
"Modified: / 16-08-2018 / 13:18:37 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
207 |
! ! |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
208 |
|
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
209 |
!VDBInstructionBasicBlock methodsFor:'queries'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
210 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
211 |
includes: instruction |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
212 |
^ instructions includes: instruction |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
213 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
214 |
"Created: / 27-06-2018 / 15:37:23 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
215 |
! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
216 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
217 |
includesAddress: address |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
218 |
"Return `true`, if this basic block includes an instruction |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
219 |
with given address, false otherwise." |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
220 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
221 |
^ (address between: instructions first address and: instructions last address) |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
222 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
223 |
"Created: / 27-06-2018 / 15:40:55 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
224 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
225 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
226 |
!VDBInstructionBasicBlock methodsFor:'utilities'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
227 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
228 |
splitAtAddress: address |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
229 |
| splitIdx bb1 bb2 | |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
230 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
231 |
splitIdx := instructions indexOf: (instructions detect:[:e | e address = address ] ifNone:[ nil ]). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
232 |
"/ Note, that thhere might not be any instruction with that address, such as |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
233 |
"/ when ill-code jumps into the middle of instruction... |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
234 |
splitIdx == 0 ifTrue:[ |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
235 |
"/ ...in that case, make no split and return self so this case is |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
236 |
"/ transparent to users. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
237 |
^Array with: self. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
238 |
]. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
239 |
bb1 := self class new setInstructions: (instructions copyTo: splitIdx - 1). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
240 |
bb2 := self class new setInstructions: (instructions copyFrom: splitIdx). |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
241 |
bb1 setSuccessor1: bb2. |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
242 |
|
96
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
243 |
precedessors notEmptyOrNil ifTrue:[ |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
244 |
precedessors do:[:precedessor | |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
245 |
precedessor successor1 == self ifTrue:[ |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
246 |
precedessor setSuccessor1: bb1. |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
247 |
]. |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
248 |
precedessor successor2 == self ifTrue:[ |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
249 |
precedessor setSuccessor2: bb1. |
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
250 |
]. |
93
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
251 |
]. |
bd0a7febf26d
UI: Highlight target basic block in disassembly view
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
80
diff
changeset
|
252 |
]. |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
253 |
^ Array with: bb1 with: bb2. |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
254 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
255 |
"Created: / 27-06-2018 / 16:00:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
96
40094b870074
Fix `VGBInstructionBasicBLock >> splitAtAddress:`
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
93
diff
changeset
|
256 |
"Modified: / 30-08-2018 / 10:57:26 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
80
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
257 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
258 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
259 |
!VDBInstructionBasicBlock class methodsFor:'documentation'! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
260 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
261 |
version_HG |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
262 |
|
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
263 |
^ '$Changeset: <not expanded> $' |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
264 |
! ! |
7a9cf1d6be50
UX: improvements in disasembly view (`VDBInstructionListApplication`)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
265 |