JonathanSalwan / Triton

@@ -329,14 +329,16 @@
Loading
329 329
        0,                                          /* tp_weaklist */
330 330
        0,                                          /* tp_del */
331 331
        #if IS_PY3
332 -
        0,                                          /* tp_version_tag */
333 -
        0,                                          /* tp_finalize */
334 -
        #if IS_PY3_8
335 -
        0,                                          /* tp_vectorcall */
336 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
337 -
        #endif
332 +
          0,                                        /* tp_version_tag */
333 +
          0,                                        /* tp_finalize */
334 +
          #if IS_PY3_8
335 +
            0,                                      /* tp_vectorcall */
336 +
            #if !IS_PY3_9
337 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
338 +
            #endif
339 +
          #endif
338 340
        #else
339 -
        0                                           /* tp_version_tag */
341 +
          0                                         /* tp_version_tag */
340 342
        #endif
341 343
      };
342 344

@@ -230,14 +230,16 @@
Loading
230 230
        0,                                          /* tp_weaklist */
231 231
        0,                                          /* tp_del */
232 232
        #if IS_PY3
233 -
        0,                                          /* tp_version_tag */
234 -
        0,                                          /* tp_finalize */
235 -
        #if IS_PY3_8
236 -
        0,                                          /* tp_vectorcall */
237 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
238 -
        #endif
233 +
          0,                                        /* tp_version_tag */
234 +
          0,                                        /* tp_finalize */
235 +
          #if IS_PY3_8
236 +
            0,                                      /* tp_vectorcall */
237 +
            #if !IS_PY3_9
238 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
239 +
            #endif
240 +
          #endif
239 241
        #else
240 -
        0                                           /* tp_version_tag */
242 +
          0                                         /* tp_version_tag */
241 243
        #endif
242 244
      };
243 245

@@ -3257,14 +3257,16 @@
Loading
3257 3257
        0,                                          /* tp_weaklist */
3258 3258
        0,                                          /* tp_del */
3259 3259
        #if IS_PY3
3260 -
        0,                                          /* tp_version_tag */
3261 -
        0,                                          /* tp_finalize */
3262 -
        #if IS_PY3_8
3263 -
        0,                                          /* tp_vectorcall */
3264 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
3265 -
        #endif
3260 +
          0,                                        /* tp_version_tag */
3261 +
          0,                                        /* tp_finalize */
3262 +
          #if IS_PY3_8
3263 +
            0,                                      /* tp_vectorcall */
3264 +
            #if !IS_PY3_9
3265 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
3266 +
            #endif
3267 +
          #endif
3266 3268
        #else
3267 -
        0                                           /* tp_version_tag */
3269 +
          0                                         /* tp_version_tag */
3268 3270
        #endif
3269 3271
      };
3270 3272

@@ -315,14 +315,16 @@
Loading
315 315
        0,                                          /* tp_weaklist */
316 316
        0,                                          /* tp_del */
317 317
        #if IS_PY3
318 -
        0,                                          /* tp_version_tag */
319 -
        0,                                          /* tp_finalize */
320 -
        #if IS_PY3_8
321 -
        0,                                          /* tp_vectorcall */
322 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
323 -
        #endif
318 +
          0,                                        /* tp_version_tag */
319 +
          0,                                        /* tp_finalize */
320 +
          #if IS_PY3_8
321 +
            0,                                      /* tp_vectorcall */
322 +
            #if !IS_PY3_9
323 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
324 +
            #endif
325 +
          #endif
324 326
        #else
325 -
        0                                           /* tp_version_tag */
327 +
          0                                         /* tp_version_tag */
326 328
        #endif
327 329
      };
328 330

@@ -202,14 +202,16 @@
Loading
202 202
        0,                                          /* tp_weaklist */
203 203
        0,                                          /* tp_del */
204 204
        #if IS_PY3
205 -
        0,                                          /* tp_version_tag */
206 -
        0,                                          /* tp_finalize */
207 -
        #if IS_PY3_8
208 -
        0,                                          /* tp_vectorcall */
209 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
210 -
        #endif
205 +
          0,                                        /* tp_version_tag */
206 +
          0,                                        /* tp_finalize */
207 +
          #if IS_PY3_8
208 +
            0,                                      /* tp_vectorcall */
209 +
            #if !IS_PY3_9
210 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
211 +
            #endif
212 +
          #endif
211 213
        #else
212 -
        0                                           /* tp_version_tag */
214 +
          0                                         /* tp_version_tag */
213 215
        #endif
214 216
      };
215 217

@@ -46,17 +46,17 @@
Loading
46 46
>>> for expr in inst.getSymbolicExpressions():
47 47
...     print(expr)
48 48
...
49 -
(define-fun ref!0 () (_ BitVec 64) (bvxor (_ bv12345 64) (_ bv67890 64))) ; XOR operation
50 -
(define-fun ref!1 () (_ BitVec 1) (_ bv0 1)) ; Clears carry flag
51 -
(define-fun ref!2 () (_ BitVec 1) (_ bv0 1)) ; Clears overflow flag
52 -
(define-fun ref!3 () (_ BitVec 1) (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (_ bv1 1) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv0 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv1 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv2 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv3 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv4 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv5 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv6 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv7 8))))) ; Parity flag
53 -
(define-fun ref!4 () (_ BitVec 1) ((_ extract 63 63) ref!0)) ; Sign flag
54 -
(define-fun ref!5 () (_ BitVec 1) (ite (= ref!0 (_ bv0 64)) (_ bv1 1) (_ bv0 1))) ; Zero flag
55 -
(define-fun ref!6 () (_ BitVec 64) (_ bv4194307 64)) ; Program Counter
49 +
(define-fun ref!0 () (_ BitVec 64) (bvxor (_ bv12345 64) (_ bv67890 64))) ; XOR operation - 0x400000: xor rax, rdx
50 +
(define-fun ref!1 () (_ BitVec 1) (_ bv0 1)) ; Clears carry flag - 0x400000: xor rax, rdx
51 +
(define-fun ref!2 () (_ BitVec 1) (_ bv0 1)) ; Clears overflow flag - 0x400000: xor rax, rdx
52 +
(define-fun ref!3 () (_ BitVec 1) (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (bvxor (_ bv1 1) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv0 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv1 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv2 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv3 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv4 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv5 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv6 8)))) ((_ extract 0 0) (bvlshr ((_ extract 7 0) ref!0) (_ bv7 8))))) ; Parity flag - 0x400000: xor rax, rdx
53 +
(define-fun ref!4 () (_ BitVec 1) ((_ extract 63 63) ref!0)) ; Sign flag - 0x400000: xor rax, rdx
54 +
(define-fun ref!5 () (_ BitVec 1) (ite (= ref!0 (_ bv0 64)) (_ bv1 1) (_ bv0 1))) ; Zero flag - 0x400000: xor rax, rdx
55 +
(define-fun ref!6 () (_ BitVec 64) (_ bv4194307 64)) ; Program Counter - 0x400000: xor rax, rdx
56 56
57 57
>>> expr_1 = inst.getSymbolicExpressions()[0]
58 58
>>> print(expr_1)
59 -
(define-fun ref!0 () (_ BitVec 64) (bvxor (_ bv12345 64) (_ bv67890 64))) ; XOR operation
59 +
(define-fun ref!0 () (_ BitVec 64) (bvxor (_ bv12345 64) (_ bv67890 64))) ; XOR operation - 0x400000: xor rax, rdx
60 60
61 61
>>> print(expr_1.getId())
62 62
0
@@ -379,14 +379,16 @@
Loading
379 379
        0,                                          /* tp_weaklist */
380 380
        0,                                          /* tp_del */
381 381
        #if IS_PY3
382 -
        0,                                          /* tp_version_tag */
383 -
        0,                                          /* tp_finalize */
384 -
        #if IS_PY3_8
385 -
        0,                                          /* tp_vectorcall */
386 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
387 -
        #endif
382 +
          0,                                        /* tp_version_tag */
383 +
          0,                                        /* tp_finalize */
384 +
          #if IS_PY3_8
385 +
            0,                                      /* tp_vectorcall */
386 +
            #if !IS_PY3_9
387 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
388 +
            #endif
389 +
          #endif
388 390
        #else
389 -
        0                                           /* tp_version_tag */
391 +
          0                                         /* tp_version_tag */
390 392
        #endif
391 393
      };
392 394

@@ -1767,14 +1767,16 @@
Loading
1767 1767
        0,                                          /* tp_weaklist */
1768 1768
        0,                                          /* tp_del */
1769 1769
        #if IS_PY3
1770 -
        0,                                          /* tp_version_tag */
1771 -
        0,                                          /* tp_finalize */
1772 -
        #if IS_PY3_8
1773 -
        0,                                          /* tp_vectorcall */
1774 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
1775 -
        #endif
1770 +
          0,                                        /* tp_version_tag */
1771 +
          0,                                        /* tp_finalize */
1772 +
          #if IS_PY3_8
1773 +
            0,                                      /* tp_vectorcall */
1774 +
            #if !IS_PY3_9
1775 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
1776 +
            #endif
1777 +
          #endif
1776 1778
        #else
1777 -
        0                                           /* tp_version_tag */
1779 +
          0                                         /* tp_version_tag */
1778 1780
        #endif
1779 1781
      };
1780 1782

@@ -420,14 +420,16 @@
Loading
420 420
        0,                                          /* tp_weaklist */
421 421
        0,                                          /* tp_del */
422 422
        #if IS_PY3
423 -
        0,                                          /* tp_version_tag */
424 -
        0,                                          /* tp_finalize */
425 -
        #if IS_PY3_8
426 -
        0,                                          /* tp_vectorcall */
427 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
428 -
        #endif
423 +
          0,                                        /* tp_version_tag */
424 +
          0,                                        /* tp_finalize */
425 +
          #if IS_PY3_8
426 +
            0,                                      /* tp_vectorcall */
427 +
            #if !IS_PY3_9
428 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
429 +
            #endif
430 +
          #endif
429 431
        #else
430 -
        0                                           /* tp_version_tag */
432 +
          0                                         /* tp_version_tag */
431 433
        #endif
432 434
      };
433 435

@@ -953,14 +953,16 @@
Loading
953 953
        0,                                          /* tp_weaklist */
954 954
        0,                                          /* tp_del */
955 955
        #if IS_PY3
956 -
        0,                                          /* tp_version_tag */
957 -
        0,                                          /* tp_finalize */
958 -
        #if IS_PY3_8
959 -
        0,                                          /* tp_vectorcall */
960 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
961 -
        #endif
956 +
          0,                                        /* tp_version_tag */
957 +
          0,                                        /* tp_finalize */
958 +
          #if IS_PY3_8
959 +
            0,                                      /* tp_vectorcall */
960 +
            #if !IS_PY3_9
961 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
962 +
            #endif
963 +
          #endif
962 964
        #else
963 -
        0                                           /* tp_version_tag */
965 +
          0                                         /* tp_version_tag */
964 966
        #endif
965 967
      };
966 968

@@ -481,14 +481,16 @@
Loading
481 481
        0,                                          /* tp_weaklist */
482 482
        0,                                          /* tp_del */
483 483
        #if IS_PY3
484 -
        0,                                          /* tp_version_tag */
485 -
        0,                                          /* tp_finalize */
486 -
        #if IS_PY3_8
487 -
        0,                                          /* tp_vectorcall */
488 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
489 -
        #endif
484 +
          0,                                        /* tp_version_tag */
485 +
          0,                                        /* tp_finalize */
486 +
          #if IS_PY3_8
487 +
            0,                                      /* tp_vectorcall */
488 +
            #if !IS_PY3_9
489 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
490 +
            #endif
491 +
          #endif
490 492
        #else
491 -
        0                                           /* tp_version_tag */
493 +
          0                                         /* tp_version_tag */
492 494
        #endif
493 495
      };
494 496

@@ -59,6 +59,7 @@
Loading
59 59
- \ref py_PREFIX_page
60 60
- \ref py_REG_page
61 61
- \ref py_SHIFT_page
62 +
- \ref py_SOLVER_page
62 63
- \ref py_SYMBOLIC_page
63 64
- \ref py_SYSCALL_page
64 65
- \ref py_VERSION_page

@@ -790,28 +790,28 @@
Loading
790 790
791 791
        switch (extend.getExtendType()) {
792 792
          case triton::arch::arm::ID_EXTEND_UXTB:
793 -
            return this->astCtxt->zx(size, this->astCtxt->extract(7, 0, node));
793 +
            return this->astCtxt->zx(size, this->astCtxt->bvshl(this->astCtxt->extract(7, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 8)));
794 794
795 795
          case triton::arch::arm::ID_EXTEND_UXTH:
796 -
            return this->astCtxt->zx(size, this->astCtxt->extract(15, 0, node));
796 +
            return this->astCtxt->zx(size, this->astCtxt->bvshl(this->astCtxt->extract(15, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 16)));
797 797
798 798
          case triton::arch::arm::ID_EXTEND_UXTW:
799 -
            return this->astCtxt->zx(size, this->astCtxt->extract(31, 0, node));
799 +
            return this->astCtxt->zx(size, this->astCtxt->bvshl(this->astCtxt->extract(31, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 32)));
800 800
801 801
          case triton::arch::arm::ID_EXTEND_UXTX:
802 -
            return this->astCtxt->zx(size, this->astCtxt->extract(63, 0, node));
802 +
            return this->astCtxt->zx(size, this->astCtxt->bvshl(this->astCtxt->extract(63, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 64)));
803 803
804 804
          case triton::arch::arm::ID_EXTEND_SXTB:
805 -
            return this->astCtxt->sx(size, this->astCtxt->extract(7, 0, node));
805 +
            return this->astCtxt->sx(size, this->astCtxt->bvshl(this->astCtxt->extract(7, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 8)));
806 806
807 807
          case triton::arch::arm::ID_EXTEND_SXTH:
808 -
            return this->astCtxt->sx(size, this->astCtxt->extract(15, 0, node));
808 +
            return this->astCtxt->sx(size, this->astCtxt->bvshl(this->astCtxt->extract(15, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 16)));
809 809
810 810
          case triton::arch::arm::ID_EXTEND_SXTW:
811 -
            return this->astCtxt->sx(size, this->astCtxt->extract(31, 0, node));
811 +
            return this->astCtxt->sx(size, this->astCtxt->bvshl(this->astCtxt->extract(31, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 32)));
812 812
813 813
          case triton::arch::arm::ID_EXTEND_SXTX:
814 -
            return this->astCtxt->sx(size, this->astCtxt->extract(63, 0, node));
814 +
            return this->astCtxt->sx(size, this->astCtxt->bvshl(this->astCtxt->extract(63, 0, node), this->astCtxt->bv(extend.getShiftImmediate(), 64)));
815 815
816 816
          default:
817 817
            throw triton::exceptions::SymbolicEngine("SymbolicEngine::getExtendAst(): Invalid extend operand.");
@@ -947,9 +947,12 @@
Loading
947 947
        triton::uint64 address              = mem.getAddress();
948 948
        triton::uint32 writeSize            = mem.getSize();
949 949
950 +
        std::stringstream s;
951 +
        s << comment << (comment.empty() ? "" : " - ") << inst;
952 +
950 953
        /* Record the aligned memory for a symbolic optimization */
951 954
        if (this->modes->isModeEnabled(triton::modes::ALIGNED_MEMORY)) {
952 -
          const SharedSymbolicExpression& aligned = this->newSymbolicExpression(node, MEMORY_EXPRESSION, "Aligned Byte reference - " + comment);
955 +
          const SharedSymbolicExpression& aligned = this->newSymbolicExpression(node, MEMORY_EXPRESSION, "Aligned Byte reference - " + s.str());
953 956
          this->addAlignedMemory(address, writeSize, aligned);
954 957
        }
955 958
@@ -964,7 +967,7 @@
Loading
964 967
          /* Extract each byte of the memory */
965 968
          tmp = this->astCtxt->extract(high, low, node);
966 969
          /* Assign each byte to a new symbolic expression */
967 -
          se = this->newSymbolicExpression(tmp, MEMORY_EXPRESSION, "Byte reference - " + comment);
970 +
          se = this->newSymbolicExpression(tmp, MEMORY_EXPRESSION, "Byte reference - " + s.str());
968 971
          /* Set the origin of the symbolic expression */
969 972
          se->setOriginMemory(triton::arch::MemoryAccess(((address + writeSize) - 1), triton::size::byte));
970 973
          /* ret is the for the final expression */
@@ -997,7 +1000,7 @@
Loading
997 1000
        /* Synchronize the concrete state */
998 1001
        this->architecture->setConcreteMemoryValue(mem, tmp->evaluate());
999 1002
1000 -
        se = this->newSymbolicExpression(tmp, MEMORY_EXPRESSION, "Temporary concatenation reference - " + comment);
1003 +
        se = this->newSymbolicExpression(tmp, MEMORY_EXPRESSION, "Temporary concatenation reference - " + s.str());
1001 1004
        se->setOriginMemory(triton::arch::MemoryAccess(address, mem.getSize()));
1002 1005
1003 1006
        return inst.addSymbolicExpression(se);
@@ -1072,7 +1075,9 @@
Loading
1072 1075
      const SharedSymbolicExpression& SymbolicEngine::createSymbolicRegisterExpression(triton::arch::Instruction& inst, const triton::ast::SharedAbstractNode& node, const triton::arch::Register& reg, const std::string& comment) {
1073 1076
        SharedSymbolicExpression se = nullptr;
1074 1077
1075 -
        se = this->newSymbolicExpression(this->insertSubRegisterInParent(reg, node), REGISTER_EXPRESSION, comment);
1078 +
        std::stringstream s;
1079 +
        s << comment << (comment.empty() ? "" : " - ") << inst;
1080 +
        se = this->newSymbolicExpression(this->insertSubRegisterInParent(reg, node), REGISTER_EXPRESSION, s.str());
1076 1081
        this->assignSymbolicExpressionToRegister(se, this->architecture->getParentRegister(reg));
1077 1082
1078 1083
        inst.setWrittenRegister(reg, node);
@@ -1082,7 +1087,9 @@
Loading
1082 1087
1083 1088
      /* Returns the new symbolic volatile expression */
1084 1089
      const SharedSymbolicExpression& SymbolicEngine::createSymbolicVolatileExpression(triton::arch::Instruction& inst, const triton::ast::SharedAbstractNode& node, const std::string& comment) {
1085 -
        const SharedSymbolicExpression& se = this->newSymbolicExpression(node, VOLATILE_EXPRESSION, comment);
1090 +
        std::stringstream s;
1091 +
        s << comment << (comment.empty() ? "" : " - ") << inst;
1092 +
        const SharedSymbolicExpression& se = this->newSymbolicExpression(node, VOLATILE_EXPRESSION, s.str());
1086 1093
        return inst.addSymbolicExpression(se);
1087 1094
      }
1088 1095

@@ -198,14 +198,16 @@
Loading
198 198
        0,                                          /* tp_weaklist */
199 199
        0,                                          /* tp_del */
200 200
        #if IS_PY3
201 -
        0,                                          /* tp_version_tag */
202 -
        0,                                          /* tp_finalize */
203 -
        #if IS_PY3_8
204 -
        0,                                          /* tp_vectorcall */
205 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
206 -
        #endif
201 +
          0,                                        /* tp_version_tag */
202 +
          0,                                        /* tp_finalize */
203 +
          #if IS_PY3_8
204 +
            0,                                      /* tp_vectorcall */
205 +
            #if !IS_PY3_9
206 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
207 +
            #endif
208 +
          #endif
207 209
        #else
208 -
        0                                           /* tp_version_tag */
210 +
          0                                         /* tp_version_tag */
209 211
        #endif
210 212
      };
211 213

@@ -806,14 +806,16 @@
Loading
806 806
        0,                                          /* tp_weaklist */
807 807
        0,                                          /* tp_del */
808 808
        #if IS_PY3
809 -
        0,                                          /* tp_version_tag */
810 -
        0,                                          /* tp_finalize */
811 -
        #if IS_PY3_8
812 -
        0,                                          /* tp_vectorcall */
813 -
        0,                                          /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
814 -
        #endif
809 +
          0,                                        /* tp_version_tag */
810 +
          0,                                        /* tp_finalize */
811 +
          #if IS_PY3_8
812 +
            0,                                      /* tp_vectorcall */
813 +
            #if !IS_PY3_9
814 +
              0,                                    /* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
815 +
            #endif
816 +
          #endif
815 817
        #else
816 -
        0                                           /* tp_version_tag */
818 +
          0                                         /* tp_version_tag */
817 819
        #endif
818 820
      };
819 821
Files Coverage
src/libtriton 83.82%
Project Totals (109 files) 83.82%
2900.3
TRAVIS_OS_NAME=linux
1
coverage:
2
  range: 70..100
3
  round: nearest
4
  precision: 2
5

6
ignore:
7
  - "**/examples/cpp" # ignore folders and all its contents
8
  - "/src/tracer"     # ignore folders and all its contents
9
  - "**/*.spec"       # glob accepted
10

11
comment: false
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file. The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files. The size and color of each slice is representing the number of statements and the coverage, respectively.
Grid
Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.
Loading