|
From: Mark P. <pa...@un...> - 2015-08-25 18:42:04
Attachments:
signature.asc
|
Hi all, I’m seeing a very obviously weird error message on Yosemite with trunk valgrind:
---
$ cat helloWorldPlusPlus.cpp
#include <string>
#include <iostream>
int main(int argc, char** argv) {
std::string output = *(new std::string("Hello, World!\n"));
std::cout << output << std::endl;
return 0;
}
---
$ clang++ -std=c++11 -stdlib=libc++ -o helloWorldPlusPlus helloWorldPlusPlus.cpp
$ valgrind ./helloWorldPlusPlus
…
==51151== Conditional jump or move depends on uninitialised value(s)
==51151== at 0x1004C8C3F: _platform_memchr$VARIANT$Haswell (in /usr/lib/system/libsystem_platform.dylib)
==51151== by 0x1002BC9F6: __sfvwrite (in /usr/lib/system/libsystem_c.dylib)
==51151== by 0x1002BCF0A: fwrite (in /usr/lib/system/libsystem_c.dylib)
==51151== by 0x100028D29: std::__1::__stdoutbuf<char>::overflow(int) (in /usr/lib/libc++.1.dylib)
==51151== by 0x10001E91C: std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long) (in /usr/lib/libc++.1.dylib)
==51151== by 0x100001BBD: std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) (in ./helloWorldPlusPlus)
==51151== by 0x1000015F6: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) (in ./helloWorldPlusPlus)
==51151== by 0x1000011F1: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in ./helloWorldPlusPlus)
==51151== by 0x100000F6C: main (in ./helloWorldPlusPlus)
==51151==
==51151== Conditional jump or move depends on uninitialised value(s)
==51151== at 0x1004C8C47: _platform_memchr$VARIANT$Haswell (in /usr/lib/system/libsystem_platform.dylib)
==51151== by 0x1002BC9F6: __sfvwrite (in /usr/lib/system/libsystem_c.dylib)
==51151== by 0x1002BCF0A: fwrite (in /usr/lib/system/libsystem_c.dylib)
==51151== by 0x100028D29: std::__1::__stdoutbuf<char>::overflow(int) (in /usr/lib/libc++.1.dylib)
==51151== by 0x10001E91C: std::__1::basic_streambuf<char, std::__1::char_traits<char> >::xsputn(char const*, long) (in /usr/lib/libc++.1.dylib)
==51151== by 0x100001BBD: std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) (in ./helloWorldPlusPlus)
==51151== by 0x1000015F6: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) (in ./helloWorldPlusPlus)
==51151== by 0x1000011F1: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) (in ./helloWorldPlusPlus)
==51151== by 0x100000F6C: main (in ./helloWorldPlusPlus)
==51151==
…
followed by the expected leak detection, 24 bytes.
Is this a real issue in libc++ / libsystem, or just a bug in valgrind trunk?
-Pauley
|
|
From: Rhys K. <rhy...@gm...> - 2015-08-25 19:15:18
|
Hello,
This is missing system library suppression for a hardware-specific
optimisation path.
Will be easy enough to fix.
Regards,
Rhys
On Wednesday, 26 August 2015, Mark Pauley <pa...@un...> wrote:
> Hi all, I’m seeing a very obviously weird error message on Yosemite with
> trunk valgrind:
>
> ---
>
> $ cat helloWorldPlusPlus.cpp
> #include <string>
> #include <iostream>
>
> int main(int argc, char** argv) {
> std::string output = *(new std::string("Hello, World!\n"));
>
> std::cout << output << std::endl;
>
> return 0;
> }
>
> ---
>
> $ clang++ -std=c++11 -stdlib=libc++ -o helloWorldPlusPlus
> helloWorldPlusPlus.cpp
> $ valgrind ./helloWorldPlusPlus
>
> …
>
> ==51151== Conditional jump or move depends on uninitialised value(s)
> ==51151== at 0x1004C8C3F: _platform_memchr$VARIANT$Haswell (in
> /usr/lib/system/libsystem_platform.dylib)
> ==51151== by 0x1002BC9F6: __sfvwrite (in
> /usr/lib/system/libsystem_c.dylib)
> ==51151== by 0x1002BCF0A: fwrite (in /usr/lib/system/libsystem_c.dylib)
> ==51151== by 0x100028D29: std::__1::__stdoutbuf<char>::overflow(int)
> (in /usr/lib/libc++.1.dylib)
> ==51151== by 0x10001E91C: std::__1::basic_streambuf<char,
> std::__1::char_traits<char> >::xsputn(char const*, long) (in
> /usr/lib/libc++.1.dylib)
> ==51151== by 0x100001BBD: std::__1::ostreambuf_iterator<char,
> std::__1::char_traits<char> > std::__1::__pad_and_output<char,
> std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char,
> std::__1::char_traits<char> >, char const*, char const*, char const*,
> std::__1::ios_base&, char) (in ./helloWorldPlusPlus)
> ==51151== by 0x1000015F6: std::__1::basic_ostream<char,
> std::__1::char_traits<char> >& std::__1::__put_character_sequence<char,
> std::__1::char_traits<char> >(std::__1::basic_ostream<char,
> std::__1::char_traits<char> >&, char const*, unsigned long) (in
> ./helloWorldPlusPlus)
> ==51151== by 0x1000011F1: std::__1::basic_ostream<char,
> std::__1::char_traits<char> >& std::__1::operator<< <char,
> std::__1::char_traits<char>, std::__1::allocator<char>
> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&,
> std::__1::basic_string<char, std::__1::char_traits<char>,
> std::__1::allocator<char> > const&) (in ./helloWorldPlusPlus)
> ==51151== by 0x100000F6C: main (in ./helloWorldPlusPlus)
> ==51151==
> ==51151== Conditional jump or move depends on uninitialised value(s)
> ==51151== at 0x1004C8C47: _platform_memchr$VARIANT$Haswell (in
> /usr/lib/system/libsystem_platform.dylib)
> ==51151== by 0x1002BC9F6: __sfvwrite (in
> /usr/lib/system/libsystem_c.dylib)
> ==51151== by 0x1002BCF0A: fwrite (in /usr/lib/system/libsystem_c.dylib)
> ==51151== by 0x100028D29: std::__1::__stdoutbuf<char>::overflow(int)
> (in /usr/lib/libc++.1.dylib)
> ==51151== by 0x10001E91C: std::__1::basic_streambuf<char,
> std::__1::char_traits<char> >::xsputn(char const*, long) (in
> /usr/lib/libc++.1.dylib)
> ==51151== by 0x100001BBD: std::__1::ostreambuf_iterator<char,
> std::__1::char_traits<char> > std::__1::__pad_and_output<char,
> std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char,
> std::__1::char_traits<char> >, char const*, char const*, char const*,
> std::__1::ios_base&, char) (in ./helloWorldPlusPlus)
> ==51151== by 0x1000015F6: std::__1::basic_ostream<char,
> std::__1::char_traits<char> >& std::__1::__put_character_sequence<char,
> std::__1::char_traits<char> >(std::__1::basic_ostream<char,
> std::__1::char_traits<char> >&, char const*, unsigned long) (in
> ./helloWorldPlusPlus)
> ==51151== by 0x1000011F1: std::__1::basic_ostream<char,
> std::__1::char_traits<char> >& std::__1::operator<< <char,
> std::__1::char_traits<char>, std::__1::allocator<char>
> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&,
> std::__1::basic_string<char, std::__1::char_traits<char>,
> std::__1::allocator<char> > const&) (in ./helloWorldPlusPlus)
> ==51151== by 0x100000F6C: main (in ./helloWorldPlusPlus)
> ==51151==
>
> …
>
> followed by the expected leak detection, 24 bytes.
>
> Is this a real issue in libc++ / libsystem, or just a bug in valgrind
> trunk?
>
>
> -Pauley
>
>
|
|
From: Julian S. <js...@ac...> - 2015-08-27 11:43:12
|
>> ==51151== at 0x1004C8C3F: _platform_memchr$VARIANT$Haswell (in >> /usr/lib/system/libsystem_platform.dylib) > This is missing system library suppression for a hardware-specific > optimisation path. No need to suppress. Instead, we need to intercept calls to this function. Have a look at the "memchr" section in shared/vg_replace_strmem.c. It's a 1-liner fix. Or 2 lines if you duplicate the comment :) J |
|
From: Tom H. <to...@co...> - 2015-08-27 11:53:50
|
On 27/08/15 12:43, Julian Seward wrote: > >>> ==51151== at 0x1004C8C3F: _platform_memchr$VARIANT$Haswell (in >>> /usr/lib/system/libsystem_platform.dylib) > >> This is missing system library suppression for a hardware-specific >> optimisation path. > > No need to suppress. Instead, we need to intercept calls to this function. > Have a look at the "memchr" section in shared/vg_replace_strmem.c. It's a > 1-liner fix. Or 2 lines if you duplicate the comment :) See https://bugs.kde.org/show_bug.cgi?id=351756 where that fix has already been tested and Rhys said he'd commit it. Tom -- Tom Hughes (to...@co...) http://compton.nu/ |