svf-lib 1.0.2100 → 1.0.2102
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/bin/ae +0 -0
- package/SVF-linux/Release-build/bin/cfl +0 -0
- package/SVF-linux/Release-build/bin/dvf +0 -0
- package/SVF-linux/Release-build/bin/llvm2svf +0 -0
- package/SVF-linux/Release-build/bin/mta +0 -0
- package/SVF-linux/Release-build/bin/saber +0 -0
- package/SVF-linux/Release-build/bin/svf-ex +0 -0
- package/SVF-linux/Release-build/bin/wpa +0 -0
- package/SVF-linux/Release-build/include/SVF-LLVM/LLVMModule.h +1 -58
- package/SVF-linux/Release-build/include/SVF-LLVM/LLVMUtil.h +10 -19
- package/SVF-linux/Release-build/include/SVFIR/SVFValue.h +0 -11
- package/SVF-linux/Release-build/include/Util/ExtAPI.h +10 -0
- package/SVF-linux/Release-build/include/Util/SVFUtil.h +1 -7
- package/SVF-linux/Release-build/lib/extapi.bc +1 -1
- package/SVF-linux/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-linux/Release-build/lib/libSvfLLVM.a +0 -0
- package/SVF-osx/Release-build/bin/ae +0 -0
- package/SVF-osx/Release-build/include/AE/Svfexe/AEDetector.h +15 -2
- package/SVF-osx/Release-build/include/AE/Svfexe/AbsExtAPI.h +147 -0
- package/SVF-osx/Release-build/include/AE/Svfexe/AbstractInterpretation.h +25 -92
- package/SVF-osx/Release-build/lib/libSvfCore.a +0 -0
- package/SVF-osx/Release-build/lib/libSvfLLVM.a +0 -0
- package/package.json +1 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -61,7 +61,7 @@ public:
|
|
|
61
61
|
typedef Map<const SVFValue*, const Value*> SVFValue2LLVMValueMap;
|
|
62
62
|
typedef Map<const Type*, SVFType*> LLVMType2SVFTypeMap;
|
|
63
63
|
typedef Map<const Type*, StInfo*> Type2TypeInfoMap;
|
|
64
|
-
typedef Map<
|
|
64
|
+
typedef Map<std::string, std::vector<std::string>> Fun2AnnoMap;
|
|
65
65
|
|
|
66
66
|
private:
|
|
67
67
|
static LLVMModuleSet* llvmModuleSet;
|
|
@@ -72,10 +72,6 @@ private:
|
|
|
72
72
|
std::vector<std::unique_ptr<Module>> owned_modules;
|
|
73
73
|
std::vector<std::reference_wrapper<Module>> modules;
|
|
74
74
|
|
|
75
|
-
/// Function declaration to function definition map
|
|
76
|
-
FunDeclToDefMapTy FunDeclToDefMap;
|
|
77
|
-
/// Function definition to function declaration map
|
|
78
|
-
FunDefToDeclsMapTy FunDefToDeclsMap;
|
|
79
75
|
/// Record some "sse_" function declarations used in other ext function definition, e.g., svf_ext_foo(), and svf_ext_foo() used in app functions
|
|
80
76
|
FunctionSetType ExtFuncsVec;
|
|
81
77
|
/// Record annotations of function in extapi.bc
|
|
@@ -253,19 +249,6 @@ public:
|
|
|
253
249
|
|
|
254
250
|
SVFOtherValue* getSVFOtherValue(const Value* ov);
|
|
255
251
|
|
|
256
|
-
/// Remove unused function in extapi.bc module
|
|
257
|
-
bool isCalledExtFunction(Function* func)
|
|
258
|
-
{
|
|
259
|
-
/// if this function func defined in extapi.bc but never used in application code (without any corresponding declared functions).
|
|
260
|
-
if (func->getParent()->getName().str() == ExtAPI::getExtAPI()->getExtBcPath()
|
|
261
|
-
&& FunDefToDeclsMap.find(func) == FunDefToDeclsMap.end()
|
|
262
|
-
&& std::find(ExtFuncsVec.begin(), ExtFuncsVec.end(), func) == ExtFuncsVec.end())
|
|
263
|
-
{
|
|
264
|
-
return true;
|
|
265
|
-
}
|
|
266
|
-
return false;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
252
|
/// Get the corresponding Function based on its name
|
|
270
253
|
inline const SVFFunction* getSVFFunction(const std::string& name)
|
|
271
254
|
{
|
|
@@ -283,45 +266,6 @@ public:
|
|
|
283
266
|
return nullptr;
|
|
284
267
|
}
|
|
285
268
|
|
|
286
|
-
bool hasDefinition(const Function* fun) const
|
|
287
|
-
{
|
|
288
|
-
assert(fun->isDeclaration() && "not a function declaration?");
|
|
289
|
-
FunDeclToDefMapTy::const_iterator it = FunDeclToDefMap.find(fun);
|
|
290
|
-
return it != FunDeclToDefMap.end();
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
const Function* getDefinition(const Function* fun) const
|
|
294
|
-
{
|
|
295
|
-
assert(fun->isDeclaration() && "not a function declaration?");
|
|
296
|
-
FunDeclToDefMapTy::const_iterator it = FunDeclToDefMap.find(fun);
|
|
297
|
-
assert(it != FunDeclToDefMap.end() && "has no definition?");
|
|
298
|
-
return it->second;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
bool hasDeclaration(const Function* fun) const
|
|
302
|
-
{
|
|
303
|
-
if(fun->isDeclaration() && !hasDefinition(fun))
|
|
304
|
-
return false;
|
|
305
|
-
|
|
306
|
-
const Function* funDef = fun;
|
|
307
|
-
if(fun->isDeclaration() && hasDefinition(fun))
|
|
308
|
-
funDef = getDefinition(fun);
|
|
309
|
-
|
|
310
|
-
FunDefToDeclsMapTy::const_iterator it = FunDefToDeclsMap.find(funDef);
|
|
311
|
-
return it != FunDefToDeclsMap.end();
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
const FunctionSetType& getDeclaration(const Function* fun) const
|
|
315
|
-
{
|
|
316
|
-
const Function* funDef = fun;
|
|
317
|
-
if(fun->isDeclaration() && hasDefinition(fun))
|
|
318
|
-
funDef = getDefinition(fun);
|
|
319
|
-
|
|
320
|
-
FunDefToDeclsMapTy::const_iterator it = FunDefToDeclsMap.find(funDef);
|
|
321
|
-
assert(it != FunDefToDeclsMap.end() && "does not have a function definition (body)?");
|
|
322
|
-
return it->second;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
269
|
/// Global to rep
|
|
326
270
|
bool hasGlobalRep(const GlobalVariable* val) const
|
|
327
271
|
{
|
|
@@ -400,7 +344,6 @@ private:
|
|
|
400
344
|
void prePassSchedule();
|
|
401
345
|
void buildSymbolTable() const;
|
|
402
346
|
void collectExtFunAnnotations(const Module* mod);
|
|
403
|
-
void removeUnusedExtAPIs();
|
|
404
347
|
};
|
|
405
348
|
|
|
406
349
|
} // End namespace SVF
|
|
@@ -52,8 +52,6 @@ inline bool isCallSite(const Value* val)
|
|
|
52
52
|
return SVFUtil::isa<CallBase>(val);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
/// Get the definition of a function across multiple modules
|
|
56
|
-
const Function* getDefFunForMultipleModule(const Function* fun);
|
|
57
55
|
|
|
58
56
|
/// Return LLVM callsite given a value
|
|
59
57
|
inline const CallBase* getLLVMCallSite(const Value* value)
|
|
@@ -65,8 +63,7 @@ inline const CallBase* getLLVMCallSite(const Value* value)
|
|
|
65
63
|
inline const Function* getCallee(const CallBase* cs)
|
|
66
64
|
{
|
|
67
65
|
// FIXME: do we need to strip-off the casts here to discover more library functions
|
|
68
|
-
|
|
69
|
-
return callee ? getDefFunForMultipleModule(callee) : nullptr;
|
|
66
|
+
return SVFUtil::dyn_cast<Function>(cs->getCalledOperand()->stripPointerCasts());
|
|
70
67
|
}
|
|
71
68
|
|
|
72
69
|
/// Return LLVM function if this value is
|
|
@@ -291,9 +288,6 @@ inline static DataLayout* getDataLayout(Module* mod)
|
|
|
291
288
|
void getNextInsts(const Instruction* curInst,
|
|
292
289
|
std::vector<const Instruction*>& instList);
|
|
293
290
|
|
|
294
|
-
/// Get the previous instructions following control flow
|
|
295
|
-
void getPrevInsts(const Instruction* curInst,
|
|
296
|
-
std::vector<const Instruction*>& instList);
|
|
297
291
|
|
|
298
292
|
/// Basic block does not have predecessors
|
|
299
293
|
/// map-1.cpp.bc
|
|
@@ -306,9 +300,6 @@ inline bool isNoPrecessorBasicBlock(const BasicBlock* bb)
|
|
|
306
300
|
pred_empty(bb);
|
|
307
301
|
}
|
|
308
302
|
|
|
309
|
-
/// Get num of BB's predecessors
|
|
310
|
-
u32_t getBBPredecessorNum(const BasicBlock* BB);
|
|
311
|
-
|
|
312
303
|
/// Check whether a file is an LLVM IR file
|
|
313
304
|
bool isIRFile(const std::string& filename);
|
|
314
305
|
|
|
@@ -316,10 +307,6 @@ bool isIRFile(const std::string& filename);
|
|
|
316
307
|
void processArguments(int argc, char** argv, int& arg_num, char** arg_value,
|
|
317
308
|
std::vector<std::string>& moduleNameVec);
|
|
318
309
|
|
|
319
|
-
/// Helper method to get the size of the type from target data layout
|
|
320
|
-
//@{
|
|
321
|
-
u32_t getTypeSizeInBytes(const Type* type);
|
|
322
|
-
u32_t getTypeSizeInBytes(const StructType* sty, u32_t field_index);
|
|
323
310
|
//@}
|
|
324
311
|
|
|
325
312
|
const std::string getSourceLoc(const Value* val);
|
|
@@ -330,11 +317,6 @@ bool isIntrinsicFun(const Function* func);
|
|
|
330
317
|
|
|
331
318
|
/// Get all called funcions in a parent function
|
|
332
319
|
std::vector<const Function *> getCalledFunctions(const Function *F);
|
|
333
|
-
void removeFunAnnotations(Set<Function*>& removedFuncList);
|
|
334
|
-
bool isUnusedGlobalVariable(const GlobalVariable& global);
|
|
335
|
-
void removeUnusedGlobalVariables(Module* module);
|
|
336
|
-
/// Delete unused functions, annotations and global variables in extapi.bc
|
|
337
|
-
void removeUnusedFuncsAndAnnotationsAndGlobalVariables(Set<Function*> removedFuncList);
|
|
338
320
|
// Converts a mangled name to C naming style to match functions in extapi.c.
|
|
339
321
|
std::string restoreFuncName(std::string funcName);
|
|
340
322
|
|
|
@@ -369,6 +351,15 @@ std::string dumpType(const Type* type);
|
|
|
369
351
|
|
|
370
352
|
std::string dumpValueAndDbgInfo(const Value* val);
|
|
371
353
|
|
|
354
|
+
bool isHeapAllocExtCallViaRet(const Instruction *inst);
|
|
355
|
+
|
|
356
|
+
bool isHeapAllocExtCallViaArg(const Instruction *inst);
|
|
357
|
+
|
|
358
|
+
inline bool isHeapAllocExtCall(const Instruction *inst)
|
|
359
|
+
{
|
|
360
|
+
return isHeapAllocExtCallViaRet(inst) || isHeapAllocExtCallViaArg(inst);
|
|
361
|
+
}
|
|
362
|
+
|
|
372
363
|
} // End namespace LLVMUtil
|
|
373
364
|
|
|
374
365
|
} // End namespace SVF
|
|
@@ -319,7 +319,6 @@ private:
|
|
|
319
319
|
const SVFFunction* realDefFun; /// the definition of a function across multiple modules
|
|
320
320
|
std::vector<const SVFBasicBlock*> allBBs; /// all BasicBlocks of this function
|
|
321
321
|
std::vector<const SVFArgument*> allArgs; /// all formal arguments of this function
|
|
322
|
-
std::vector<std::string> annotations; /// annotations of this function
|
|
323
322
|
SVFBasicBlock *exitBlock; /// a 'single' basic block having no successors and containing return instruction in a function
|
|
324
323
|
|
|
325
324
|
protected:
|
|
@@ -463,16 +462,6 @@ public:
|
|
|
463
462
|
return !isNotRet;
|
|
464
463
|
}
|
|
465
464
|
|
|
466
|
-
inline const std::vector<std::string>& getAnnotations() const
|
|
467
|
-
{
|
|
468
|
-
return annotations;
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
inline void setAnnotations(std::vector<std::string>& annotations)
|
|
472
|
-
{
|
|
473
|
-
this->annotations = annotations;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
465
|
inline void getExitBlocksOfLoop(const SVFBasicBlock* bb, BBList& exitbbs) const
|
|
477
466
|
{
|
|
478
467
|
return loopAndDom->getExitBlocksOfLoop(bb,exitbbs);
|
|
@@ -43,10 +43,14 @@ namespace SVF
|
|
|
43
43
|
|
|
44
44
|
class ExtAPI
|
|
45
45
|
{
|
|
46
|
+
friend class LLVMModuleSet;
|
|
46
47
|
private:
|
|
47
48
|
|
|
48
49
|
static ExtAPI *extOp;
|
|
49
50
|
|
|
51
|
+
// Map SVFFunction to its annotations
|
|
52
|
+
Map<const SVFFunction*, std::vector<std::string>> func2Annotations;
|
|
53
|
+
|
|
50
54
|
// extapi.bc file path
|
|
51
55
|
static std::string extBcPath;
|
|
52
56
|
|
|
@@ -67,6 +71,8 @@ public:
|
|
|
67
71
|
// Get the annotation of (F)
|
|
68
72
|
std::string getExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation);
|
|
69
73
|
|
|
74
|
+
const std::vector<std::string>& getExtFuncAnnotations(const SVFFunction* fun);
|
|
75
|
+
|
|
70
76
|
// Does (F) have some annotation?
|
|
71
77
|
bool hasExtFuncAnnotation(const SVFFunction* fun, const std::string& funcAnnotation);
|
|
72
78
|
|
|
@@ -94,6 +100,10 @@ public:
|
|
|
94
100
|
// Should (F) be considered "external" (either not defined in the program
|
|
95
101
|
// or a user-defined version of a known alloc or no-op)?
|
|
96
102
|
bool is_ext(const SVFFunction *F);
|
|
103
|
+
|
|
104
|
+
private:
|
|
105
|
+
// Set the annotation of (F)
|
|
106
|
+
void setExtFuncAnnotations(const SVFFunction* fun, const std::vector<std::string>& funcAnnotations);
|
|
97
107
|
};
|
|
98
108
|
} // End namespace SVF
|
|
99
109
|
|
|
@@ -391,19 +391,13 @@ bool isExtCall(const ICFGNode* node);
|
|
|
391
391
|
|
|
392
392
|
bool isHeapAllocExtCallViaArg(const CallICFGNode* cs);
|
|
393
393
|
|
|
394
|
-
bool isHeapAllocExtCallViaArg(const SVFInstruction *inst);
|
|
395
|
-
|
|
396
|
-
bool isHeapAllocExtCallViaRet(const SVFInstruction *inst);
|
|
397
394
|
|
|
398
395
|
/// interfaces to be used externally
|
|
399
396
|
bool isHeapAllocExtCallViaRet(const CallICFGNode* cs);
|
|
400
397
|
|
|
401
398
|
bool isHeapAllocExtCall(const ICFGNode* cs);
|
|
402
399
|
|
|
403
|
-
|
|
404
|
-
{
|
|
405
|
-
return isHeapAllocExtCallViaRet(inst) || isHeapAllocExtCallViaArg(inst);
|
|
406
|
-
}
|
|
400
|
+
|
|
407
401
|
|
|
408
402
|
//@}
|
|
409
403
|
|
|
@@ -20,7 +20,7 @@ target triple = "x86_64-unknown-linux-gnu"
|
|
|
20
20
|
@.str.14 = private unnamed_addr constant [7 x i8] c"STRCPY\00", section "llvm.metadata"
|
|
21
21
|
@.str.15 = private unnamed_addr constant [7 x i8] c"STRCAT\00", section "llvm.metadata"
|
|
22
22
|
@.str.16 = private unnamed_addr constant [10 x i8] c"OVERWRITE\00", section "llvm.metadata"
|
|
23
|
-
@llvm.global.annotations = appending global [216 x { ptr, ptr, ptr, i32, ptr }] [{ ptr, ptr, ptr, i32, ptr } { ptr @malloc, ptr @.str, ptr @.str.1, i32 19, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @malloc, ptr @.str.2, ptr @.str.1, i32 19, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen, ptr @.str, ptr @.str.1, i32 25, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen, ptr @.str.3, ptr @.str.1, i32 25, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen64, ptr @.str, ptr @.str.1, i32 31, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen64, ptr @.str.3, ptr @.str.1, i32 31, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fdopen, ptr @.str, ptr @.str.1, i32 37, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fdopen, ptr @.str.3, ptr @.str.1, i32 37, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir64, ptr @.str, ptr @.str.1, i32 43, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir64, ptr @.str.3, ptr @.str.1, i32 43, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid64, ptr @.str, ptr @.str.1, i32 49, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid64, ptr @.str.3, ptr @.str.1, i32 49, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @calloc, ptr @.str, ptr @.str.1, i32 55, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @calloc, ptr @.str.4, ptr @.str.1, i32 55, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @zmalloc, ptr @.str, ptr @.str.1, i32 61, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @zmalloc, ptr @.str.2, ptr @.str.1, i32 61, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzdopen, ptr @.str, ptr @.str.1, i32 67, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzdopen, ptr @.str.3, ptr @.str.1, i32 67, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv_open, ptr @.str, ptr @.str.1, i32 73, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv_open, ptr @.str.3, ptr @.str.1, i32 73, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc, ptr @.str, ptr @.str.1, i32 79, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc, ptr @.str.2, ptr @.str.1, i32 79, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc_clear, ptr @.str, ptr @.str.1, i32 85, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc_clear, ptr @.str.2, ptr @.str.1, i32 85, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nhalloc, ptr @.str, ptr @.str.1, i32 91, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nhalloc, ptr @.str.3, ptr @.str.1, i32 91, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @oballoc, ptr @.str, ptr @.str.1, i32 97, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @oballoc, ptr @.str.2, ptr @.str.1, i32 97, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @popen, ptr @.str, ptr @.str.1, i32 103, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @popen, ptr @.str.3, ptr @.str.1, i32 103, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @pthread_getspecific, ptr @.str, ptr @.str.1, i32 109, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @pthread_getspecific, ptr @.str.3, ptr @.str.1, i32 109, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir, ptr @.str, ptr @.str.1, i32 115, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir, ptr @.str.3, ptr @.str.1, i32 115, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_calloc, ptr @.str, ptr @.str.1, i32 121, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_calloc, ptr @.str.4, ptr @.str.1, i32 121, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_malloc, ptr @.str, ptr @.str.1, i32 127, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_malloc, ptr @.str.2, ptr @.str.1, i32 127, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safecalloc, ptr @.str, ptr @.str.1, i32 133, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safecalloc, ptr @.str.4, ptr @.str.1, i32 133, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safemalloc, ptr @.str, ptr @.str.1, i32 139, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safemalloc, ptr @.str.2, ptr @.str.1, i32 139, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @setmntent, ptr @.str, ptr @.str.1, i32 145, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @setmntent, ptr @.str.3, ptr @.str.1, i32 145, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @shmat, ptr @.str, ptr @.str.1, i32 151, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @shmat, ptr @.str.3, ptr @.str.1, i32 151, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__sysv_signal, ptr @.str, ptr @.str.1, i32 157, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__sysv_signal, ptr @.str.3, ptr @.str.1, i32 157, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @signal, ptr @.str, ptr @.str.1, i32 163, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @signal, ptr @.str.3, ptr @.str.1, i32 163, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tempnam, ptr @.str, ptr @.str.1, i32 169, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tempnam, ptr @.str.3, ptr @.str.1, i32 169, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid, ptr @.str, ptr @.str.1, i32 175, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid, ptr @.str.3, ptr @.str.1, i32 175, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xcalloc, ptr @.str, ptr @.str.1, i32 181, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xcalloc, ptr @.str.3, ptr @.str.1, i32 181, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xmalloc, ptr @.str, ptr @.str.1, i32 187, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xmalloc, ptr @.str.2, ptr @.str.1, i32 187, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znam, ptr @.str, ptr @.str.1, i32 193, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znam, ptr @.str.2, ptr @.str.1, i32 193, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znaj, ptr @.str, ptr @.str.1, i32 199, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znaj, ptr @.str.2, ptr @.str.1, i32 199, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwj, ptr @.str, ptr @.str.1, i32 205, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwj, ptr @.str.2, ptr @.str.1, i32 205, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__cxa_allocate_exception, ptr @.str, ptr @.str.1, i32 211, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__cxa_allocate_exception, ptr @.str.2, ptr @.str.1, i32 211, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @aligned_alloc, ptr @.str, ptr @.str.1, i32 217, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @aligned_alloc, ptr @.str.5, ptr @.str.1, i32 217, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memalign, ptr @.str, ptr @.str.1, i32 223, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memalign, ptr @.str.5, ptr @.str.1, i32 223, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @valloc, ptr @.str, ptr @.str.1, i32 229, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @valloc, ptr @.str.2, ptr @.str.1, i32 229, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap64, ptr @.str, ptr @.str.1, i32 235, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap64, ptr @.str.5, ptr @.str.1, i32 235, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XSetLocaleModifiers, ptr @.str, ptr @.str.1, i32 241, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XSetLocaleModifiers, ptr @.str.3, ptr @.str.1, i32 241, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strdup, ptr @.str, ptr @.str.1, i32 247, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strdup, ptr @.str.3, ptr @.str.1, i32 247, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @crypt, ptr @.str, ptr @.str.1, i32 253, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @crypt, ptr @.str.3, ptr @.str.1, i32 253, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ctime, ptr @.str, ptr @.str.1, i32 259, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ctime, ptr @.str.3, ptr @.str.1, i32 259, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlerror, ptr @.str, ptr @.str.1, i32 265, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlerror, ptr @.str.3, ptr @.str.1, i32 265, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlopen, ptr @.str, ptr @.str.1, i32 271, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlopen, ptr @.str.3, ptr @.str.1, i32 271, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gai_strerror, ptr @.str, ptr @.str.1, i32 277, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gai_strerror, ptr @.str.3, ptr @.str.1, i32 277, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gcry_cipher_algo_name, ptr @.str, ptr @.str.1, i32 283, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gcry_cipher_algo_name, ptr @.str.3, ptr @.str.1, i32 283, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @svfgcry_md_algo_name_, ptr @.str, ptr @.str.1, i32 289, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @svfgcry_md_algo_name_, ptr @.str.3, ptr @.str.1, i32 289, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getenv, ptr @.str, ptr @.str.1, i32 295, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getenv, ptr @.str.3, ptr @.str.1, i32 295, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getlogin, ptr @.str, ptr @.str.1, i32 301, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getlogin, ptr @.str.3, ptr @.str.1, i32 301, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getpass, ptr @.str, ptr @.str.1, i32 307, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getpass, ptr @.str.3, ptr @.str.1, i32 307, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_strerror, ptr @.str, ptr @.str.1, i32 313, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_strerror, ptr @.str.3, ptr @.str.1, i32 313, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gpg_strerror, ptr @.str, ptr @.str.1, i32 319, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gpg_strerror, ptr @.str.3, ptr @.str.1, i32 319, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzerror, ptr @.str, ptr @.str.1, i32 325, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzerror, ptr @.str.3, ptr @.str.1, i32 325, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @inet_ntoa, ptr @.str, ptr @.str.1, i32 331, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @inet_ntoa, ptr @.str.3, ptr @.str.1, i32 331, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @initscr, ptr @.str, ptr @.str.1, i32 337, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @initscr, ptr @.str.3, ptr @.str.1, i32 337, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_stacksave, ptr @.str, ptr @.str.1, i32 343, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_stacksave, ptr @.str.3, ptr @.str.1, i32 343, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap, ptr @.str, ptr @.str.1, i32 349, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap, ptr @.str.5, ptr @.str.1, i32 349, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @newwin, ptr @.str, ptr @.str.1, i32 355, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @newwin, ptr @.str.3, ptr @.str.1, i32 355, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nl_langinfo, ptr @.str, ptr @.str.1, i32 361, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nl_langinfo, ptr @.str.3, ptr @.str.1, i32 361, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @opendir, ptr @.str, ptr @.str.1, i32 367, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @opendir, ptr @.str.3, ptr @.str.1, i32 367, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @sbrk, ptr @.str, ptr @.str.1, i32 373, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @sbrk, ptr @.str.3, ptr @.str.1, i32 373, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strdup, ptr @.str, ptr @.str.1, i32 379, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strdup, ptr @.str.3, ptr @.str.1, i32 379, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strerror, ptr @.str, ptr @.str.1, i32 385, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strerror, ptr @.str.3, ptr @.str.1, i32 385, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strsignal, ptr @.str, ptr @.str.1, i32 391, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strsignal, ptr @.str.3, ptr @.str.1, i32 391, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @textdomain, ptr @.str, ptr @.str.1, i32 397, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @textdomain, ptr @.str.3, ptr @.str.1, i32 397, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tgetstr, ptr @.str, ptr @.str.1, i32 403, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tgetstr, ptr @.str.3, ptr @.str.1, i32 403, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tigetstr, ptr @.str, ptr @.str.1, i32 409, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tigetstr, ptr @.str.3, ptr @.str.1, i32 409, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpnam, ptr @.str, ptr @.str.1, i32 415, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpnam, ptr @.str.3, ptr @.str.1, i32 415, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ttyname, ptr @.str, ptr @.str.1, i32 421, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ttyname, ptr @.str.3, ptr @.str.1, i32 421, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getcwd, ptr @.str.6, ptr @.str.1, i32 427, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getcwd, ptr @.str.3, ptr @.str.1, i32 427, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mem_realloc, ptr @.str.6, ptr @.str.1, i32 433, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mem_realloc, ptr @.str.5, ptr @.str.1, i32 433, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @realloc, ptr @.str.6, ptr @.str.1, i32 439, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @realloc, ptr @.str.5, ptr @.str.1, i32 439, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_realloc, ptr @.str.6, ptr @.str.1, i32 445, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_realloc, ptr @.str.5, ptr @.str.1, i32 445, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @saferealloc, ptr @.str.6, ptr @.str.1, i32 451, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @saferealloc, ptr @.str.7, ptr @.str.1, i32 451, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safexrealloc, ptr @.str.6, ptr @.str.1, i32 457, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safexrealloc, ptr @.str.3, ptr @.str.1, i32 457, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xrealloc, ptr @.str.6, ptr @.str.1, i32 479, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xrealloc, ptr @.str.5, ptr @.str.1, i32 479, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwm, ptr @.str, ptr @.str.1, i32 485, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwm, ptr @.str.2, ptr @.str.1, i32 485, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnwmRKSt9nothrow_t, ptr @.str, ptr @.str.1, i32 491, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnwmRKSt9nothrow_t, ptr @.str.2, ptr @.str.1, i32 491, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnamRKSt9nothrow_t, ptr @.str, ptr @.str.1, i32 497, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnamRKSt9nothrow_t, ptr @.str.2, ptr @.str.1, i32 497, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @asprintf, ptr @.str.8, ptr @.str.1, i32 503, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @asprintf, ptr @.str.3, ptr @.str.1, i32 503, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @vasprintf, ptr @.str.8, ptr @.str.1, i32 509, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @vasprintf, ptr @.str.3, ptr @.str.1, i32 509, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @db_create, ptr @.str.8, ptr @.str.1, i32 515, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @db_create, ptr @.str.3, ptr @.str.1, i32 515, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_bag_init, ptr @.str.8, ptr @.str.1, i32 521, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_bag_init, ptr @.str.3, ptr @.str.1, i32 521, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_init, ptr @.str.8, ptr @.str.1, i32 527, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_init, ptr @.str.3, ptr @.str.1, i32 527, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_crt_init, ptr @.str.8, ptr @.str.1, i32 533, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_crt_init, ptr @.str.3, ptr @.str.1, i32 533, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_privkey_init, ptr @.str.8, ptr @.str.1, i32 539, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_privkey_init, ptr @.str.3, ptr @.str.1, i32 539, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @posix_memalign, ptr @.str.8, ptr @.str.1, i32 545, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @posix_memalign, ptr @.str.9, ptr @.str.1, i32 545, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @scandir, ptr @.str.10, ptr @.str.1, i32 551, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @scandir, ptr @.str.3, ptr @.str.1, i32 551, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XmbTextPropertyToTextList, ptr @.str.11, ptr @.str.1, i32 557, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XmbTextPropertyToTextList, ptr @.str.3, ptr @.str.1, i32 557, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0i8_p0i8_i64, ptr @.str.12, ptr @.str.1, i32 563, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0_p0_i64, ptr @.str.12, ptr @.str.1, i32 566, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0i8_p0i8_i32, ptr @.str.12, ptr @.str.1, i32 569, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0_p0_i32, ptr @.str.12, ptr @.str.1, i32 572, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy, ptr @.str.12, ptr @.str.1, i32 575, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove, ptr @.str.12, ptr @.str.1, i32 578, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0i8_p0i8_i64, ptr @.str.12, ptr @.str.1, i32 581, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0_p0_i64, ptr @.str.12, ptr @.str.1, i32 584, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0i8_p0i8_i32, ptr @.str.12, ptr @.str.1, i32 587, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0_p0_i32, ptr @.str.12, ptr @.str.1, i32 590, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memcpy_chk, ptr @.str.12, ptr @.str.1, i32 593, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memmove, ptr @.str.12, ptr @.str.1, i32 596, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @bcopy, ptr @.str.12, ptr @.str.1, i32 602, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memccpy, ptr @.str.12, ptr @.str.1, i32 605, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memmove_chk, ptr @.str.12, ptr @.str.1, i32 611, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset, ptr @.str.13, ptr @.str.1, i32 614, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0i8_i32, ptr @.str.13, ptr @.str.1, i32 617, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0_i32, ptr @.str.13, ptr @.str.1, i32 620, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0i8_i64, ptr @.str.13, ptr @.str.1, i32 623, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0_i64, ptr @.str.13, ptr @.str.1, i32 626, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memset_chk, ptr @.str.13, ptr @.str.1, i32 629, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wmemset, ptr @.str.13, ptr @.str.1, i32 635, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strcpy_chk, ptr @.str.14, ptr @.str.1, i32 641, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strcat_chk, ptr @.str.15, ptr @.str.1, i32 647, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__wcscat_chk, ptr @.str.15, ptr @.str.1, i32 653, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @stpcpy, ptr @.str.14, ptr @.str.1, i32 659, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strcat, ptr @.str.15, ptr @.str.1, i32 665, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcscat, ptr @.str.15, ptr @.str.1, i32 671, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strcpy, ptr @.str.14, ptr @.str.1, i32 678, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strncat, ptr @.str.15, ptr @.str.1, i32 684, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcsncat, ptr @.str.15, ptr @.str.1, i32 690, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strncat_chk, ptr @.str.15, ptr @.str.1, i32 695, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__wcsncat_chk, ptr @.str.15, ptr @.str.1, i32 701, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strncpy, ptr @.str.12, ptr @.str.1, i32 706, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcscpy, ptr @.str.14, ptr @.str.1, i32 712, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv, ptr @.str.12, ptr @.str.1, i32 717, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZNSt5arrayIPK1ALm2EE4backEv, ptr @.str.16, ptr @.str.1, i32 723, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @SyGetmem, ptr @.str, ptr @.str.1, i32 732, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @SyGetmem, ptr @.str.2, ptr @.str.1, i32 732, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @SyGetmem, ptr @.str.16, ptr @.str.1, i32 732, ptr null }], section "llvm.metadata"
|
|
23
|
+
@llvm.global.annotations = appending global [215 x { ptr, ptr, ptr, i32, ptr }] [{ ptr, ptr, ptr, i32, ptr } { ptr @malloc, ptr @.str, ptr @.str.1, i32 19, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @malloc, ptr @.str.2, ptr @.str.1, i32 19, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen, ptr @.str, ptr @.str.1, i32 25, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen, ptr @.str.3, ptr @.str.1, i32 25, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen64, ptr @.str, ptr @.str.1, i32 31, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fopen64, ptr @.str.3, ptr @.str.1, i32 31, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fdopen, ptr @.str, ptr @.str.1, i32 37, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @fdopen, ptr @.str.3, ptr @.str.1, i32 37, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir64, ptr @.str, ptr @.str.1, i32 43, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir64, ptr @.str.3, ptr @.str.1, i32 43, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid64, ptr @.str, ptr @.str.1, i32 49, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid64, ptr @.str.3, ptr @.str.1, i32 49, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @calloc, ptr @.str, ptr @.str.1, i32 55, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @calloc, ptr @.str.4, ptr @.str.1, i32 55, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @zmalloc, ptr @.str, ptr @.str.1, i32 61, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @zmalloc, ptr @.str.2, ptr @.str.1, i32 61, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzdopen, ptr @.str, ptr @.str.1, i32 67, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzdopen, ptr @.str.3, ptr @.str.1, i32 67, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv_open, ptr @.str, ptr @.str.1, i32 73, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv_open, ptr @.str.3, ptr @.str.1, i32 73, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc, ptr @.str, ptr @.str.1, i32 79, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc, ptr @.str.2, ptr @.str.1, i32 79, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc_clear, ptr @.str, ptr @.str.1, i32 85, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @lalloc_clear, ptr @.str.2, ptr @.str.1, i32 85, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nhalloc, ptr @.str, ptr @.str.1, i32 91, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nhalloc, ptr @.str.3, ptr @.str.1, i32 91, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @oballoc, ptr @.str, ptr @.str.1, i32 97, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @oballoc, ptr @.str.2, ptr @.str.1, i32 97, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @popen, ptr @.str, ptr @.str.1, i32 103, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @popen, ptr @.str.3, ptr @.str.1, i32 103, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @pthread_getspecific, ptr @.str, ptr @.str.1, i32 109, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @pthread_getspecific, ptr @.str.3, ptr @.str.1, i32 109, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir, ptr @.str, ptr @.str.1, i32 115, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @readdir, ptr @.str.3, ptr @.str.1, i32 115, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_calloc, ptr @.str, ptr @.str.1, i32 121, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_calloc, ptr @.str.4, ptr @.str.1, i32 121, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_malloc, ptr @.str, ptr @.str.1, i32 127, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_malloc, ptr @.str.2, ptr @.str.1, i32 127, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safecalloc, ptr @.str, ptr @.str.1, i32 133, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safecalloc, ptr @.str.4, ptr @.str.1, i32 133, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safemalloc, ptr @.str, ptr @.str.1, i32 139, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safemalloc, ptr @.str.2, ptr @.str.1, i32 139, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @setmntent, ptr @.str, ptr @.str.1, i32 145, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @setmntent, ptr @.str.3, ptr @.str.1, i32 145, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @shmat, ptr @.str, ptr @.str.1, i32 151, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @shmat, ptr @.str.3, ptr @.str.1, i32 151, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__sysv_signal, ptr @.str, ptr @.str.1, i32 157, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__sysv_signal, ptr @.str.3, ptr @.str.1, i32 157, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @signal, ptr @.str, ptr @.str.1, i32 163, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @signal, ptr @.str.3, ptr @.str.1, i32 163, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tempnam, ptr @.str, ptr @.str.1, i32 169, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tempnam, ptr @.str.3, ptr @.str.1, i32 169, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid, ptr @.str, ptr @.str.1, i32 175, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpvoid, ptr @.str.3, ptr @.str.1, i32 175, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xcalloc, ptr @.str, ptr @.str.1, i32 181, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xcalloc, ptr @.str.3, ptr @.str.1, i32 181, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xmalloc, ptr @.str, ptr @.str.1, i32 187, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xmalloc, ptr @.str.2, ptr @.str.1, i32 187, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znam, ptr @.str, ptr @.str.1, i32 193, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znam, ptr @.str.2, ptr @.str.1, i32 193, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znaj, ptr @.str, ptr @.str.1, i32 199, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znaj, ptr @.str.2, ptr @.str.1, i32 199, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwj, ptr @.str, ptr @.str.1, i32 205, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwj, ptr @.str.2, ptr @.str.1, i32 205, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__cxa_allocate_exception, ptr @.str, ptr @.str.1, i32 211, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__cxa_allocate_exception, ptr @.str.2, ptr @.str.1, i32 211, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @aligned_alloc, ptr @.str, ptr @.str.1, i32 217, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @aligned_alloc, ptr @.str.5, ptr @.str.1, i32 217, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memalign, ptr @.str, ptr @.str.1, i32 223, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memalign, ptr @.str.5, ptr @.str.1, i32 223, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @valloc, ptr @.str, ptr @.str.1, i32 229, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @valloc, ptr @.str.2, ptr @.str.1, i32 229, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap64, ptr @.str, ptr @.str.1, i32 235, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap64, ptr @.str.5, ptr @.str.1, i32 235, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XSetLocaleModifiers, ptr @.str, ptr @.str.1, i32 241, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XSetLocaleModifiers, ptr @.str.3, ptr @.str.1, i32 241, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strdup, ptr @.str, ptr @.str.1, i32 247, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strdup, ptr @.str.3, ptr @.str.1, i32 247, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @crypt, ptr @.str, ptr @.str.1, i32 253, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @crypt, ptr @.str.3, ptr @.str.1, i32 253, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ctime, ptr @.str, ptr @.str.1, i32 259, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ctime, ptr @.str.3, ptr @.str.1, i32 259, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlerror, ptr @.str, ptr @.str.1, i32 265, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlerror, ptr @.str.3, ptr @.str.1, i32 265, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlopen, ptr @.str, ptr @.str.1, i32 271, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @dlopen, ptr @.str.3, ptr @.str.1, i32 271, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gai_strerror, ptr @.str, ptr @.str.1, i32 277, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gai_strerror, ptr @.str.3, ptr @.str.1, i32 277, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gcry_cipher_algo_name, ptr @.str, ptr @.str.1, i32 283, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gcry_cipher_algo_name, ptr @.str.3, ptr @.str.1, i32 283, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @svfgcry_md_algo_name_, ptr @.str, ptr @.str.1, i32 289, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @svfgcry_md_algo_name_, ptr @.str.3, ptr @.str.1, i32 289, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getenv, ptr @.str, ptr @.str.1, i32 295, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getenv, ptr @.str.3, ptr @.str.1, i32 295, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getlogin, ptr @.str, ptr @.str.1, i32 301, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getlogin, ptr @.str.3, ptr @.str.1, i32 301, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getpass, ptr @.str, ptr @.str.1, i32 307, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getpass, ptr @.str.3, ptr @.str.1, i32 307, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_strerror, ptr @.str, ptr @.str.1, i32 313, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_strerror, ptr @.str.3, ptr @.str.1, i32 313, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gpg_strerror, ptr @.str, ptr @.str.1, i32 319, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gpg_strerror, ptr @.str.3, ptr @.str.1, i32 319, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzerror, ptr @.str, ptr @.str.1, i32 325, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gzerror, ptr @.str.3, ptr @.str.1, i32 325, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @inet_ntoa, ptr @.str, ptr @.str.1, i32 331, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @inet_ntoa, ptr @.str.3, ptr @.str.1, i32 331, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @initscr, ptr @.str, ptr @.str.1, i32 337, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @initscr, ptr @.str.3, ptr @.str.1, i32 337, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_stacksave, ptr @.str, ptr @.str.1, i32 343, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_stacksave, ptr @.str.3, ptr @.str.1, i32 343, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap, ptr @.str, ptr @.str.1, i32 349, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mmap, ptr @.str.5, ptr @.str.1, i32 349, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @newwin, ptr @.str, ptr @.str.1, i32 355, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @newwin, ptr @.str.3, ptr @.str.1, i32 355, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nl_langinfo, ptr @.str, ptr @.str.1, i32 361, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @nl_langinfo, ptr @.str.3, ptr @.str.1, i32 361, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @opendir, ptr @.str, ptr @.str.1, i32 367, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @opendir, ptr @.str.3, ptr @.str.1, i32 367, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @sbrk, ptr @.str, ptr @.str.1, i32 373, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @sbrk, ptr @.str.3, ptr @.str.1, i32 373, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strdup, ptr @.str, ptr @.str.1, i32 379, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strdup, ptr @.str.3, ptr @.str.1, i32 379, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strerror, ptr @.str, ptr @.str.1, i32 385, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strerror, ptr @.str.3, ptr @.str.1, i32 385, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strsignal, ptr @.str, ptr @.str.1, i32 391, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strsignal, ptr @.str.3, ptr @.str.1, i32 391, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @textdomain, ptr @.str, ptr @.str.1, i32 397, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @textdomain, ptr @.str.3, ptr @.str.1, i32 397, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tgetstr, ptr @.str, ptr @.str.1, i32 403, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tgetstr, ptr @.str.3, ptr @.str.1, i32 403, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tigetstr, ptr @.str, ptr @.str.1, i32 409, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tigetstr, ptr @.str.3, ptr @.str.1, i32 409, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpnam, ptr @.str, ptr @.str.1, i32 415, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @tmpnam, ptr @.str.3, ptr @.str.1, i32 415, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ttyname, ptr @.str, ptr @.str.1, i32 421, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @ttyname, ptr @.str.3, ptr @.str.1, i32 421, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getcwd, ptr @.str.6, ptr @.str.1, i32 427, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @getcwd, ptr @.str.3, ptr @.str.1, i32 427, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mem_realloc, ptr @.str.6, ptr @.str.1, i32 433, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @mem_realloc, ptr @.str.5, ptr @.str.1, i32 433, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @realloc, ptr @.str.6, ptr @.str.1, i32 439, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @realloc, ptr @.str.5, ptr @.str.1, i32 439, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_realloc, ptr @.str.6, ptr @.str.1, i32 445, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safe_realloc, ptr @.str.5, ptr @.str.1, i32 445, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @saferealloc, ptr @.str.6, ptr @.str.1, i32 451, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @saferealloc, ptr @.str.7, ptr @.str.1, i32 451, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safexrealloc, ptr @.str.6, ptr @.str.1, i32 457, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @safexrealloc, ptr @.str.3, ptr @.str.1, i32 457, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xrealloc, ptr @.str.6, ptr @.str.1, i32 479, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @xrealloc, ptr @.str.5, ptr @.str.1, i32 479, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwm, ptr @.str, ptr @.str.1, i32 485, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_Znwm, ptr @.str.2, ptr @.str.1, i32 485, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnwmRKSt9nothrow_t, ptr @.str, ptr @.str.1, i32 491, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnwmRKSt9nothrow_t, ptr @.str.2, ptr @.str.1, i32 491, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnamRKSt9nothrow_t, ptr @.str, ptr @.str.1, i32 497, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZnamRKSt9nothrow_t, ptr @.str.2, ptr @.str.1, i32 497, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @asprintf, ptr @.str.8, ptr @.str.1, i32 503, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @asprintf, ptr @.str.3, ptr @.str.1, i32 503, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @vasprintf, ptr @.str.8, ptr @.str.1, i32 509, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @vasprintf, ptr @.str.3, ptr @.str.1, i32 509, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @db_create, ptr @.str.8, ptr @.str.1, i32 515, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @db_create, ptr @.str.3, ptr @.str.1, i32 515, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_bag_init, ptr @.str.8, ptr @.str.1, i32 521, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_bag_init, ptr @.str.3, ptr @.str.1, i32 521, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_init, ptr @.str.8, ptr @.str.1, i32 527, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_pkcs12_init, ptr @.str.3, ptr @.str.1, i32 527, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_crt_init, ptr @.str.8, ptr @.str.1, i32 533, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_crt_init, ptr @.str.3, ptr @.str.1, i32 533, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_privkey_init, ptr @.str.8, ptr @.str.1, i32 539, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @gnutls_x509_privkey_init, ptr @.str.3, ptr @.str.1, i32 539, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @posix_memalign, ptr @.str.8, ptr @.str.1, i32 545, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @posix_memalign, ptr @.str.9, ptr @.str.1, i32 545, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @scandir, ptr @.str.10, ptr @.str.1, i32 551, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @scandir, ptr @.str.3, ptr @.str.1, i32 551, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XmbTextPropertyToTextList, ptr @.str.11, ptr @.str.1, i32 557, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @XmbTextPropertyToTextList, ptr @.str.3, ptr @.str.1, i32 557, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0i8_p0i8_i64, ptr @.str.12, ptr @.str.1, i32 563, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0_p0_i64, ptr @.str.12, ptr @.str.1, i32 566, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0i8_p0i8_i32, ptr @.str.12, ptr @.str.1, i32 569, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy_p0_p0_i32, ptr @.str.12, ptr @.str.1, i32 572, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memcpy, ptr @.str.12, ptr @.str.1, i32 575, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove, ptr @.str.12, ptr @.str.1, i32 578, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0i8_p0i8_i64, ptr @.str.12, ptr @.str.1, i32 581, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0_p0_i64, ptr @.str.12, ptr @.str.1, i32 584, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0i8_p0i8_i32, ptr @.str.12, ptr @.str.1, i32 587, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memmove_p0_p0_i32, ptr @.str.12, ptr @.str.1, i32 590, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memcpy_chk, ptr @.str.12, ptr @.str.1, i32 593, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memmove, ptr @.str.12, ptr @.str.1, i32 596, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @bcopy, ptr @.str.12, ptr @.str.1, i32 602, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @memccpy, ptr @.str.12, ptr @.str.1, i32 605, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memmove_chk, ptr @.str.12, ptr @.str.1, i32 611, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset, ptr @.str.13, ptr @.str.1, i32 614, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0i8_i32, ptr @.str.13, ptr @.str.1, i32 617, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0_i32, ptr @.str.13, ptr @.str.1, i32 620, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0i8_i64, ptr @.str.13, ptr @.str.1, i32 623, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @llvm_memset_p0_i64, ptr @.str.13, ptr @.str.1, i32 626, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__memset_chk, ptr @.str.13, ptr @.str.1, i32 629, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wmemset, ptr @.str.13, ptr @.str.1, i32 635, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strcpy_chk, ptr @.str.14, ptr @.str.1, i32 641, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strcat_chk, ptr @.str.15, ptr @.str.1, i32 647, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__wcscat_chk, ptr @.str.15, ptr @.str.1, i32 653, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @stpcpy, ptr @.str.14, ptr @.str.1, i32 659, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strcat, ptr @.str.15, ptr @.str.1, i32 665, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcscat, ptr @.str.15, ptr @.str.1, i32 671, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strcpy, ptr @.str.14, ptr @.str.1, i32 678, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strncat, ptr @.str.15, ptr @.str.1, i32 684, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcsncat, ptr @.str.15, ptr @.str.1, i32 690, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__strncat_chk, ptr @.str.15, ptr @.str.1, i32 695, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @__wcsncat_chk, ptr @.str.15, ptr @.str.1, i32 701, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @strncpy, ptr @.str.12, ptr @.str.1, i32 706, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @wcscpy, ptr @.str.14, ptr @.str.1, i32 712, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @iconv, ptr @.str.12, ptr @.str.1, i32 717, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @_ZNSt5arrayIPK1ALm2EE4backEv, ptr @.str.16, ptr @.str.1, i32 723, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @SyGetmem, ptr @.str, ptr @.str.1, i32 731, ptr null }, { ptr, ptr, ptr, i32, ptr } { ptr @SyGetmem, ptr @.str.2, ptr @.str.1, i32 731, ptr null }], section "llvm.metadata"
|
|
24
24
|
|
|
25
25
|
; Function Attrs: noinline nounwind allocsize(0) uwtable
|
|
26
26
|
define dso_local ptr @malloc(i64 noundef %size) #0 {
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -75,6 +75,12 @@ public:
|
|
|
75
75
|
*/
|
|
76
76
|
virtual void detect(AbstractState& as, const ICFGNode* node) = 0;
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* @brief Pure virtual function for handling stub external API calls. (e.g. UNSAFE_BUFACCESS)
|
|
80
|
+
* @param call Pointer to the ext call ICFG node.
|
|
81
|
+
*/
|
|
82
|
+
virtual void handleStubFunctions(const CallICFGNode* call) = 0;
|
|
83
|
+
|
|
78
84
|
/**
|
|
79
85
|
* @brief Pure virtual function to report detected bugs.
|
|
80
86
|
*/
|
|
@@ -169,6 +175,13 @@ public:
|
|
|
169
175
|
*/
|
|
170
176
|
void detect(AbstractState& as, const ICFGNode*);
|
|
171
177
|
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @brief Handles external API calls related to buffer overflow detection.
|
|
181
|
+
* @param call Pointer to the call ICFG node.
|
|
182
|
+
*/
|
|
183
|
+
void handleStubFunctions(const CallICFGNode*);
|
|
184
|
+
|
|
172
185
|
/**
|
|
173
186
|
* @brief Adds an offset to a GEP object.
|
|
174
187
|
* @param obj Pointer to the GEP object.
|
|
@@ -277,11 +290,11 @@ public:
|
|
|
277
290
|
/**
|
|
278
291
|
* @brief Checks if memory can be safely accessed.
|
|
279
292
|
* @param as Reference to the abstract state.
|
|
280
|
-
* @param value Pointer to the SVF
|
|
293
|
+
* @param value Pointer to the SVF var.
|
|
281
294
|
* @param len The interval value representing the length of the memory access.
|
|
282
295
|
* @return True if the memory access is safe, false otherwise.
|
|
283
296
|
*/
|
|
284
|
-
bool canSafelyAccessMemory(AbstractState& as, const
|
|
297
|
+
bool canSafelyAccessMemory(AbstractState& as, const SVFVar *value, const IntervalValue &len);
|
|
285
298
|
|
|
286
299
|
private:
|
|
287
300
|
/**
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
//===- AbsExtAPI.h -- Abstract Interpretation External API handler-----//
|
|
2
|
+
//
|
|
3
|
+
// SVF: Static Value-Flow Analysis
|
|
4
|
+
//
|
|
5
|
+
// Copyright (C) <2013-> <Yulei Sui>
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
// This program is free software: you can redistribute it and/or modify
|
|
9
|
+
// it under the terms of the GNU Affero General Public License as published by
|
|
10
|
+
// the Free Software Foundation, either version 3 of the License, or
|
|
11
|
+
// (at your option) any later version.
|
|
12
|
+
|
|
13
|
+
// This program is distributed in the hope that it will be useful,
|
|
14
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16
|
+
// GNU Affero General Public License for more details.
|
|
17
|
+
|
|
18
|
+
// You should have received a copy of the GNU Affero General Public License
|
|
19
|
+
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20
|
+
//
|
|
21
|
+
//===----------------------------------------------------------------------===//
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
//
|
|
25
|
+
// Created by Jiawei Wang on 2024/9/9.
|
|
26
|
+
//
|
|
27
|
+
#pragma once
|
|
28
|
+
#include "AE/Core/AbstractState.h"
|
|
29
|
+
#include "AE/Core/ICFGWTO.h"
|
|
30
|
+
#include "AE/Svfexe/AEDetector.h"
|
|
31
|
+
#include "AE/Svfexe/AbsExtAPI.h"
|
|
32
|
+
#include "Util/SVFBugReport.h"
|
|
33
|
+
#include "WPA/Andersen.h"
|
|
34
|
+
|
|
35
|
+
namespace SVF
|
|
36
|
+
{
|
|
37
|
+
|
|
38
|
+
// Forward declaration of AbstractInterpretation class
|
|
39
|
+
class AbstractInterpretation;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @class AbsExtAPI
|
|
43
|
+
* @brief Handles external API calls and manages abstract states.
|
|
44
|
+
*/
|
|
45
|
+
class AbsExtAPI
|
|
46
|
+
{
|
|
47
|
+
public:
|
|
48
|
+
/**
|
|
49
|
+
* @enum ExtAPIType
|
|
50
|
+
* @brief Enumeration of external API types.
|
|
51
|
+
*/
|
|
52
|
+
enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @brief Constructor for AbsExtAPI.
|
|
56
|
+
* @param abstractTrace Reference to a map of ICFG nodes to abstract states.
|
|
57
|
+
*/
|
|
58
|
+
AbsExtAPI(Map<const ICFGNode*, AbstractState>& abstractTrace);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @brief Initializes the external function map.
|
|
62
|
+
*/
|
|
63
|
+
void initExtFunMap();
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @brief Reads a string from the abstract state.
|
|
67
|
+
* @param as Reference to the abstract state.
|
|
68
|
+
* @param rhs Pointer to the SVF variable representing the string.
|
|
69
|
+
* @return The string value.
|
|
70
|
+
*/
|
|
71
|
+
std::string strRead(AbstractState& as, const SVFVar* rhs);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @brief Handles an external API call.
|
|
75
|
+
* @param call Pointer to the call ICFG node.
|
|
76
|
+
*/
|
|
77
|
+
void handleExtAPI(const CallICFGNode *call);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @brief Handles the strcpy API call.
|
|
81
|
+
* @param call Pointer to the call ICFG node.
|
|
82
|
+
*/
|
|
83
|
+
void handleStrcpy(const CallICFGNode *call);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @brief Calculates the length of a string.
|
|
87
|
+
* @param as Reference to the abstract state.
|
|
88
|
+
* @param strValue Pointer to the SVF variable representing the string.
|
|
89
|
+
* @return The interval value representing the string length.
|
|
90
|
+
*/
|
|
91
|
+
IntervalValue getStrlen(AbstractState& as, const SVF::SVFVar *strValue);
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @brief Handles the strcat API call.
|
|
95
|
+
* @param call Pointer to the call ICFG node.
|
|
96
|
+
*/
|
|
97
|
+
void handleStrcat(const SVF::CallICFGNode *call);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @brief Handles the memcpy API call.
|
|
101
|
+
* @param as Reference to the abstract state.
|
|
102
|
+
* @param dst Pointer to the destination SVF variable.
|
|
103
|
+
* @param src Pointer to the source SVF variable.
|
|
104
|
+
* @param len The interval value representing the length to copy.
|
|
105
|
+
* @param start_idx The starting index for copying.
|
|
106
|
+
*/
|
|
107
|
+
void handleMemcpy(AbstractState& as, const SVF::SVFVar *dst, const SVF::SVFVar *src, IntervalValue len, u32_t start_idx);
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @brief Handles the memset API call.
|
|
111
|
+
* @param as Reference to the abstract state.
|
|
112
|
+
* @param dst Pointer to the destination SVF variable.
|
|
113
|
+
* @param elem The interval value representing the element to set.
|
|
114
|
+
* @param len The interval value representing the length to set.
|
|
115
|
+
*/
|
|
116
|
+
void handleMemset(AbstractState& as, const SVFVar* dst, IntervalValue elem, IntervalValue len);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @brief Gets the range limit from a type.
|
|
120
|
+
* @param type Pointer to the SVF type.
|
|
121
|
+
* @return The interval value representing the range limit.
|
|
122
|
+
*/
|
|
123
|
+
IntervalValue getRangeLimitFromType(const SVFType* type);
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @brief Retrieves the abstract state from the trace for a given ICFG node.
|
|
127
|
+
* @param node Pointer to the ICFG node.
|
|
128
|
+
* @return Reference to the abstract state.
|
|
129
|
+
* @throws Assertion if no trace exists for the node.
|
|
130
|
+
*/
|
|
131
|
+
AbstractState& getAbsStateFromTrace(const ICFGNode* node);
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @brief Retrieves the SVF variable from a given SVF value.
|
|
135
|
+
* @param val Pointer to the SVF value.
|
|
136
|
+
* @return Pointer to the corresponding SVF variable.
|
|
137
|
+
*/
|
|
138
|
+
const SVFVar* getSVFVar(const SVFValue* val);
|
|
139
|
+
|
|
140
|
+
protected:
|
|
141
|
+
SVFIR* svfir; ///< Pointer to the SVF intermediate representation.
|
|
142
|
+
ICFG* icfg; ///< Pointer to the interprocedural control flow graph.
|
|
143
|
+
Map<const ICFGNode*, AbstractState>& abstractTrace; ///< Map of ICFG nodes to abstract states.
|
|
144
|
+
Map<std::string, std::function<void(const CallICFGNode*)>> func_map; ///< Map of function names to handlers.
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
} // namespace SVF
|
|
@@ -31,12 +31,14 @@
|
|
|
31
31
|
#include "AE/Core/AbstractState.h"
|
|
32
32
|
#include "AE/Core/ICFGWTO.h"
|
|
33
33
|
#include "AE/Svfexe/AEDetector.h"
|
|
34
|
+
#include "AE/Svfexe/AbsExtAPI.h"
|
|
34
35
|
#include "Util/SVFBugReport.h"
|
|
35
36
|
#include "WPA/Andersen.h"
|
|
36
37
|
|
|
37
38
|
namespace SVF
|
|
38
39
|
{
|
|
39
40
|
class AbstractInterpretation;
|
|
41
|
+
class AbsExtAPI;
|
|
40
42
|
class AEStat;
|
|
41
43
|
class AEAPI;
|
|
42
44
|
|
|
@@ -104,7 +106,6 @@ class AbstractInterpretation
|
|
|
104
106
|
friend class BufOverflowDetector;
|
|
105
107
|
|
|
106
108
|
public:
|
|
107
|
-
enum ExtAPIType { UNCLASSIFIED, MEMCPY, MEMSET, STRCPY, STRCAT };
|
|
108
109
|
typedef SCCDetection<CallGraph*> CallGraphSCC;
|
|
109
110
|
/// Constructor
|
|
110
111
|
AbstractInterpretation();
|
|
@@ -128,7 +129,9 @@ public:
|
|
|
128
129
|
detectors.push_back(std::move(detector));
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
|
|
132
|
+
Set<const CallICFGNode*> checkpoints; // for CI check
|
|
133
|
+
|
|
134
|
+
private:
|
|
132
135
|
/// Global ICFGNode is handled at the entry of the program,
|
|
133
136
|
virtual void handleGlobalNode();
|
|
134
137
|
|
|
@@ -213,77 +216,6 @@ protected:
|
|
|
213
216
|
AbstractState& as);
|
|
214
217
|
|
|
215
218
|
|
|
216
|
-
/**
|
|
217
|
-
* handle external function call
|
|
218
|
-
*
|
|
219
|
-
* @param call call node whose callee is external function
|
|
220
|
-
*/
|
|
221
|
-
virtual void handleExtAPI(const CallICFGNode *call);
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* the map of external function to its API type
|
|
225
|
-
*
|
|
226
|
-
* In AEAPI, this function is mainly used for abstract explanation.
|
|
227
|
-
* In subclasses, this function is mainly used to check specific bugs
|
|
228
|
-
*/
|
|
229
|
-
virtual void initExtFunMap();
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* get byte size of alloca inst
|
|
234
|
-
* e.g. source code str = "abc", there are str value, return "abc"
|
|
235
|
-
*
|
|
236
|
-
* @param rhs SVFValue of string
|
|
237
|
-
* @return the string
|
|
238
|
-
*/
|
|
239
|
-
std::string strRead(AbstractState& as,const SVFValue* rhs);
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* get length of string
|
|
243
|
-
* e.g. source code str = "abc", return 3
|
|
244
|
-
*
|
|
245
|
-
* @param strValue SVFValue of string
|
|
246
|
-
* @return IntervalValue of string length
|
|
247
|
-
*/
|
|
248
|
-
IntervalValue getStrlen(AbstractState& as, const SVF::SVFValue *strValue);
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* execute strcpy in abstract execution
|
|
252
|
-
* e.g arr = new char[10]
|
|
253
|
-
* str = "abc"
|
|
254
|
-
* strcpy(arr, str)
|
|
255
|
-
* we can set arr[0]='a', arr[1]='b', arr[2]='c', arr[3]='\0'
|
|
256
|
-
* @param call callnode of strcpy like api
|
|
257
|
-
*/
|
|
258
|
-
virtual void handleStrcpy(const CallICFGNode *call);
|
|
259
|
-
/**
|
|
260
|
-
* execute strcpy in abstract execution
|
|
261
|
-
* e.g arr[10] = "abc"
|
|
262
|
-
* str = "de"
|
|
263
|
-
* strcat(arr, str)
|
|
264
|
-
* we can set arr[3]='d', arr[4]='e', arr[5]='\0'
|
|
265
|
-
* @param call callnode of strcat like api
|
|
266
|
-
*/
|
|
267
|
-
virtual void handleStrcat(const CallICFGNode *call);
|
|
268
|
-
/**
|
|
269
|
-
* execute memcpy in abstract execution
|
|
270
|
-
* e.g arr = new char[10]
|
|
271
|
-
* str = "abcd"
|
|
272
|
-
* memcpy(arr, str, 5)
|
|
273
|
-
* we can set arr[3]='d', arr[4]='e', arr[5]='\0'
|
|
274
|
-
* @param call callnode of memcpy like api
|
|
275
|
-
*/
|
|
276
|
-
virtual void handleMemcpy(AbstractState& as, const SVFValue* dst, const SVFValue* src, IntervalValue len, u32_t start_idx);
|
|
277
|
-
/**
|
|
278
|
-
* execute memset in abstract execution
|
|
279
|
-
* e.g arr = new char[10]
|
|
280
|
-
* memset(arr, 'c', 2)
|
|
281
|
-
* we can set arr[0]='c', arr[1]='c', arr[2]='\0'
|
|
282
|
-
* @param call callnode of memset like api
|
|
283
|
-
*/
|
|
284
|
-
virtual void handleMemset(AbstractState& as, const SVFValue* dst, IntervalValue elem, IntervalValue len);
|
|
285
|
-
|
|
286
|
-
|
|
287
219
|
void collectCheckPoint();
|
|
288
220
|
void checkPointAllSet();
|
|
289
221
|
|
|
@@ -309,8 +241,6 @@ protected:
|
|
|
309
241
|
|
|
310
242
|
void updateStateOnPhi(const PhiStmt *phi);
|
|
311
243
|
|
|
312
|
-
IntervalValue getRangeLimitFromType(const SVFType* type);
|
|
313
|
-
|
|
314
244
|
|
|
315
245
|
/// protected data members, also used in subclasses
|
|
316
246
|
SVFIR* svfir;
|
|
@@ -324,18 +254,6 @@ protected:
|
|
|
324
254
|
Map<const SVFFunction*, ICFGWTO*> funcToWTO;
|
|
325
255
|
Set<const SVFFunction*> recursiveFuns;
|
|
326
256
|
|
|
327
|
-
private:
|
|
328
|
-
// helper functions in handleCallSite
|
|
329
|
-
virtual bool isExtCall(const CallICFGNode* callNode);
|
|
330
|
-
virtual void extCallPass(const CallICFGNode* callNode);
|
|
331
|
-
virtual bool isRecursiveCall(const CallICFGNode* callNode);
|
|
332
|
-
virtual void recursiveCallPass(const CallICFGNode* callNode);
|
|
333
|
-
virtual bool isDirectCall(const CallICFGNode* callNode);
|
|
334
|
-
virtual void directCallFunPass(const CallICFGNode* callNode);
|
|
335
|
-
virtual bool isIndirectCall(const CallICFGNode* callNode);
|
|
336
|
-
virtual void indirectCallFunPass(const CallICFGNode* callNode);
|
|
337
|
-
|
|
338
|
-
protected:
|
|
339
257
|
|
|
340
258
|
AbstractState& getAbsStateFromTrace(const ICFGNode* node)
|
|
341
259
|
{
|
|
@@ -356,16 +274,31 @@ protected:
|
|
|
356
274
|
return abstractTrace.count(repNode) != 0;
|
|
357
275
|
}
|
|
358
276
|
|
|
359
|
-
|
|
277
|
+
AbsExtAPI* getUtils()
|
|
278
|
+
{
|
|
279
|
+
return utils;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// helper functions in handleCallSite
|
|
283
|
+
virtual bool isExtCall(const CallICFGNode* callNode);
|
|
284
|
+
virtual void extCallPass(const CallICFGNode* callNode);
|
|
285
|
+
virtual bool isRecursiveCall(const CallICFGNode* callNode);
|
|
286
|
+
virtual void recursiveCallPass(const CallICFGNode* callNode);
|
|
287
|
+
virtual bool isDirectCall(const CallICFGNode* callNode);
|
|
288
|
+
virtual void directCallFunPass(const CallICFGNode* callNode);
|
|
289
|
+
virtual bool isIndirectCall(const CallICFGNode* callNode);
|
|
290
|
+
virtual void indirectCallFunPass(const CallICFGNode* callNode);
|
|
291
|
+
|
|
360
292
|
// there data should be shared with subclasses
|
|
361
293
|
Map<std::string, std::function<void(const CallICFGNode*)>> func_map;
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
Map<const ICFGNode*, AbstractState>
|
|
365
|
-
abstractTrace; // abstract states immediately after nodes
|
|
294
|
+
|
|
295
|
+
Map<const ICFGNode*, AbstractState> abstractTrace; // abstract states immediately after nodes
|
|
366
296
|
std::string moduleName;
|
|
367
297
|
|
|
368
298
|
std::vector<std::unique_ptr<AEDetector>> detectors;
|
|
299
|
+
AbsExtAPI* utils;
|
|
300
|
+
|
|
301
|
+
|
|
369
302
|
|
|
370
303
|
};
|
|
371
304
|
}
|
|
Binary file
|
|
Binary file
|