ckb-debugger 0.200.2

Standalone debugger for Nervos CKB
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
#ifndef CKB_VM_BPFC_RISCV_H_
#define CKB_VM_BPFC_RISCV_H_

// Start of output from running cbindgen -l c in ckb-vm/definitions
#include <stdarg.h>
// #include <stdbool.h>
// #include <stdint.h>
// #include <stdlib.h>

#define RISCV_PAGE_SHIFTS 12

#define RISCV_PAGESIZE (1 << RISCV_PAGE_SHIFTS)

#define RISCV_GENERAL_REGISTER_NUMBER 32

#define RISCV_MAX_MEMORY (4 << 20)

#define DEFAULT_STACK_SIZE (1 << 20)

#define RISCV_PAGES (RISCV_MAX_MEMORY / RISCV_PAGESIZE)

#define MEMORY_FRAME_SHIFTS 18

#define MEMORY_FRAMESIZE (1 << MEMORY_FRAME_SHIFTS)

#define MEMORY_FRAMES (RISCV_MAX_MEMORY / MEMORY_FRAMESIZE)

#define MEMORY_FRAME_PAGE_SHIFTS (MEMORY_FRAME_SHIFTS - RISCV_PAGE_SHIFTS)

#define ISA_IMC 0

#define ISA_B 1

#define ISA_MOP 2

#define ISA_A 4

#define TRACE_SIZE 8192

#define TRACE_ITEM_LENGTH 16

#define RET_DECODE_TRACE 1

#define RET_ECALL 2

#define RET_EBREAK 3

#define RET_DYNAMIC_JUMP 4

#define RET_MAX_CYCLES_EXCEEDED 5

#define RET_CYCLES_OVERFLOW 6

#define RET_OUT_OF_BOUND 7

#define RET_INVALID_PERMISSION 8

#define RET_SLOWPATH 9

#define FLAG_FREEZED 1

#define FLAG_EXECUTABLE 2

#define FLAG_WXORX_BIT 2

#define FLAG_WRITABLE (~FLAG_EXECUTABLE & FLAG_WXORX_BIT)

#define FLAG_DIRTY 4

#define ZERO 0

#define RA 1

#define SP 2

#define GP 3

#define FP 8

#define TP 4

#define T0 5

#define T1 6

#define T2 7

#define T3 28

#define T4 29

#define T5 30

#define T6 31

#define S0 8

#define S1 9

#define S2 18

#define S3 19

#define S4 20

#define S5 21

#define S6 22

#define S7 23

#define S8 24

#define S9 25

#define S10 26

#define S11 27

#define A0 10

#define A1 11

#define A2 12

#define A3 13

#define A4 14

#define A5 15

#define A6 16

#define A7 17

typedef uint16_t InstructionOpcode;

#define OP_UNLOADED 16

#define OP_ADD 17

#define OP_ADDI 18

#define OP_ADDIW 19

#define OP_ADDW 20

#define OP_AND 21

#define OP_ANDI 22

#define OP_AUIPC 23

#define OP_BEQ 24

#define OP_BGE 25

#define OP_BGEU 26

#define OP_BLT 27

#define OP_BLTU 28

#define OP_BNE 29

#define OP_DIV 30

#define OP_DIVU 31

#define OP_DIVUW 32

#define OP_DIVW 33

#define OP_EBREAK 34

#define OP_ECALL 35

#define OP_FENCE 36

#define OP_FENCEI 37

#define OP_JAL 38

#define OP_JALR_VERSION0 39

#define OP_JALR_VERSION1 40

#define OP_LB_VERSION0 41

#define OP_LB_VERSION1 42

#define OP_LBU_VERSION0 43

#define OP_LBU_VERSION1 44

#define OP_LD_VERSION0 45

#define OP_LD_VERSION1 46

#define OP_LH_VERSION0 47

#define OP_LH_VERSION1 48

#define OP_LHU_VERSION0 49

#define OP_LHU_VERSION1 50

#define OP_LUI 51

#define OP_LW_VERSION0 52

#define OP_LW_VERSION1 53

#define OP_LWU_VERSION0 54

#define OP_LWU_VERSION1 55

#define OP_MUL 56

#define OP_MULH 57

#define OP_MULHSU 58

#define OP_MULHU 59

#define OP_MULW 60

#define OP_OR 61

#define OP_ORI 62

#define OP_REM 63

#define OP_REMU 64

#define OP_REMUW 65

#define OP_REMW 66

#define OP_SB 67

#define OP_SD 68

#define OP_SH 69

#define OP_SLL 70

#define OP_SLLI 71

#define OP_SLLIW 72

#define OP_SLLW 73

#define OP_SLT 74

#define OP_SLTI 75

#define OP_SLTIU 76

#define OP_SLTU 77

#define OP_SRA 78

#define OP_SRAI 79

#define OP_SRAIW 80

#define OP_SRAW 81

#define OP_SRL 82

#define OP_SRLI 83

#define OP_SRLIW 84

#define OP_SRLW 85

#define OP_SUB 86

#define OP_SUBW 87

#define OP_SW 88

#define OP_XOR 89

#define OP_XORI 90

#define OP_LR_W 91

#define OP_SC_W 92

#define OP_AMOSWAP_W 93

#define OP_AMOADD_W 94

#define OP_AMOXOR_W 95

#define OP_AMOAND_W 96

#define OP_AMOOR_W 97

#define OP_AMOMIN_W 98

#define OP_AMOMAX_W 99

#define OP_AMOMINU_W 100

#define OP_AMOMAXU_W 101

#define OP_LR_D 102

#define OP_SC_D 103

#define OP_AMOSWAP_D 104

#define OP_AMOADD_D 105

#define OP_AMOXOR_D 106

#define OP_AMOAND_D 107

#define OP_AMOOR_D 108

#define OP_AMOMIN_D 109

#define OP_AMOMAX_D 110

#define OP_AMOMINU_D 111

#define OP_AMOMAXU_D 112

#define OP_ADDUW 113

#define OP_ANDN 114

#define OP_BCLR 115

#define OP_BCLRI 116

#define OP_BEXT 117

#define OP_BEXTI 118

#define OP_BINV 119

#define OP_BINVI 120

#define OP_BSET 121

#define OP_BSETI 122

#define OP_CLMUL 123

#define OP_CLMULH 124

#define OP_CLMULR 125

#define OP_CLZ 126

#define OP_CLZW 127

#define OP_CPOP 128

#define OP_CPOPW 129

#define OP_CTZ 130

#define OP_CTZW 131

#define OP_MAX 132

#define OP_MAXU 133

#define OP_MIN 134

#define OP_MINU 135

#define OP_ORCB 136

#define OP_ORN 137

#define OP_REV8 138

#define OP_ROL 139

#define OP_ROLW 140

#define OP_ROR 141

#define OP_RORI 142

#define OP_RORIW 143

#define OP_RORW 144

#define OP_SEXTB 145

#define OP_SEXTH 146

#define OP_SH1ADD 147

#define OP_SH1ADDUW 148

#define OP_SH2ADD 149

#define OP_SH2ADDUW 150

#define OP_SH3ADD 151

#define OP_SH3ADDUW 152

#define OP_SLLIUW 153

#define OP_XNOR 154

#define OP_ZEXTH 155

#define OP_WIDE_MUL 156

#define OP_WIDE_MULU 157

#define OP_WIDE_MULSU 158

#define OP_WIDE_DIV 159

#define OP_WIDE_DIVU 160

#define OP_FAR_JUMP_REL 161

#define OP_FAR_JUMP_ABS 162

#define OP_ADC 163

#define OP_SBB 164

#define OP_ADCS 165

#define OP_SBBS 166

#define OP_ADD3A 167

#define OP_ADD3B 168

#define OP_ADD3C 169

#define OP_CUSTOM_LOAD_UIMM 170

#define OP_CUSTOM_LOAD_IMM 171

#define OP_CUSTOM_TRACE_END 172

#define MINIMAL_OPCODE OP_UNLOADED

#define MAXIMUM_OPCODE OP_CUSTOM_TRACE_END

// End of output from running cbindgen -l c in ckb-vm/definitions

typedef uint64_t Instruction;
typedef uint RegisterIndex;
typedef int32_t SImmediate;
typedef uint32_t UImmediate;

#define EXTRACT_OPCODE(i) (((i >> 8) & 0xff00) | (i & 0x00ff))
#define INSTRUCTION_LENGTH(i) (((i >> 24) & 0x0f) << 1)

#define RTYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define RTYPE_RD(i) (i >> 8)
#define RTYPE_RS1(i) (i >> 32)
#define RTYPE_RS2(i) (i >> 40)

#define ITYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define ITYPE_RD(i) (i >> 8)
#define ITYPE_RS1(i) (i >> 32)
#define ITYPE_IMMEDIATE_U(i) (i >> 40)
#define ITYPE_IMMEDIATE_S(i) (i >> 40)

#define STYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define STYPE_RS1(i) (i >> 32)
#define STYPE_RS2(i) (i >> 8)
#define STYPE_IMMEDIATE_U(i) (i >> 40)
#define STYPE_IMMEDIATE_S(i) (i >> 40)

#define UTYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define UTYPE_RD(i) (i >> 8)
#define UTYPE_IMMEDIATE_U(i) (i >> 32)
#define UTYPE_IMMEDIATE_S(i) (i >> 32)

#define R4TYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define R4TYPE_RD(i) (i >> 8)
#define R4TYPE_RS1(i) (i >> 32)
#define R4TYPE_RS2(i) (i >> 40)
#define R4TYPE_RS3(i) (i >> 48)

#define R5TYPE_OP(i) ((i >> 16 << 8) | (i & 0xFF))
#define R5TYPE_RD(i) (i >> 8)
#define R5TYPE_RS1(i) (i >> 32)
#define R5TYPE_RS2(i) (i >> 40)
#define R5TYPE_RS3(i) (i >> 48)
#define R5TYPE_RS4(i) (i >> 56)

#define X0 0
#define X1 1
#define X2 2
#define X3 3
#define X4 4
#define X5 5
#define X6 6
#define X7 7
#define X8 8
#define X9 9
#define X10 10
#define X11 11
#define X12 12
#define X13 13
#define X14 14
#define X15 15
#define X16 16
#define X17 17
#define X18 18
#define X19 19
#define X20 20
#define X21 21
#define X22 22
#define X23 23
#define X24 24
#define X25 25
#define X26 26
#define X27 27
#define X28 28
#define X29 29
#define X30 30
#define X31 31

#endif /* CKB_VM_BPFC_RISCV_H_ */