[email protected] might be a better place for such questions, but let
me try here.

1. check that you have a proper symbol in the run-time library (*.a) using
nm.
>From your code snippet I suspect that you may have forgotten to add extern
"C"

2. Run the compilation command line wit -v to verify that the linker flags
and *.a files are passed as you would expect

3. again, using nm, check what functions are expected by the instrumented
.o file.

hth.

--kcc

On Fri, May 27, 2016 at 8:29 AM, Yuri Gribov <[email protected]> wrote:

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

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