почему Clang не может использовать таким образом - PullRequest
0 голосов
/ 15 марта 2020
//a.c 
int main() {
 printf("Hello world\n");
}

// в данный момент в каталоге llvm-project

clang -Xclang -load  -Xclang build/lib/LLVMHello.so a.c

команда выше не имеет никакого эффекта. пока вступают в действие следующие коммундировки

clang -emit-llvm -c a.c
opt -load build/lib/LLVMHello.so -hello < a.bc

1 Ответ

0 голосов
/ 16 марта 2020

Это потому, что демонстрация LLVMHello регистрирует передачу как

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

Так как она действует только для OPT.

Если вы хотите загрузить ее в Clang Вы можете заменить RegisterPass на

static void registerHelloPass(const PassManagerBuilder &, legacy::PassManagerBase &PM) {
    PM.add(new Hello());
}
static RegisterStandardPasses RegisterMyPass(PassManagerBuilder::EP_EarlyAsPossible, registerHelloPass);

Тогда вы можете использовать clang -Xclang -load -Xclang XXX.so. Таким образом, вы можете загрузить его либо в Clang или в Opt.

...