Hi,

I am trying to implement a runtime to an existant LLVM FunctionPass. I
followed your design and instrumented the code with call to a runtime
function but this function seems to be undefined. Let me be more specific:

- I added a function in asan_rtl.cc with quite nothing in it (I am not even
sure what Report does but I though it might print something... the point is
to call this function with instrumentation):

  void __bounds_init() {
    Report("Runtime Library accessed!");
  }

- I added an doInitialization function to my FunctionPass in order to
retrieve a pointer to the __bounds_init function:

  bool BoundsChecking::doInitialization(Module &M) {
    if (runTimeEnabled) return false;
    runTimeEnabled = true;
    errs() << "Initialization of the FunctionPass...\n";
    std::tie(ctor_func, init_func) =
          createSanitizerCtorAndInitFunctions(
              M, "", "__bounds_init",
              /*InitArgTypes=*/{}, /*InitArgs=*/{}, "check_v1");
    if(init_func) errs() << "Initialization succeded!\n";
    return true;
  }
Maybe the call to createSanitizerCtorAndInitFunctions isn't correctly done?
It seems that the function only needs a init name. As I don't need a
constructor I let the name empty... I didn't know what to put into the
check version argument so I put a random name "check_v1"

- Then I made the call generation with the following for each function just
to try:

    IRBuilder<> IRB(&F.front(), F.front().begin());
    IRB.CreateCall(init_func, {});

I got no errors when building LLVM with thoses changes but when I generate
the executable with clang -fsanitize=bounds (this is the way to call
BoundsChecking) the linker (so, after optimizations) fails and gives
several " undefined reference to `__bounds_init' ".

I suppose I missed something but I dont know what. I looked at the IR
generated with -S -emit-llvm, and there are several calls to __bounds_init
and a declaration but no define:

  call void @__bounds_init() #3
  declare void @__bounds_init()

Anyone knows how I should do to be able to link the function created in
asan_rtl.cc to the code being created? Or where to look in asan sources to
find an answer? Feel free to ask me details, it's possible I am not being
clear in what I exposed to you?

Thanks a lot for you time,
Pierre

-- 
You received this message because you are subscribed to the Google Groups 
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to