Hi Gábor,

That error is kind of correct. As far as c++ standard is concerned,
this is an ODR violation, as both lldb and liblldb link in a copy of
LLVMSupport.a. However, all LLVM symbols in liblldb have "hidden"
visibility (and we make sure we don't pass around llvm objects on the
SO boundary), so this is not a problem in practice.

 I am not sure why ASAN_OPTIONS is not respected here, but you should
be able to get around this error by building with
LLVM_LINK_LLVM_DYLIB=On. This will cause both liblldb and lldb to link
llvm dynamically, so you should have only one llvm copy floating
around.
On Fri, 3 Aug 2018 at 11:36, Gábor Márton <martongab...@gmail.com> wrote:
>
> Hi Vedant and Pavel,
>
> Thanks for your reply.
> I agree that asan may report false positives in case of leak
> detection: E.g. library A (instrumented) allocates memory, while
> library B (not instrumented by asan) is responsible for deallocation.
> However, my goal is to discover memory corruption errors around the
> ASTImporter. For that it is enough if all llvm and clang libs are
> sanitized, plus liblldb.so too; I don't think that we need to sanitize
> python as well.
>
> So what I have discovered so far is that the lldb binary itself
> statically links the asan library:
> ```
> nm -C bin/lldb | ag __asan_op
> 000000000098cdf0 B __asan_option_detect_stack_use_after_return
> ```
>
> In the meanwhile the liblldb.so  is not:
> ```
> nm -C ./lib/liblldb.so | ag __asan_op
>                  U __asan_option_detect_stack_use_after_return
> ```
>
> liblldb.so is then loaded by SWIG from dotest.py and that causes the error.
> With LD_PRELOAD yes I can preload one libasan.so but it is not trivial
> to find the compatible ASAN runtime.
>  When I could find the compatible ASAN runtime then I couldn't get rid
> of an annoying error:
> ```
>  python dotest.py --executable ~/WORK/llvm2/build/debug_san/bin/lldb
> ../packages/Python/lldbsuite/test/ -v --excluded ~/lldb_test_exclude
> --skip-category dataformatters --skip-category flakey --skip-category
> lldb-mi
> ['dotest.py', '--executable',
> '/home/egbomrt/WORK/llvm2/build/debug_san/bin/lldb',
> '../packages/Python/lldbsuite/test/', '-v', '--excluded',
> '/home/egbomrt/lldb_test_exclude', '--skip-category',
> 'dataformatters', '--skip-category', 'flakey', '--skip-category',
> 'lldb-mi']
> LLDB library dir: /home/egbomrt/WORK/llvm2/build/debug_san/bin
> LLDB import library dir: /home/egbomrt/WORK/llvm2/build/debug_san/bin
> ==25952==The following global variable is not properly aligned.
> ==25952==This may happen if another global with the same name
> ==25952==resides in another non-instrumented module.
> ==25952==Or the global comes from a C file built w/o -fno-common.
> ==25952==In either case this is likely an ODR violation bug,
> ==25952==but AddressSanitizer can not provide more details.
> =================================================================
> ==25952==ERROR: AddressSanitizer: odr-violation (0x7f28e415f713):
>   [1] size=1 'llvm::ErrorInfoBase::ID'
> ../../git/llvm/lib/Support/Error.cpp:52:21
>   [2] size=1 'llvm::ErrorInfoBase::ID'
> ../../git/llvm/lib/Support/Error.cpp:52:21
> These globals were registered at these points:
>   [1]:
>     #0 0x4345f0  (/home/egbomrt/WORK/llvm2/build/debug_san/bin/lldb+0x4345f0)
>     #1 0x7f28e0a523bb
> (/home/egbomrt/WORK/llvm2/build/debug_san/bin/../lib/libLLVMSupport.so.6+0x4fe3bb)
>
>   [2]:
>     #0 0x4345f0  (/home/egbomrt/WORK/llvm2/build/debug_san/bin/lldb+0x4345f0)
>     #1 0x7f28e0a523bb
> (/home/egbomrt/WORK/llvm2/build/debug_san/bin/../lib/libLLVMSupport.so.6+0x4fe3bb)
>
> ==25952==HINT: if you don't care about these errors you may set
> ASAN_OPTIONS=detect_odr_violation=0
> SUMMARY: AddressSanitizer: odr-violation: global
> 'llvm::ErrorInfoBase::ID' at
> ../../git/llvm/lib/Support/Error.cpp:52:21
> ```
> Even if I exported ASAN_OPTIONS=detect_odr_violation=0 the error remained.
>
> So, this is where I gave up.
> Maybe one other workaround could be to link statically the whole LLVM
> project... ,but that would take too much time in our CI. Probably we
> will run only the lldb unittests with asan turned on.
>
> GaborOn Fri, Aug 3, 2018 at 11:31 AM Pavel Labath <lab...@google.com> wrote:
> >
> > When I looked into this in the past (two years ago), the problem was
> > that the sanitizer runtimes were expected to be linked into the main
> > executable. For the dotest tests, the main executable is "python", so
> > unless you have built an asanified python, you will not have them.
> >
> > You might be able to get them loaded via some LD_PRELOAD tricks, but I
> > am not sure if the overall result will be worth the trouble. In
> > general, the sanitizers expect that your whole process is sanitized,
> > and they tend to report a lot of false positives if that is not the
> > case.
> > On Fri, 3 Aug 2018 at 00:31, Vedant Kumar via lldb-dev
> > <lldb-dev@lists.llvm.org> wrote:
> > >
> > > Hi Gábor,
> > >
> > > That symbol appears to be defined in compiler-rt/lib/asan/asan_rtl.cc, so 
> > > it should be provided by the asan runtime. Are you sure that the runtime 
> > > expected by the host compiler is being dynamically loaded here? You can 
> > > check this using 'ldd' (IIRC) on Linux or 'otool -l' on Darwin. Also, did 
> > > you take the extra step needed to preload the runtime 
> > > (LD_PRELOAD/DYLD_INSERT_LIBRARIES)?
> > >
> > > best,
> > > vedant
> > >
> > >
> > > On Aug 2, 2018, at 12:24 PM, Gábor Márton via lldb-dev 
> > > <lldb-dev@lists.llvm.org> wrote:
> > >
> > > Hi,
> > >
> > > I'd like to run the tests, when LLVM, Clang and LLDB are all built with 
> > > ASAN.
> > > I am using release_60 version of LLDB.
> > > The unittests just run fine, but with `dotest.py`, there is an error.
> > > Maybe the LLDB build does not respect the global -DLLVM_USE_SANITIZER
> > > flag of cmake ?
> > >
> > > Any help would be appreciated,
> > > Thanks,
> > > Gabor
> > >
> > >
> > > ```
> > > /var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/test/dotest.py
> > > --executable /var/jenkins_home/workspace/ctu_pipeline/build/bin/lldb
> > > /var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/packages/Python/lldbsuite/test/
> > > -v --excluded ./lldb_test_exclude
> > > lldb version 6.0.0 (https://github.com/llvm-mirror/lldb.git revision
> > > b6df24ff1b258b18041161b8f32ac316a3b5d8d9)
> > >  clang revision 64eed461cdd3705e7bc1ccc95df9858f7fe216a8
> > >  llvm revision 089d4c0c490687db6c75f1d074e99c4d42936a50
> > > ['/var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/test/dotest.py',
> > > '--executable',
> > > '/var/jenkins_home/workspace/ctu_pipeline/build/bin/lldb',
> > > '/var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/packages/Python/lldbsuite/test/',
> > > '-v', '--excluded', './lldb_test_exclude']
> > > LLDB library dir: /var/jenkins_home/workspace/ctu_pipeline/build/bin
> > > LLDB import library dir: 
> > > /var/jenkins_home/workspace/ctu_pipeline/build/bin
> > > The 'lldb-mi' executable cannot be located.  The lldb-mi tests can not
> > > be run as a result.
> > > Traceback (most recent call last):
> > >  File 
> > > "/var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/test/dotest.py",
> > > line 7, in <module>
> > >    lldbsuite.test.run_suite()
> > >  File 
> > > "/var/jenkins_home/workspace/ctu_pipeline/llvm/tools/lldb/packages/Python/lldbsuite/test/dotest.py",
> > > line 1129, in run_suite
> > >    import lldb
> > >  File 
> > > "/var/jenkins_home/workspace/ctu_pipeline/build/lib/python2.7/site-packages/lldb/__init__.py",
> > > line 53, in <module>
> > >    _lldb = swig_import_helper()
> > >  File 
> > > "/var/jenkins_home/workspace/ctu_pipeline/build/lib/python2.7/site-packages/lldb/__init__.py",
> > > line 49, in swig_import_helper
> > >    _mod = imp.load_module('_lldb', fp, pathname, description)
> > > ImportError: 
> > > /var/jenkins_home/workspace/ctu_pipeline/build/lib/libLLVMDemangle.so.6:
> > > undefined symbol: __asan_option_detect_stack_use_after_return
> > >
> > > ```
> > > _______________________________________________
> > > lldb-dev mailing list
> > > lldb-dev@lists.llvm.org
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> > >
> > >
> > > _______________________________________________
> > > lldb-dev mailing list
> > > lldb-dev@lists.llvm.org
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to