IT/LLVM3 LLVM Pass 실행 LLVM에서 Pass를 컴파일하고 (*.so) 아래의 명령어를 사용해 IR 코드를 분석할 수 있다. $ opt -load *.so -PASSNAME *.ll (혹은 *.bc) PASSNAME 부분에는 코드에서 RegisterPass에서 지정한 이름을 입력하면 된다. 만약 아래와 같이 Hello라고 등록을 하였으면 static RegisterPass X("Hello", "Hello World Pass "); $ opt -load HelloModule.so -hello *.ll 과 같이 실행하면 된다. 단순히 Pass를 적용한 결과를 보고 싶으면 위의 명령어를 사용하면 되지만, 아래와 같은 경고가 뜬다. WARNING: You're attempting to print out a bitcode file. Th.. 2020. 9. 11. LLVM clang IR(*.ll) 변환 Case 1: $ clang clang -c -emit-llvm main.c -o main.bc $ llvm-dis main.bc Case 2: $ clang -S -emit-llvm -Xclang -disable-O0-optnone main.c 2020. 9. 11. LLVM basic block call flow graph LLVM에서 call flow graph를 생성하기 위해 바로 보거나, dot 파일 등으로 저장할 수 있다. dot 파일을 위해 graphviz를 설치한다 $ sudo apt install graphviz 이후 LLVM 으로 cfg 를 생성한다. bitcode 생성 $ clang -c -emit-llvm main.c -o main.bc ll 생성 $ llvm-dis main.bc cfg 생성 $ opt -analyze -dot-cfg main.ll 코드에 따라서 1개 이상의 .dot 파일이 생성된다. 만약 x11 환경이라면 -dot-cfg 옵션 대신에 -view-cfg 옵션을 통해 바로 cfg 를 볼 수 있다. dot 파일을 직접 볼 수 없으므로 png 로 변경한다. $ dot -Tpng -o main... 2020. 9. 7. 이전 1 다음