2014-03-06 3 views
0

특정 변수에 LLVM IR의 값이 할당되는 지침 목록을 수동으로 작성하려고합니다.LLVM의 전역 정의 추적

함수의 지역 변수의 경우 명령어 반복기를 사용하고 특정 명령어의 피연산자를 확인하여 올바른 명령어 세트를 쉽게 얻을 수 있습니다. 이 접근법은 연관된 전역 변수에 대한 저장 명령이 없기 때문에 전역 변수에 대해 작동하지 않는 것처럼 보입니다.

메타 데이터 필드를 보지 않고 전역 변수가 정의되는 위치를 추적 할 수있는 방법이 있습니까? 그렇지 않다면, 전역 변수의 초기 정의를위한 특별한 마커로 취급 될 수있는 더미 명령어를 생성 할 수있는 방법이 있습니까?

답변

0

함수의 지역 변수의 경우, 명령어 반복기를 사용하고 특정 명령어의 피연산자를 검사하여 올바른 명령어 집합을 쉽게 얻을 수 있습니다.

정확하지 않습니다. 변수가 메모리에 있고 할당이 store을 통해 수행되는 한 사실이지만 레지스터로 승격되면 할당을 추적하기 위해 llvm.dbg.value 호출을 사용해야합니다.

이 접근법은 관련 전역 저장 변수가 없기 때문에 전역 변수에 대해 작동하지 않는 것처럼 보입니다.

글로벌 할당은 초기 할당을 제외하고 stores와 같이 표시됩니다.

메타 데이터 필드를 보지 않고 전역 변수가 정의되는 위치를 추적 할 수있는 방법이 있습니까?

"어디에서"어떤 소스 라인을 의미하는지 디버그 정보 메타 데이터에 의존해야합니다.

+0

변수가 레지스터로 승격되기 전에이 작업을 수행하고 있습니다. 마침내 getNamedValue() 메소드를 통해 전역 allocs에 대해 (Value *)를 얻을 수 있었고이를 사용하여 전역 변수의 재정의를 추적 할 수있었습니다. 최선의 해결책은 아닐지 모르지만 지금은 그 일을하는 것처럼 보입니다. – vPraetor