svf-lib 1.0.730 → 1.0.734
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-linux/Release-build/lib/libSvf.a +0 -0
- package/SVF-linux/include/DDA/ContextDDA.h +1 -1
- package/SVF-linux/include/DDA/DDAClient.h +8 -8
- package/SVF-linux/include/DDA/DDAVFSolver.h +6 -6
- package/SVF-linux/include/DDA/FlowDDA.h +1 -1
- package/SVF-linux/include/Graphs/ConsG.h +6 -6
- package/SVF-linux/include/Graphs/ConsGEdge.h +2 -2
- package/SVF-linux/include/Graphs/ConsGNode.h +1 -1
- package/SVF-linux/include/Graphs/ExternalPAG.h +14 -14
- package/SVF-linux/include/Graphs/ICFGNode.h +14 -14
- package/SVF-linux/include/Graphs/IRGraph.h +245 -0
- package/SVF-linux/include/Graphs/OfflineConsG.h +1 -1
- package/SVF-linux/include/Graphs/PAG.h +4 -4
- package/SVF-linux/include/Graphs/PAGNode.h +3 -3
- package/SVF-linux/include/Graphs/SVFG.h +1 -1
- package/SVF-linux/include/Graphs/SVFGOPT.h +3 -3
- package/SVF-linux/include/Graphs/VFG.h +19 -19
- package/SVF-linux/include/Graphs/VFGNode.h +2 -3
- package/SVF-linux/include/MSSA/MemRegion.h +11 -11
- package/SVF-linux/include/MSSA/MemSSA.h +4 -4
- package/SVF-linux/include/MTA/FSMPTA.h +1 -1
- package/SVF-linux/include/MemoryModel/PAGBuilderFromFile.h +8 -8
- package/SVF-linux/include/MemoryModel/PTAStat.h +31 -31
- package/SVF-linux/include/MemoryModel/PointerAnalysis.h +9 -9
- package/SVF-linux/include/MemoryModel/PointerAnalysisImpl.h +3 -3
- package/SVF-linux/include/MemoryModel/SVFIR.h +591 -233
- package/SVF-linux/include/MemoryModel/SVFStatements.h +738 -0
- package/SVF-linux/include/MemoryModel/SVFSymbols.h +648 -0
- package/SVF-linux/include/MemoryModel/SVFVariables.h +842 -0
- package/SVF-linux/include/MemoryModel/SymbolTableInfo.h +343 -40
- package/SVF-linux/include/SABER/SaberSVFGBuilder.h +0 -2
- package/SVF-linux/include/SABER/SrcSnkDDA.h +3 -3
- package/SVF-linux/include/SVF-FE/Graph2Json.h +1 -3
- package/SVF-linux/include/SVF-FE/SVFIRBuilder.h +392 -0
- package/SVF-linux/include/SVF-FE/SymbolTableBuilder.h +0 -1
- package/SVF-linux/include/Util/CFLSolver.h +1 -1
- package/SVF-linux/include/Util/ExtAPI.h +1 -1
- package/SVF-linux/include/Util/IRAnnotator.h +6 -6
- package/SVF-linux/include/Util/Options.h +1 -1
- package/SVF-linux/include/Util/TypeBasedHeapCloning.h +11 -11
- package/SVF-linux/include/WPA/Andersen.h +11 -11
- package/SVF-linux/include/WPA/AndersenSFR.h +4 -4
- package/SVF-linux/include/WPA/FlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/SVF-linux/include/WPA/Steensgaard.h +2 -2
- package/SVF-linux/include/WPA/TypeAnalysis.h +1 -1
- package/SVF-linux/include/WPA/VersionedFlowSensitive.h +2 -2
- package/SVF-linux/include/WPA/WPAStat.h +1 -2
- package/SVF-osx/Release-build/lib/CUDD/libCudd.a +0 -0
- package/SVF-osx/Release-build/lib/libSvf.a +0 -0
- package/SVF-osx/include/DDA/ContextDDA.h +1 -1
- package/SVF-osx/include/DDA/DDAClient.h +8 -8
- package/SVF-osx/include/DDA/DDAVFSolver.h +6 -6
- package/SVF-osx/include/DDA/FlowDDA.h +1 -1
- package/SVF-osx/include/Graphs/ConsG.h +6 -6
- package/SVF-osx/include/Graphs/ConsGEdge.h +2 -2
- package/SVF-osx/include/Graphs/ConsGNode.h +1 -1
- package/SVF-osx/include/Graphs/ExternalPAG.h +14 -14
- package/SVF-osx/include/Graphs/ICFGNode.h +14 -14
- package/SVF-osx/include/Graphs/IRGraph.h +245 -0
- package/SVF-osx/include/Graphs/OfflineConsG.h +1 -1
- package/SVF-osx/include/Graphs/PAG.h +4 -4
- package/SVF-osx/include/Graphs/PAGNode.h +3 -3
- package/SVF-osx/include/Graphs/SVFG.h +1 -1
- package/SVF-osx/include/Graphs/SVFGOPT.h +3 -3
- package/SVF-osx/include/Graphs/VFG.h +19 -19
- package/SVF-osx/include/Graphs/VFGNode.h +2 -3
- package/SVF-osx/include/MSSA/MemRegion.h +11 -11
- package/SVF-osx/include/MSSA/MemSSA.h +4 -4
- package/SVF-osx/include/MTA/FSMPTA.h +1 -1
- package/SVF-osx/include/MemoryModel/PAGBuilderFromFile.h +8 -8
- package/SVF-osx/include/MemoryModel/PTAStat.h +31 -31
- package/SVF-osx/include/MemoryModel/PointerAnalysis.h +9 -9
- package/SVF-osx/include/MemoryModel/PointerAnalysisImpl.h +3 -3
- package/SVF-osx/include/MemoryModel/SVFIR.h +591 -233
- package/SVF-osx/include/MemoryModel/SVFStatements.h +738 -0
- package/SVF-osx/include/MemoryModel/SVFSymbols.h +648 -0
- package/SVF-osx/include/MemoryModel/SVFVariables.h +842 -0
- package/SVF-osx/include/MemoryModel/SymbolTableInfo.h +343 -40
- package/SVF-osx/include/SABER/SaberSVFGBuilder.h +0 -2
- package/SVF-osx/include/SABER/SrcSnkDDA.h +3 -3
- package/SVF-osx/include/SVF-FE/Graph2Json.h +1 -3
- package/SVF-osx/include/SVF-FE/SVFIRBuilder.h +392 -0
- package/SVF-osx/include/SVF-FE/SymbolTableBuilder.h +0 -1
- package/SVF-osx/include/Util/CFLSolver.h +1 -1
- package/SVF-osx/include/Util/ExtAPI.h +1 -1
- package/SVF-osx/include/Util/IRAnnotator.h +6 -6
- package/SVF-osx/include/Util/Options.h +1 -1
- package/SVF-osx/include/Util/TypeBasedHeapCloning.h +11 -11
- package/SVF-osx/include/WPA/Andersen.h +11 -11
- package/SVF-osx/include/WPA/AndersenSFR.h +4 -4
- package/SVF-osx/include/WPA/FlowSensitive.h +2 -2
- package/SVF-osx/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/SVF-osx/include/WPA/Steensgaard.h +2 -2
- package/SVF-osx/include/WPA/TypeAnalysis.h +1 -1
- package/SVF-osx/include/WPA/VersionedFlowSensitive.h +2 -2
- package/SVF-osx/include/WPA/WPAStat.h +1 -2
- package/package.json +1 -1
|
@@ -30,12 +30,17 @@
|
|
|
30
30
|
#ifndef INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_
|
|
31
31
|
#define INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_
|
|
32
32
|
|
|
33
|
-
#include "MemoryModel/MemModel.h"
|
|
34
|
-
#include "Util/SVFUtil.h"
|
|
35
33
|
|
|
34
|
+
#include "Util/SVFUtil.h"
|
|
35
|
+
#include "MemoryModel/LocationSet.h"
|
|
36
|
+
#include "Util/SVFModule.h"
|
|
36
37
|
namespace SVF
|
|
37
38
|
{
|
|
38
39
|
|
|
40
|
+
class MemObj;
|
|
41
|
+
class ObjTypeInfo;
|
|
42
|
+
class StInfo;
|
|
43
|
+
|
|
39
44
|
/*!
|
|
40
45
|
* Symbol table of the memory model for analysis
|
|
41
46
|
*/
|
|
@@ -44,6 +49,20 @@ class SymbolTableInfo
|
|
|
44
49
|
friend class SymbolTableBuilder;
|
|
45
50
|
|
|
46
51
|
public:
|
|
52
|
+
|
|
53
|
+
/// Symbol types
|
|
54
|
+
enum SYMTYPE
|
|
55
|
+
{
|
|
56
|
+
BlackHole,
|
|
57
|
+
ConstantObj,
|
|
58
|
+
BlkPtr,
|
|
59
|
+
NullPtr,
|
|
60
|
+
ValSymbol,
|
|
61
|
+
ObjSymbol,
|
|
62
|
+
RetSymbol,
|
|
63
|
+
VarargSymbol
|
|
64
|
+
};
|
|
65
|
+
|
|
47
66
|
/// various maps defined
|
|
48
67
|
//{@
|
|
49
68
|
/// llvm value to sym id map
|
|
@@ -53,8 +72,6 @@ public:
|
|
|
53
72
|
typedef OrderedMap<SymID,MemObj*> IDToMemMapTy;
|
|
54
73
|
/// function to sym id map
|
|
55
74
|
typedef OrderedMap<const Function *, SymID> FunToIDMapTy;
|
|
56
|
-
/// sym id to sym type map
|
|
57
|
-
typedef OrderedMap<SymID,SYMTYPE> IDToSymTyMapTy;
|
|
58
75
|
/// struct type to struct info map
|
|
59
76
|
typedef OrderedMap<const Type*, StInfo*> TypeToFieldInfoMap;
|
|
60
77
|
typedef Set<CallSite> CallSiteSet;
|
|
@@ -69,10 +86,9 @@ private:
|
|
|
69
86
|
|
|
70
87
|
ValueToIDMapTy valSymMap; ///< map a value to its sym id
|
|
71
88
|
ValueToIDMapTy objSymMap; ///< map a obj reference to its sym id
|
|
72
|
-
IDToMemMapTy objMap; ///< map a memory sym id to its obj
|
|
73
|
-
IDToSymTyMapTy symTyMap; /// < map a sym id to its type
|
|
74
89
|
FunToIDMapTy returnSymMap; ///< return map
|
|
75
90
|
FunToIDMapTy varargSymMap; ///< vararg map
|
|
91
|
+
IDToMemMapTy objMap; ///< map a memory sym id to its obj
|
|
76
92
|
|
|
77
93
|
CallSiteSet callSiteSet;
|
|
78
94
|
|
|
@@ -192,12 +208,9 @@ public:
|
|
|
192
208
|
return (isBlkObj(id) || isConstantObj(id));
|
|
193
209
|
}
|
|
194
210
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
assert(objMap.find(symId)==objMap.end());
|
|
199
|
-
objMap[symId] = new MemObj(symId, createObjTypeInfo());;
|
|
200
|
-
}
|
|
211
|
+
MemObj* createBlkObj(SymID symId);
|
|
212
|
+
|
|
213
|
+
MemObj* createConstantObj(SymID symId);
|
|
201
214
|
|
|
202
215
|
inline MemObj* getBlkObj() const
|
|
203
216
|
{
|
|
@@ -228,14 +241,8 @@ public:
|
|
|
228
241
|
return BlackHole;
|
|
229
242
|
}
|
|
230
243
|
|
|
231
|
-
/// Can only be invoked by
|
|
232
|
-
|
|
233
|
-
{
|
|
234
|
-
assert(objMap.find(symId)==objMap.end() && "this dummy obj has been created before");
|
|
235
|
-
MemObj* memObj = new MemObj(symId, createObjTypeInfo(type));
|
|
236
|
-
objMap[symId] = memObj;
|
|
237
|
-
return memObj;
|
|
238
|
-
}
|
|
244
|
+
/// Can only be invoked by SVFIR::addDummyNode() when creaing SVFIR from file.
|
|
245
|
+
const MemObj* createDummyObj(SymID symId, const Type* type);
|
|
239
246
|
// @}
|
|
240
247
|
|
|
241
248
|
/// Get different kinds of syms
|
|
@@ -357,26 +364,11 @@ public:
|
|
|
357
364
|
}
|
|
358
365
|
|
|
359
366
|
///Get a reference to the components of struct_info.
|
|
360
|
-
const
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
const
|
|
365
|
-
{
|
|
366
|
-
return getStructInfoIter(T)->second->getFieldOffsetVec();
|
|
367
|
-
}
|
|
368
|
-
const inline std::vector<FieldInfo>& getFlattenFieldInfoVec(const Type *T)
|
|
369
|
-
{
|
|
370
|
-
return getStructInfoIter(T)->second->getFlattenFieldInfoVec();
|
|
371
|
-
}
|
|
372
|
-
const inline Type* getOrigSubTypeWithFldInx(const Type* baseType, u32_t field_idx)
|
|
373
|
-
{
|
|
374
|
-
return getStructInfoIter(baseType)->second->getFieldTypeWithFldIdx(field_idx);
|
|
375
|
-
}
|
|
376
|
-
const inline Type* getOrigSubTypeWithByteOffset(const Type* baseType, u32_t byteOffset)
|
|
377
|
-
{
|
|
378
|
-
return getStructInfoIter(baseType)->second->getFieldTypeWithByteOffset(byteOffset);
|
|
379
|
-
}
|
|
367
|
+
const std::vector<u32_t>& getFattenFieldIdxVec(const Type *T);
|
|
368
|
+
const std::vector<u32_t>& getFattenFieldOffsetVec(const Type *T);
|
|
369
|
+
const std::vector<FieldInfo>& getFlattenFieldInfoVec(const Type *T);
|
|
370
|
+
const Type* getOrigSubTypeWithFldInx(const Type* baseType, u32_t field_idx);
|
|
371
|
+
const Type* getOrigSubTypeWithByteOffset(const Type* baseType, u32_t byteOffset);
|
|
380
372
|
//@}
|
|
381
373
|
|
|
382
374
|
/// Compute gep offset
|
|
@@ -423,6 +415,317 @@ protected:
|
|
|
423
415
|
};
|
|
424
416
|
|
|
425
417
|
|
|
418
|
+
/*!
|
|
419
|
+
* Memory object symbols or MemObj (address-taken variables in LLVM-based languages)
|
|
420
|
+
*/
|
|
421
|
+
class MemObj
|
|
422
|
+
{
|
|
423
|
+
|
|
424
|
+
private:
|
|
425
|
+
/// Type information of this object
|
|
426
|
+
ObjTypeInfo* typeInfo;
|
|
427
|
+
/// The unique value of this symbol/variable
|
|
428
|
+
const Value *refVal;
|
|
429
|
+
/// The unique id to represent this symbol
|
|
430
|
+
SymID symId;
|
|
431
|
+
public:
|
|
432
|
+
|
|
433
|
+
/// Constructor
|
|
434
|
+
MemObj(SymID id, ObjTypeInfo* ti, const Value *val = nullptr);
|
|
435
|
+
|
|
436
|
+
/// Destructor
|
|
437
|
+
~MemObj()
|
|
438
|
+
{
|
|
439
|
+
destroy();
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
virtual const std::string toString() const;
|
|
443
|
+
|
|
444
|
+
/// Get the reference value to this object
|
|
445
|
+
inline const Value* getValue() const
|
|
446
|
+
{
|
|
447
|
+
return refVal;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/// Get the memory object id
|
|
451
|
+
inline SymID getId() const
|
|
452
|
+
{
|
|
453
|
+
return symId;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/// Get obj type
|
|
457
|
+
const Type* getType() const;
|
|
458
|
+
|
|
459
|
+
/// Get max field offset limit
|
|
460
|
+
Size_t getMaxFieldOffsetLimit() const;
|
|
461
|
+
|
|
462
|
+
/// Return true if its field limit is 0
|
|
463
|
+
bool isFieldInsensitive() const;
|
|
464
|
+
|
|
465
|
+
/// Set the memory object to be field insensitive
|
|
466
|
+
void setFieldInsensitive();
|
|
467
|
+
|
|
468
|
+
/// Set the memory object to be field sensitive (up to max field limit)
|
|
469
|
+
void setFieldSensitive();
|
|
470
|
+
|
|
471
|
+
/// Whether it is a black hole object
|
|
472
|
+
bool isBlackHoleObj() const;
|
|
473
|
+
|
|
474
|
+
/// object attributes methods
|
|
475
|
+
//@{
|
|
476
|
+
bool isFunction() const;
|
|
477
|
+
bool isGlobalObj() const;
|
|
478
|
+
bool isStaticObj() const;
|
|
479
|
+
bool isStack() const;
|
|
480
|
+
bool isHeap() const;
|
|
481
|
+
bool isStruct() const;
|
|
482
|
+
bool isArray() const;
|
|
483
|
+
bool isVarStruct() const;
|
|
484
|
+
bool isVarArray() const;
|
|
485
|
+
bool isConstStruct() const;
|
|
486
|
+
bool isConstArray() const;
|
|
487
|
+
bool isConstant() const;
|
|
488
|
+
bool hasPtrObj() const;
|
|
489
|
+
bool isNonPtrFieldObj(const LocationSet& ls) const;
|
|
490
|
+
//@}
|
|
491
|
+
|
|
492
|
+
/// Operator overloading
|
|
493
|
+
inline bool operator==(const MemObj &mem) const
|
|
494
|
+
{
|
|
495
|
+
return getValue() == mem.getValue();
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/// Clean up memory
|
|
499
|
+
void destroy();
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
/*!
|
|
506
|
+
* Struct information
|
|
507
|
+
*/
|
|
508
|
+
class StInfo
|
|
509
|
+
{
|
|
510
|
+
|
|
511
|
+
private:
|
|
512
|
+
/// flattened field indices of a struct
|
|
513
|
+
std::vector<u32_t> fldIdxVec;
|
|
514
|
+
/// flattened field offsets of of a struct
|
|
515
|
+
std::vector<u32_t> foffset;
|
|
516
|
+
/// Types of all fields of a struct
|
|
517
|
+
Map<u32_t, const llvm::Type*> fldIdx2TypeMap;
|
|
518
|
+
/// Types of all fields of a struct
|
|
519
|
+
Map<u32_t, const llvm::Type*> offset2TypeMap;
|
|
520
|
+
/// All field infos after flattening a struct
|
|
521
|
+
std::vector<FieldInfo> finfo;
|
|
522
|
+
|
|
523
|
+
/// Max field limit
|
|
524
|
+
static u32_t maxFieldLimit;
|
|
525
|
+
|
|
526
|
+
public:
|
|
527
|
+
/// Constructor
|
|
528
|
+
StInfo()
|
|
529
|
+
{
|
|
530
|
+
}
|
|
531
|
+
/// Destructor
|
|
532
|
+
~StInfo()
|
|
533
|
+
{
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
static inline void setMaxFieldLimit(u32_t limit)
|
|
537
|
+
{
|
|
538
|
+
maxFieldLimit = limit;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
static inline u32_t getMaxFieldLimit()
|
|
542
|
+
{
|
|
543
|
+
return maxFieldLimit;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/// Get method for fields of a struct
|
|
547
|
+
//{@
|
|
548
|
+
inline const llvm::Type* getFieldTypeWithFldIdx(u32_t fldIdx)
|
|
549
|
+
{
|
|
550
|
+
return fldIdx2TypeMap[fldIdx];
|
|
551
|
+
}
|
|
552
|
+
inline const llvm::Type* getFieldTypeWithByteOffset(u32_t offset)
|
|
553
|
+
{
|
|
554
|
+
return offset2TypeMap[offset];
|
|
555
|
+
}
|
|
556
|
+
inline std::vector<u32_t>& getFieldIdxVec()
|
|
557
|
+
{
|
|
558
|
+
return fldIdxVec;
|
|
559
|
+
}
|
|
560
|
+
inline std::vector<u32_t>& getFieldOffsetVec()
|
|
561
|
+
{
|
|
562
|
+
return foffset;
|
|
563
|
+
}
|
|
564
|
+
inline std::vector<FieldInfo>& getFlattenFieldInfoVec()
|
|
565
|
+
{
|
|
566
|
+
return finfo;
|
|
567
|
+
}
|
|
568
|
+
//@}
|
|
569
|
+
|
|
570
|
+
/// Add field (index and offset) with its corresponding type
|
|
571
|
+
inline void addFldWithType(u32_t fldIdx, u32_t offset, const llvm::Type* type)
|
|
572
|
+
{
|
|
573
|
+
fldIdxVec.push_back(fldIdx);
|
|
574
|
+
foffset.push_back(offset);
|
|
575
|
+
fldIdx2TypeMap[fldIdx] = type;
|
|
576
|
+
offset2TypeMap[offset] = type;
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
/*!
|
|
581
|
+
* Type Info of an abstract memory object
|
|
582
|
+
*/
|
|
583
|
+
class ObjTypeInfo
|
|
584
|
+
{
|
|
585
|
+
|
|
586
|
+
public:
|
|
587
|
+
typedef enum
|
|
588
|
+
{
|
|
589
|
+
FUNCTION_OBJ = 0x1, // object is a function
|
|
590
|
+
GLOBVAR_OBJ = 0x2, // object is a global variable
|
|
591
|
+
STATIC_OBJ = 0x4, // object is a static variable allocated before main
|
|
592
|
+
STACK_OBJ = 0x8, // object is a stack variable
|
|
593
|
+
HEAP_OBJ = 0x10, // object is a heap variable
|
|
594
|
+
VAR_STRUCT_OBJ = 0x20, // object contains struct
|
|
595
|
+
VAR_ARRAY_OBJ = 0x40, // object contains array
|
|
596
|
+
CONST_STRUCT_OBJ = 0x80, // constant struct
|
|
597
|
+
CONST_ARRAY_OBJ = 0x100, // constant array
|
|
598
|
+
CONST_OBJ = 0x200, // constant object str e.g.
|
|
599
|
+
HASPTR_OBJ = 0x400 // non pointer object including compound type have field that is a pointer type
|
|
600
|
+
} MEMTYPE;
|
|
601
|
+
|
|
602
|
+
private:
|
|
603
|
+
/// LLVM type
|
|
604
|
+
const Type* type;
|
|
605
|
+
/// Type flags
|
|
606
|
+
Size_t flags;
|
|
607
|
+
/// Max offset for flexible field sensitive analysis
|
|
608
|
+
/// maximum number of field object can be created
|
|
609
|
+
/// minimum number is 0 (field insensitive analysis)
|
|
610
|
+
u32_t maxOffsetLimit;
|
|
611
|
+
public:
|
|
612
|
+
|
|
613
|
+
/// Constructors
|
|
614
|
+
ObjTypeInfo(const Value*, const Type* t, u32_t max) :
|
|
615
|
+
type(t), flags(0), maxOffsetLimit(max)
|
|
616
|
+
{
|
|
617
|
+
}
|
|
618
|
+
/// Constructor
|
|
619
|
+
ObjTypeInfo(u32_t max, const Type* t) : type(t), flags(0), maxOffsetLimit(max)
|
|
620
|
+
{
|
|
621
|
+
|
|
622
|
+
}
|
|
623
|
+
/// Destructor
|
|
624
|
+
virtual ~ObjTypeInfo()
|
|
625
|
+
{
|
|
626
|
+
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/// Analyse types of heap and static objects
|
|
630
|
+
void analyzeHeapObjType(const Type* type);
|
|
631
|
+
|
|
632
|
+
/// Analyse types of heap and static objects
|
|
633
|
+
void analyzeStaticObjType(const Type* type);
|
|
634
|
+
|
|
635
|
+
/// Get LLVM type
|
|
636
|
+
inline const Type* getType() const
|
|
637
|
+
{
|
|
638
|
+
return type;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
/// Get max field offset limit
|
|
642
|
+
inline u32_t getMaxFieldOffsetLimit()
|
|
643
|
+
{
|
|
644
|
+
return maxOffsetLimit;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/// Get max field offset limit
|
|
648
|
+
inline void setMaxFieldOffsetLimit(u32_t limit)
|
|
649
|
+
{
|
|
650
|
+
maxOffsetLimit = limit;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
/// Flag for this object type
|
|
654
|
+
//@{
|
|
655
|
+
inline void setFlag(MEMTYPE mask)
|
|
656
|
+
{
|
|
657
|
+
flags |= mask;
|
|
658
|
+
}
|
|
659
|
+
inline bool hasFlag(MEMTYPE mask)
|
|
660
|
+
{
|
|
661
|
+
return (flags & mask) == mask;
|
|
662
|
+
}
|
|
663
|
+
//@}
|
|
664
|
+
|
|
665
|
+
/// Object attributes
|
|
666
|
+
//@{
|
|
667
|
+
inline bool isFunction()
|
|
668
|
+
{
|
|
669
|
+
return hasFlag(FUNCTION_OBJ);
|
|
670
|
+
}
|
|
671
|
+
inline bool isGlobalObj()
|
|
672
|
+
{
|
|
673
|
+
return hasFlag(GLOBVAR_OBJ);
|
|
674
|
+
}
|
|
675
|
+
inline bool isStaticObj()
|
|
676
|
+
{
|
|
677
|
+
return hasFlag(STATIC_OBJ);
|
|
678
|
+
}
|
|
679
|
+
inline bool isStack()
|
|
680
|
+
{
|
|
681
|
+
return hasFlag(STACK_OBJ);
|
|
682
|
+
}
|
|
683
|
+
inline bool isHeap()
|
|
684
|
+
{
|
|
685
|
+
return hasFlag(HEAP_OBJ);
|
|
686
|
+
}
|
|
687
|
+
//@}
|
|
688
|
+
|
|
689
|
+
/// Object attributes (noted that an object can be a nested compound types)
|
|
690
|
+
/// e.g. both isStruct and isArray can return true
|
|
691
|
+
//@{
|
|
692
|
+
inline bool isVarStruct()
|
|
693
|
+
{
|
|
694
|
+
return hasFlag(VAR_STRUCT_OBJ);
|
|
695
|
+
}
|
|
696
|
+
inline bool isConstStruct()
|
|
697
|
+
{
|
|
698
|
+
return hasFlag(CONST_STRUCT_OBJ);
|
|
699
|
+
}
|
|
700
|
+
inline bool isStruct()
|
|
701
|
+
{
|
|
702
|
+
return hasFlag(VAR_STRUCT_OBJ) || hasFlag(CONST_STRUCT_OBJ);
|
|
703
|
+
}
|
|
704
|
+
inline bool isVarArray()
|
|
705
|
+
{
|
|
706
|
+
return hasFlag(VAR_ARRAY_OBJ);
|
|
707
|
+
}
|
|
708
|
+
inline bool isConstArray()
|
|
709
|
+
{
|
|
710
|
+
return hasFlag(CONST_ARRAY_OBJ);
|
|
711
|
+
}
|
|
712
|
+
inline bool isArray()
|
|
713
|
+
{
|
|
714
|
+
return hasFlag(VAR_ARRAY_OBJ) || hasFlag(CONST_ARRAY_OBJ);
|
|
715
|
+
}
|
|
716
|
+
inline bool isConstant()
|
|
717
|
+
{
|
|
718
|
+
return hasFlag(CONST_OBJ);
|
|
719
|
+
}
|
|
720
|
+
inline bool hasPtrObj()
|
|
721
|
+
{
|
|
722
|
+
return hasFlag(HASPTR_OBJ);
|
|
723
|
+
}
|
|
724
|
+
virtual bool isNonPtrFieldObj(const LocationSet& ls);
|
|
725
|
+
//@}
|
|
726
|
+
};
|
|
727
|
+
|
|
728
|
+
|
|
426
729
|
} // End namespace SVF
|
|
427
730
|
|
|
428
731
|
#endif /* INCLUDE_SVF_FE_SYMBOLTABLEINFO_H_ */
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#ifndef INCLUDE_SVF_FE_GRAPH2JSON_H_
|
|
2
2
|
#define INCLUDE_SVF_FE_GRAPH2JSON_H_
|
|
3
3
|
|
|
4
|
-
#include "
|
|
5
|
-
#include "Graphs/PAGEdge.h"
|
|
6
|
-
#include "Graphs/PAGNode.h"
|
|
4
|
+
#include "MemoryModel/SVFIR.h"
|
|
7
5
|
#include "Graphs/ICFG.h"
|
|
8
6
|
#include "Graphs/ICFGNode.h"
|
|
9
7
|
#include "Graphs/ICFGEdge.h"
|