-
Notifications
You must be signed in to change notification settings - Fork 13
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
Improve UBSAN stacktraces #13
Conversation
The following changes ensure that UBSAN will print full stacktraces on failure. Before: SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/local/RDcsan/lib/R/site-library/Rcpp/include/Rcpp/routines.h:223:12 in /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:745:15: runtime error: member call on address 0x60c00003fdc0 which does not point to an object of type 'std::_Sp_counted_base<__gnu_cxx::_S_atomic>' 0x60c00003fdc0: note: object is of type 'std::_Sp_counted_ptr_inplace<arrow::ArrayData, std::allocator<arrow::ArrayData>, (__gnu_cxx::_Lock_policy)2>' b3 00 80 7d d8 1c 9c e3 a4 7f 00 00 01 00 00 00 01 00 00 00 d0 b2 04 00 60 60 00 00 c0 b2 04 00 After: SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/local/RDcsan/lib/R/site-library/Rcpp/include/Rcpp/routines.h:223:12 in /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:745:15: runtime error: member call on address 0x60c000060100 which does not point to an object of type 'std::_Sp_counted_base<__gnu_cxx::_S_atomic>' 0x60c000060100: note: object is of type 'std::_Sp_counted_ptr_inplace<arrow::ArrayData, std::allocator<arrow::ArrayData>, (__gnu_cxx::_Lock_policy)2>' 96 00 00 4a d8 ac bb 7a 89 7f 00 00 01 00 00 00 01 00 00 00 50 b4 04 00 60 60 00 00 40 b4 04 00 ^~~~~~~~~~~~~~~~~~~~~~~ vptr for 'std::_Sp_counted_ptr_inplace<arrow::ArrayData, std::allocator<arrow::ArrayData>, (__gnu_cxx::_Lock_policy)2>' #0 0x7f897b1ac15e in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_count<(__gnu_cxx::_Lock_policy)2> const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:745:15 #1 0x7f897b23b793 in std::__shared_ptr<arrow::ArrayData, (__gnu_cxx::_Lock_policy)2>::operator=(std::__shared_ptr<arrow::ArrayData, (__gnu_cxx::_Lock_policy)2> const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:1166:69 #2 0x7f897b23b5a1 in std::shared_ptr<arrow::ArrayData>::operator=(std::shared_ptr<arrow::ArrayData> const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr.h:309:65 #3 0x7f897b23b237 in arrow::Array::SetData(std::shared_ptr<arrow::ArrayData> const&) /usr/include/arrow/array.h:359:11 #4 0x7f897b23a363 in arrow::PrimitiveArray::SetData(std::shared_ptr<arrow::ArrayData> const&) /usr/include/arrow/array.h:422:18 #5 0x7f897b239df7 in arrow::PrimitiveArray::PrimitiveArray(std::shared_ptr<arrow::ArrayData> const&) /usr/include/arrow/array.h:427:5 #6 0x7f897b239c2f in arrow::NumericArray<arrow::Int32Type>::NumericArray(std::shared_ptr<arrow::ArrayData> const&) /usr/include/arrow/array.h:440:67 #7 0x7f897b239b4f in void __gnu_cxx::new_allocator<arrow::NumericArray<arrow::Int32Type> >::construct<arrow::NumericArray<arrow::Int32Type>, std::shared_ptr<arrow::ArrayData>&>(arrow::NumericArray<arrow::Int32Type>*, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/ext/new_allocator.h:136:23 #8 0x7f897b2390a6 in void std::allocator_traits<std::allocator<arrow::NumericArray<arrow::Int32Type> > >::construct<arrow::NumericArray<arrow::Int32Type>, std::shared_ptr<arrow::ArrayData>&>(std::allocator<arrow::NumericArray<arrow::Int32Type> >&, arrow::NumericArray<arrow::Int32Type>*, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/alloc_traits.h:475:8 #9 0x7f897b2387e4 in std::_Sp_counted_ptr_inplace<arrow::NumericArray<arrow::Int32Type>, std::allocator<arrow::NumericArray<arrow::Int32Type> >, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<std::shared_ptr<arrow::ArrayData>&>(std::allocator<arrow::NumericArray<arrow::Int32Type> >, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:545:4 #10 0x7f897b237e8b in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<arrow::NumericArray<arrow::Int32Type>, std::allocator<arrow::NumericArray<arrow::Int32Type> >, std::shared_ptr<arrow::ArrayData>&>(arrow::NumericArray<arrow::Int32Type>*&, std::_Sp_alloc_shared_tag<std::allocator<arrow::NumericArray<arrow::Int32Type> > >, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:678:6 #11 0x7f897b237a34 in std::__shared_ptr<arrow::NumericArray<arrow::Int32Type>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<arrow::NumericArray<arrow::Int32Type> >, std::shared_ptr<arrow::ArrayData>&>(std::_Sp_alloc_shared_tag<std::allocator<arrow::NumericArray<arrow::Int32Type> > >, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr_base.h:1342:14 #12 0x7f897b23772a in std::shared_ptr<arrow::NumericArray<arrow::Int32Type> >::shared_ptr<std::allocator<arrow::NumericArray<arrow::Int32Type> >, std::shared_ptr<arrow::ArrayData>&>(std::_Sp_alloc_shared_tag<std::allocator<arrow::NumericArray<arrow::Int32Type> > >, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr.h:359:4 #13 0x7f897b23733e in std::shared_ptr<arrow::NumericArray<arrow::Int32Type> > std::allocate_shared<arrow::NumericArray<arrow::Int32Type>, std::allocator<arrow::NumericArray<arrow::Int32Type> >, std::shared_ptr<arrow::ArrayData>&>(std::allocator<arrow::NumericArray<arrow::Int32Type> > const&, std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr.h:705:14 #14 0x7f897b230674 in std::shared_ptr<arrow::NumericArray<arrow::Int32Type> > std::make_shared<arrow::NumericArray<arrow::Int32Type>, std::shared_ptr<arrow::ArrayData>&>(std::shared_ptr<arrow::ArrayData>&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/shared_ptr.h:721:14 #15 0x7f897b1ca924 in std::shared_ptr<arrow::Array> arrow::r::MakeSimpleArray<13, arrow::Int32Type>(SEXPREC*) /tmp/RtmpY3I3AL/R.INSTALL1e366ad6e15d/arrow/src/array_from_vector.cpp:913:10 #16 0x7f897b1b5885 in arrow::r::Array__from_vector_reuse_memory(SEXPREC*) /tmp/RtmpY3I3AL/R.INSTALL1e366ad6e15d/arrow/src/array_from_vector.cpp:919:14 #17 0x7f897b1b095c in arrow::r::Array__from_vector(SEXPREC*, std::shared_ptr<arrow::DataType> const&, bool) /tmp/RtmpY3I3AL/R.INSTALL1e366ad6e15d/arrow/src/array_from_vector.cpp:983:12 #18 0x7f897b1b7024 in Array__from_vector(SEXPREC*, SEXPREC*) /tmp/RtmpY3I3AL/R.INSTALL1e366ad6e15d/arrow/src/array_from_vector.cpp:1047:10 #19 0x7f897b2894fa in _arrow_Array__from_vector /tmp/RtmpY3I3AL/R.INSTALL1e366ad6e15d/arrow/src/arrowExports.cpp:481:20
r-devel/Dockerfile
Outdated
@@ -69,8 +69,9 @@ ENV LANG=en_US.UTF-8 | |||
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 \ | |||
--slave /usr/bin/g++ g++ /usr/bin/g++-8 | |||
|
|||
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-7 800 \ | |||
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-7 | |||
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-7 700 \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure if the 700
is relevant
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that is a priority level, so I think you can just leave it at the original value.
Thanks this makes the output more informative. |
Note for future users, you probably want to filter R's internal frames since the eval stack frames is quite big (~200 frames), e.g.
Otherwise you have a lot of likely irrelevant lines:
|
The following changes ensure that UBSAN will print full stacktraces on failure.
Before:
After: