pdf 파일에서 텍스트를 복사할 때 아래와 같이 줄 바꿈이 되는 경우가 발생합니다. 

 

 

위와 같이 여러 문장을 복사하고 붙여넣으면 아래와 같이 on the precision of profiling 부분이 줄이 바뀌어 버립니다.

 

 

이럴 때는 조금 번거롭지만 Sublime text와 같은 도구로 해당 부분을 한 번에 해결할 수 있습니다.

저는 Sublime text 3를 사용했고 www.sublimetext.com/3에서 다운로드할 수 있습니다.

 

위의 pdf 파일 내용을 sublime text에 붙여 넣기 합니다.

 

이제 마우스 드래그로 전체 선택을 하거나 단축키 Ctrl + A를 눌러 모든 텍스트를 선택합니다.

 

 

이상태에서 Ctrl + Shift + L을 누르면 아래와 같이 모든 커서가 문장의 맨 뒤로 이동합니다.

 

그러면, 오른쪽 방향키를 한번 눌러서 드래그 상태를 해제하고, delete 키를 눌러서 공백을 삭제합니다.

 

이후 스페이스를 한번 눌러서 간격을 조정합니다.

 

 

정리를 하면 다음과 같습니다.

1. 모든 텍스트 선택

2. 컨트롤+쉬프트+L을 누름

3. 오른쪽 방향키 누름

4. 딜리트 키 누름

5. 스페이스 바 누름

 

LLVM에서 Pass를 컴파일하고 (*.so) 아래의 명령어를 사용해 IR 코드를 분석할 수 있다.

 

$ opt -load *.so -PASSNAME *.ll (혹은 *.bc)

 

PASSNAME 부분에는 코드에서 RegisterPass에서 지정한 이름을 입력하면 된다.

 

만약 아래와 같이 Hello라고 등록을 하였으면 

static RegisterPass<HelloModule> X("Hello", "Hello World Pass "); 

 

$ opt -load HelloModule.so -hello *.ll 

 

과 같이 실행하면 된다.

 

단순히 Pass를 적용한 결과를 보고 싶으면 위의 명령어를 사용하면 되지만, 아래와 같은 경고가 뜬다.

 

WARNING: You're attempting to print out a bitcode file. This is inadvisable as it may cause display problems. If you REALLY want to taste LLVM bitcode first-hand, you can force output with the `-f' option.

 

분석에 지장은 없지만, 경고가 거슬리는 경우 아래와 같이 실행해서 output을 명시한다.

 

$ opt -load HelloModule.so -hello < *.ll > /dev/null

 

 

Pass를 적용한 코드를 생성하기 위해서는 아래와 같이 opt의 인자로 -o를 사용한다.

 

$ opt -load HelloModule.so -hello original.ll -o original.opt.ll

 

그러면 Pass가 적용된 original.opt.ll이 생성되고, clang 으로 컴파일해서 실행하면 된다.

 

'IT > LLVM' 카테고리의 다른 글

LLVM Pass 실행  (0) 2020.09.11
LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07
IR, LL, LLVM

 

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

'IT > LLVM' 카테고리의 다른 글

LLVM Pass 실행  (0) 2020.09.11
LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07

 

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.png .main.dot

 

 

'IT > LLVM' 카테고리의 다른 글

LLVM Pass 실행  (0) 2020.09.11
LLVM clang IR(*.ll) 변환  (0) 2020.09.11
LLVM basic block call flow graph  (0) 2020.09.07

 

기존에는 WinSCP와 Putty를 사용해서 개발을 진행했었는데, 불편함을 느끼던 와중에 VS Code에서 remote ssh를 사용할 수 있는 것을 알게 되었습니다.

 

설치 방법은 VS Code에서 Extention을 설치하고 연결만 하면 될 정도로 간단합니다.

 

 

1. SSH Extension 설치

 

Extension 탭에서 'Remote - SSH' 혹은 'Remote developemnet'를 설치합니다.

 

 

2. SSH 설정

 

설치가 되면 Remote를 위한 탭이 생성됩니다.

해당 탭을 누르고 SSH TARGETS에서 '+ 버튼'을 눌러 장치를 추가합니다.

 

 

아래의 창에 보이는 것과 같이, 'ssh 계정명@서버 IP -A'를 입력합니다.

 

서버 IP와 계정이 올바르면 아래와 같이 SSH 설정 파일을 어디에 저장할 것인지 나옵니다.

저는 기본 경로인 맨 첫 번째 경로로 설정했습니다.

 

이후 해당 플랫폼의 운영체제를 물어보는데, 라즈베리 파이는 Linux 이므로 Linux를 선택합니다.

 

다음으로 연결을 할 건지 물어보는데, Continue를 눌러 계속 진행합니다.

 

 

연결이 정상적으로 됐으면 비밀번호를 입력하라고 창이 나옵니다.

 

비밀번호를 정상적으로 입력을 하면 왼쪽 아래에 Opening Remote 가 활성화되면서 장치와 연결을 시작합니다.

이때, 라즈베리파이의 네트워크 상태에 따라 필요 프로그램을 다운로드하고 설치하는 시간이 많이 걸릴 수 있습니다.

VS Code와 remote 하기 위해 라즈베리로 메시지를 보내 몇 개의 프로그램을 설치합니다. 

 

필수 프로그램 설치 이후, 장치와 연결이 됐습니다.

Ctrl + ` 키를 누르면 터미널 창을 열 수 있습니다.

 

 

라즈베리 파이의 파일 목록을 보기 위해서는 EXPLORER 탭을 눌러 Open Folder을 클릭합니다.

 

그러면 어느 폴더를 열 것인지 나오는데 본인이 필요한 폴더를 선택합니다.

저는 편의를 위해 계정 home 폴더를 선택했습니다.

 

 

아래와 같이 VS Code에 라즈베리파이의 폴더와 파일 목록이 연동되었습니다.

한 가지 불편한 것은 자동 새로고침이 안되므로, 수동으로 새로고침 버튼을 눌러야 합니다.

 

 

또 한 가지 불편한 부분은 ARM 아키텍처가 local 환경이 아니므로 대부분의 현재 설치되어있는 EXTENSION의 사용이 불가능합니다. ARM 장치에 호환되는 확장 프로그램을 찾아서 설치하여야 합니다.

 

그래서 VS Code의 자동 줄 맞추기 단축키 사용이 안돼서, 저는 조금 번거롭지만 터미널에서 vim을 실행해 줄 맞춤을 실행하고 다시 파일을 여는 방식을 사용하고 있습니다.