Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running annotation module #10

Open
atamlir opened this issue Jun 22, 2017 · 1 comment
Open

Running annotation module #10

atamlir opened this issue Jun 22, 2017 · 1 comment

Comments

@atamlir
Copy link

atamlir commented Jun 22, 2017

Hi,

am trying to run annotation module code from the link in the tutorial
http://bholt.org/posts/llvm-quick-tricks.html

`
#include "llvm/Pass.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/Transforms/IPO/PassManagerBuilder.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/IR/Module.h"
#include

using namespace llvm;

namespace {
struct SkeletonPass : public ModulePass {
static char ID;
SkeletonPass() : ModulePass(ID) {}

virtual bool runOnModule(Module &M) override;

};
}

char SkeletonPass::ID = 0;
std::set<Function*> async_fns;

 bool SkeletonPass::runOnModule(Module &M) {
  // Get the function to call from our runtime library.
  auto global_annos = M.getNamedGlobal("llvm.global.annotations");
  if (global_annos) {
    auto a = cast<ConstantArray>(global_annos->getOperand(0));
    for (int i=0; i<a->getNumOperands(); i++) {
      auto e = cast<ConstantStruct>(a->getOperand(i));

      if (auto fn = dyn_cast<Function>(e->getOperand(0)->getOperand(0))) {
        auto anno = cast<ConstantDataArray>(cast<GlobalVariable>(e->getOperand(1)->getOperand(0))->getOperand(0))->getAsCString();
      if (anno == "async") { async_fns.insert(fn); }          }
    }
  }

}

// Automatically enable the pass.
// http://adriansampson.net/blog/clangpass.html

static void registerSkeletonPass(const PassManagerBuilder &,
legacy::PassManagerBase &PM) {
PM.add(new SkeletonPass());
}
static RegisterStandardPasses
MyPassRegistration(PassManagerBuilder::EP_EarlyAsPossible,
registerSkeletonPass);

static RegisterStandardPasses
RegisterMyPass0(PassManagerBuilder::EP_EnabledOnOptLevel0, registerSkeletonPass);`

and something.c
`#include <stdio.h>

attribute((annotate("async"))) int foo() {
printf("foo does nothing\n");
}

int main(int argc, const char** argv) {
int num;
int x = foo();
scanf("%i", &num);
printf("%i\n", x + num + 2);
return 0;
}`

am getting these errors:
0. Program arguments: /usr/local/bin/clang-5.0 -cc1 -triple x86_64-unknown-linux-gnu -emit-obj -mrelax-all -disable-free -main-file-name something.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -coverage-notes-file /home/atamli/StaticAnalysis/llvm-pass-skeleton/build/example/something.gcno -resource-dir /usr/local/lib/clang/5.0.0 -internal-isystem /usr/local/include -internal-isystem /usr/local/lib/clang/5.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /home/atamli/StaticAnalysis/llvm-pass-skeleton/build/example -ferror-limit 19 -fmessage-length 111 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -load ../skeleton/libSkeletonPass.so -o something.o -x c something.c

  1. parser at end of file
  2. Per-function optimization
  3. Running pass 'Unnamed pass: implement Pass::getPassName()' on function '@foo'
    clang-5.0: error: unable to execute command: Segmentation fault (core dumped)
    clang-5.0: error: clang frontend command failed due to signal (use -v to see invocation)
    clang version 5.0.0 (trunk 305458)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /usr/local/bin
    clang-5.0: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
    clang-5.0: note: diagnostic msg:

Any idea how to fix this ?

@sampsyo
Copy link
Owner

sampsyo commented Jun 22, 2017

Hi! Can you please format your post so that the code and terminal output is legible (i.e., use ```)?

If you're getting a segmentation fault, you'll want to load your program up in a debugger (gdb or lldb) to find out where the crash is happening and to get a traceback. I unfortunately can't make any useful guesses just by looking at code on the screen. 😃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants