Pierre,

In this case it seems that you need to do some additional actions to
export your new symbol from runtime library. I remember that it hides
(i.e. does not export) most of it's symbols by default so you need to
whitelist your new function somewhere.

On Fri, May 27, 2016 at 3:51 PM, Pierre Gagelin
<[email protected]> wrote:
> 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.

-- 
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