Skip to content
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

valgrind reports invalid frees on 32 bit systems when MoarVM is built with --valgrind #5830

Closed
p6rt opened this issue Nov 27, 2016 · 4 comments
Labels

Comments

@p6rt
Copy link

p6rt commented Nov 27, 2016

Migrated from rt.perl.org#130191 (status was 'resolved')

Searchable as RT130191$

@p6rt
Copy link
Author

p6rt commented Nov 27, 2016

From @dogbert17

# The system
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ ./perl6 -v
This is Rakudo version 2016.11-76-g8774f24 built on MoarVM version
2016.11-20-g0f7277a
implementing Perl 6.c.

# build moar with
# perl Configure.pl --no-optimize --debug --valgrind
--prefix=/home/dogbert/repos/rakudo/install/
# and install it

# the perl6 program
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ cat test.pl6
say 'Hello World';

# the problem
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ ./perl6-valgrind-m test.pl6

============================================================================

This is Rakudo Perl 6 running in valgrind, a tool for debugging and
profiling programs.

Running a program in valgrind usually takes *a lot* more time than running
it directly,

so please be patient.

This Rakudo version is 2016.11.76.g.8774.f.24 built on MoarVM version
2016.11.20.g.0.f.7277.a,

running on ubuntu (14.04.3.LTS.Trusty.Tahr) / linux (3.19.0.32.generic)



==6431== Memcheck, a memory error detector

==6431== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.

==6431== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info

==6431== Command​: /home/dogbert/repos/rakudo/install/bin/moar --full-cleanup
--execname=./perl6-valgrind-m
--libpath=/home/dogbert/repos/rakudo/install/share/nqp/lib --libpath=.
/home/dogbert/repos/rakudo/perl6.moarvm test.pl6

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== by 0x4195BAF​: MVM_string_utf8_decode (utf8.c​:200)

==6431== by 0x40E891A​: MVM_cu_obtain_string (compunit.c​:227)

==6431== Address 0x46890c4 is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x419875F​: MVM_nfg_crlf_grapheme (nfg.c​:232)

==6431== by 0x419414F​: MVM_string_decode_stream_sep_default
(decode_stream.c​:522)

==6431== by 0x411A614​: MVM_io_syncstream_from_uvstream (syncstream.c​:347)

==6431== by 0x411C9BD​: MVM_file_get_stdstream (fileops.c​:357)

==6431== by 0x41BC68F​: setup_std_handles (moar.c​:270)

==6431== by 0x41BC644​: MVM_vm_create_instance (moar.c​:260)

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== by 0x4195BAF​: MVM_string_utf8_decode (utf8.c​:200)

==6431== Address 0x88fff04 is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== Address 0x890006c is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431==

Hello World

==6431==

==6431== HEAP SUMMARY​:

==6431== in use at exit​: 152,880 bytes in 38,808 blocks

==6431== total heap usage​: 321,135 allocs, 221,719 frees, 46,550,757 bytes
allocated

==6431==

==6431== LEAK SUMMARY​:

==6431== definitely lost​: 5,454 bytes in 34,380 blocks

==6431== indirectly lost​: 14,040 bytes in 668 blocks

==6431== possibly lost​: 120,032 bytes in 3,751 blocks

==6431== still reachable​: 13,354 bytes in 9 blocks

==6431== suppressed​: 0 bytes in 0 blocks

==6431== Rerun with --leak-check=full to see details of leaked memory

==6431==

==6431== For counts of detected and suppressed errors, rerun with​: -v

==6431== ERROR SUMMARY​: 8 errors from 3 contexts (suppressed​: 0 from 0)

@p6rt
Copy link
Author

p6rt commented Nov 30, 2016

From @jnthn

On Sun, 27 Nov 2016 11​:28​:12 -0800, jan-olof.hendig@​bredband.net wrote​:

# The system
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ ./perl6 -v
This is Rakudo version 2016.11-76-g8774f24 built on MoarVM version
2016.11-20-g0f7277a
implementing Perl 6.c.

# build moar with
# perl Configure.pl --no-optimize --debug --valgrind
--prefix=/home/dogbert/repos/rakudo/install/
# and install it

# the perl6 program
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ cat test.pl6
say 'Hello World';

# the problem
dogbert@​dogbert-VirtualBox ~/repos/rakudo $ ./perl6-valgrind-m test.pl6

============================================================================

This is Rakudo Perl 6 running in valgrind, a tool for debugging and
profiling programs.

Running a program in valgrind usually takes *a lot* more time than running
it directly,

so please be patient.

This Rakudo version is 2016.11.76.g.8774.f.24 built on MoarVM version
2016.11.20.g.0.f.7277.a,

running on ubuntu (14.04.3.LTS.Trusty.Tahr) / linux (3.19.0.32.generic)

----------------------------------------------------------------------------
--------------------

==6431== Memcheck, a memory error detector

==6431== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.

==6431== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info

==6431== Command​: /home/dogbert/repos/rakudo/install/bin/moar --full-cleanup
--execname=./perl6-valgrind-m
--libpath=/home/dogbert/repos/rakudo/install/share/nqp/lib --libpath=.
/home/dogbert/repos/rakudo/perl6.moarvm test.pl6

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== by 0x4195BAF​: MVM_string_utf8_decode (utf8.c​:200)

==6431== by 0x40E891A​: MVM_cu_obtain_string (compunit.c​:227)

==6431== Address 0x46890c4 is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x419875F​: MVM_nfg_crlf_grapheme (nfg.c​:232)

==6431== by 0x419414F​: MVM_string_decode_stream_sep_default
(decode_stream.c​:522)

==6431== by 0x411A614​: MVM_io_syncstream_from_uvstream (syncstream.c​:347)

==6431== by 0x411C9BD​: MVM_file_get_stdstream (fileops.c​:357)

==6431== by 0x41BC68F​: setup_std_handles (moar.c​:270)

==6431== by 0x41BC644​: MVM_vm_create_instance (moar.c​:260)

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== by 0x4195BAF​: MVM_string_utf8_decode (utf8.c​:200)

==6431== Address 0x88fff04 is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431==

==6431== Invalid free() / delete / delete[] / realloc()

==6431== at 0x41060AD​: MVM_fixed_size_free_at_safepoint
(fixedsizealloc.c​:286)

==6431== by 0x41983DE​: twiddle_trie_node (nfg.c​:132)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431== by 0x41952D0​: MVM_unicode_normalizer_process_codepoint_to_grapheme
(normalize.h​:119)

==6431== Address 0x890006c is 0 bytes inside a block of size 16
client-defined

==6431== at 0x4105C0D​: alloc_slow_path (fixedsizealloc.c​:131)

==6431== by 0x4105D98​: MVM_fixed_size_alloc (fixedsizealloc.c​:181)

==6431== by 0x41980D0​: twiddle_trie_node (nfg.c​:46)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198142​: twiddle_trie_node (nfg.c​:52)

==6431== by 0x4198427​: add_synthetic_to_trie (nfg.c​:138)

==6431== by 0x4198604​: add_synthetic (nfg.c​:188)

==6431== by 0x419869A​: lookup_or_add_synthetic (nfg.c​:202)

==6431== by 0x41986F1​: MVM_nfg_codes_to_grapheme (nfg.c​:217)

==6431== by 0x41AD211​: grapheme_composition (normalize.c​:558)

==6431== by 0x41AD5B9​: MVM_unicode_normalizer_process_codepoint_full
(normalize.c​:661)

==6431== by 0x41952A4​: MVM_unicode_normalizer_process_codepoint
(normalize.h​:111)

==6431==

Hello World

==6431==

==6431== HEAP SUMMARY​:

==6431== in use at exit​: 152,880 bytes in 38,808 blocks

==6431== total heap usage​: 321,135 allocs, 221,719 frees, 46,550,757 bytes
allocated

==6431==

==6431== LEAK SUMMARY​:

==6431== definitely lost​: 5,454 bytes in 34,380 blocks

==6431== indirectly lost​: 14,040 bytes in 668 blocks

==6431== possibly lost​: 120,032 bytes in 3,751 blocks

==6431== still reachable​: 13,354 bytes in 9 blocks

==6431== suppressed​: 0 bytes in 0 blocks

==6431== Rerun with --leak-check=full to see details of leaked memory

==6431==

==6431== For counts of detected and suppressed errors, rerun with​: -v

==6431== ERROR SUMMARY​: 8 errors from 3 contexts (suppressed​: 0 from 0)

This was fixed by dogbert17++ in​: MoarVM/MoarVM@bf777f6

Since it was originally golfed from a spectest that was exploding on 32-bit, then we can consider this test-covered and close it.

@p6rt
Copy link
Author

p6rt commented Nov 30, 2016

The RT System itself - Status changed from 'new' to 'open'

@p6rt
Copy link
Author

p6rt commented Nov 30, 2016

@jnthn - Status changed from 'open' to 'resolved'

@p6rt p6rt closed this as completed Nov 30, 2016
@p6rt p6rt added the Bug label Jan 5, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant