2017-01-14 14 views
1

因此,所有我想要做的就是通过调用指令调用函数的名称: 这是我简单的代码:无法获得通过LLVM调用指令调用的函数的名称传递

for(Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) 
       { 
      for(BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI){ 
       if(isa<CallInst>(&(*BI))) { 
         StringRef fname = cast<CallInst>(&(*BI))->getCalledFunction()->getName(); 
        } 
    } 
} 

这是讨厌的错误:

0 libLLVM-3.4.so.1 0x40f8150f LLVM :: SYS ::的printStackTrace(_IO_FILE *)+ 47

1 libLLVM-3.4.so.1 0x40f 8177f

2 libLLVM-3.4.so.1 0x40f812ec

3 0x40022400 __kernel_sigreturn + 0

4 libLLVM-3.4.so.1 0x40899c74 LLVM ::值::的getName()const的+ 20

5 SkeletonPass.so 0x40027786

堆栈转储: 0.程序参数:在/ usr/bin中/铛-cc1 - 三把i386-pc-linux的GNU的-emit-OBJ免费-disable--disable-llvm- verifier -main-file-name test_atomics.cc -mrelocation-model pic -pic-le vel 2 -fmath-errno -masm-verbose -mconstructor-aliases -fuse-init-array -target-cpu pentium4 -target-linker-version 2.24 -momit-leaf-frame-pointer -g -coverage-file/home/danish /Desktop/Owl/llvm/llvm-3.4/lib/Transforms/SyncProf/testing/masstree-beta-master/test_atomics.o -resource-dir /usr/bin/../lib/clang/3.4 -dependency-file。 deps/test_atomics.d -MT test_atomics.o -sys-header-deps -MP -include config.h -D NDEBUG -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -D NDEBUG -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -D NDEBUG -D _GNU_SOURCE -D __STDC_CONSTANT_MACROS -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -I /usr/lib/llvm-3.4/include -I /usr/lib/llvm-3.4/include -I/usr/lib/llvm -3.4/include -internal-isystem /usr/include//c++/4.8 -internal-isystem /usr/include//c++/4.8/i386-linux-gnu -internal-isystem /usr/include//c++/4.8/落后-internal-isystem /usr/include//i386-linux-gnu/c++/4.8 -internal-is ystem /usr/bin/../lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/bin/../ lib/gcc/i686-linux-gnu/4.8 /../../../../ include/C++/4.8/i686-linux-gnu -internal-isystem /usr/bin/../lib/gcc /i686-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/bin/../lib/gcc/i686-linux-gnu/ 4.8 /../../../../ include/i686-linux-gnu/C++/4.8 -internal-isystem/usr/local/include -internal-isystem /usr/bin/../lib/clang /3.4/include -internal-externc-isystem /usr/bin/../lib/gcc/i686-linux-gnu/4.8/include -internal-externc-isystem/usr/include/i386-linux-gnu -internal- externc-isystem/include -internal-externc-isystem/usr/include -O3 -Woverloaded-virtual -Wcast-qual -W -Wall -std = C++ 11 -fdeprecated-macro -fdebug-compilation-dir/home/danish /Desktop/Owl/llvm/llvm-3.4/lib/Transforms/SyncProf/testing/masstree-beta-master -ferror-limit 19 -fmessage-length 80 -fvisibility-inlines-hidden -mstackrealign -fobjc-runtime = gcc -fdiagnostics -show-option -fcolor-diagnostics -vecto rize-loops -vectorize-slp -load /home/danish/Desktop/Owl/llvm/llvm-3.4/Release+Asserts/lib/SkeletonPass.so -o test_atomics.o -x C++ test_atomics。CC

  1. 分析器在文件

  2. 每个函数的优化

  3. 运行通 '白骨精通行证' 上的功能 '@ _Z9test_jsonv' 铛的结束:错误:无法执行命令:分割故障(核心转储) clang:error:clang前端命令因信号失败(使用-v查看调用) Ubuntu clang版本3.4-1ubuntu3(tags/RELEASE_34/final)(基于LLVM 3.4) 目标:i386- pc-linux-gnu 线程模型:posix 铛:注意:诊断信息:请提交一个错误报告到http://bugs.debian.org/,包括崩溃回溯,预处理源和相关的运行脚本。 铛:注意:诊断信息:


请附上以下文件错误报告: 预处理的源极(S)和相关联的运行脚本(或多个)的位置如下: 铛:注意:诊断消息:/tmp/test_atomics-128b00.cpp 铿锵:注意:诊断信息:/tmp/test_atomics-128b00.sh 铿锵:注:诊断信息:


化妆:*** [test_atomics。 o]错误254

当我添加->getName()部件来检索函数名称时出现此错误。 帮助!

+3

如果调用是通过函数指针的间接调用,那么'getCalledFunction'可以返回null。 –

回答

1

是的我认为你是对的!我添加了这个空检查,它工作:Function * func = cast(&(* BI)) - > getCalledFunction(); if(func!= NULL)errs()< getName();谢谢@IsmailBadawi!

相关问题