LLVM IR 패스에서 현재 모듈의 절대 경로를 추출하는 방법은 무엇입니까?

이광무

제목이 모든 것을 설명합니다. LLVM IR 모듈 패스를 작성 중이며 현재 모듈에 해당하는 소스 코드의 절대 경로를 알아야 합니다. (모듈의 getSourceFileName()을 통해) 소스 코드 이름 을 추출하는 방법을 알고 있지만 절대 디렉토리 경로를 포함한 소스 코드의 전체 경로가 필요합니다. 어떻게 찾을 수 있습니까? 해결 방법이 있으면 그것도 작동합니다.

이광무

자, 여기서 제 질문에 답하겠습니다. LLVM이 내부적으로 절대 경로를 복원하는 방법은 IR/CodeGen/AsmWriter/AsmWriter.cpp:emitRemarksSection(). 기본적으로 clang현재 실행 중인 현재 경로로 소스 코드의 경로를 복원합니다 . 이를 수행하는 API 기능은 이미 LLVM에서 제공합니다.

이를 참고하여 모듈의 파일명을 전체 경로로 변환해 보겠습니다.

  1. 파일 이름을 가져옵니다.

표준::문자열 파일 이름 = M.getSourceFileName();

  1. char벡터로 변환합니다 .

llvm::SmallString<128> FilenameVec = StringRef(파일 이름);

  1. 전체 경로로 만드십시오.

llvm::sys::fs::make_absolute(파일명Vec);

파일 전체 경로는 에 바로 저장됩니다 FilenameVec. llvm/Support/FileSystem.h를 사용 하려면 를 포함 해야 합니다 make_absolute().

작동하는 IR 패스에 다음 코드를 (적절하게) 붙여서 시도해 볼 수 있습니다.

#include <string>
#include "llvm/Support/FileSystem.h"
      
...

std::string Filename = M.getSourceFileName();   // e.g., Filename = aaa.c
llvm::SmallString<128> FilenameVec = StringRef(Filename);
llvm::sys::fs::make_absolute(FilenameVec);      // e.g., FilenameVec = /path/to/aaa.c

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

"항상 현재 모듈에 상대적"파일 경로를 만드는 방법은 무엇입니까?

최대 절전 모드에서 Criteria 객체를 재사용하는 방법은 무엇입니까?

로드 된 클래스의 절대 경로 (있는 경우)를 결정하는 방법은 무엇입니까?

SWT의 FileDialog에서 파일에 대한 절대 경로를 얻는 방법은 무엇입니까?

Flutter에서 현재 경로 경로를 얻는 방법은 무엇입니까?

C #에서 현재 사용자의 데스크톱 경로를 얻는 방법은 무엇입니까?

LLVM에서 사용자 지정 모듈 식 패스를 작성하는 방법은 무엇입니까?

llvm :: Module의 생성 된 LLVM-IR 코드를 문자열에 저장하는 방법은 무엇입니까?

Sinatra에서 현재 경로 / 경로를 얻는 방법은 무엇입니까?

git의 현재 상태에 대한 모든 작성자를 얻는 방법은 무엇입니까?

canActive 경로에서 현재 경로를 얻는 방법은 무엇입니까?

LLVM IR 명령어의 텍스트 표현을 얻는 방법은 무엇입니까?

LLVM 패스에서 플랫폼 별 함수 정의를 추가하는 방법은 무엇입니까?

LLVM IR에서 생성 된 기본 블록에 함수에서 동일한 유형의 여러 루프를 매핑하는 방법은 무엇입니까?

하위 모듈이있는 Git 저장소에있는 모든 파일의 절대 경로를 얻는 방법은 무엇입니까?

최대 절전 모드를 사용하여 mysql에서 현재 날짜 데이터 목록을 얻는 방법은 무엇입니까?

현재 값을 기준으로 ggplot 객체의 모든 텍스트에 대한 글꼴 크기를 변경하는 방법은 무엇입니까?

LLVM IR : 함수에 인수로 전달할 때 llvm ir-code에서 배열 크기를 얻는 방법은 무엇입니까?

절대 요소를 현재 위치 (부모가 아님)에서 배치 (오프셋)하는 방법은 무엇입니까?

LLVM IR에서 C ++ 함수를 호출하는 방법은 무엇입니까?

현재 스크립트의 경로를 얻는 방법은 무엇입니까?

llvm에서 allocaInstr에 의해 문자 그대로 할당 된 주소를 얻는 방법은 무엇입니까?

LLVM MCJIT 기반 JIT에서 현재 프로세스 기호를 해결하는 방법은 무엇입니까?

다른 모듈의 일부 메서드를 재정의하는 모듈에서 클래스 메서드를 호출하는 방법은 무엇입니까?

CBOW 모델에 대한 임베딩 가중치를 추출하는 적절한 방법은 무엇입니까?

SQL의 모든 행에 대해 현재 주의 합계를 계산하는 방법은 무엇입니까?

LLVM에서 객체 지향 동적 디스패치를 구현하는 방법은 무엇입니까?

현재 실행 중인 R 스크립트의 컨텍스트에서 절대 경로를 얻는 방법은 무엇입니까?

현재 모듈에서 가져온 모듈의 기능을 사용하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    Matlab의 반복 Sortino 비율

  2. 2

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  5. 5

    원-사각형 충돌의 충돌 측면을 찾는 문제

  6. 6

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  7. 7

    어떻게 아무리 "나쁜", ANY의 SSL 인증서와 HttpClient를 사용하지합니다

  8. 8

    Ubuntu는 GUI에서 암호로 사용자를 만듭니다.

  9. 9

    잘못된 상태 예외를 발생시키는 Apache PoolingHttpClientConnectionManager

  10. 10

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  11. 11

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  12. 12

    Vuetify 다중 선택 구성 요소에서 클릭 한 항목의 값 가져 오기

  13. 13

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  16. 16

    cuda 11.1에서 Pytorch를 사용할 때 PyTorch가 작동하지 않음: Dataloader

  17. 17

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  18. 18

    상황에 맞는 메뉴 색상

  19. 19

    마우스 휠 JQuery 이벤트 핸들러에 대한 방향 가져 오기

  20. 20

    매개 변수에서 쿼리 객체를 선언하는 방법은 무엇입니까?

  21. 21

    Maven은 아이 프로젝트 대상 폴더를 청소하지

뜨겁다태그

보관