# New Ticket Created by  "jason switzer" 
# Please include the string:  [perl #57776]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=57776 >


[EMAIL PROTECTED] perl6 $ gdb ./perl6
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu"...
(gdb) b io_buf.c:505
No source file named io_buf.c.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (io_buf.c:505) pending.
(gdb) r
Starting program: /home/s1n/Projects/parrot/languages/perl6/perl6 
[Thread debugging using libthread_db enabled]
warning: Lowest section in /usr/lib64/libicudata.so.38 is .hash at 
0000000000000190
[New Thread 0x7f932da20740 (LWP 20080)]
> slurp "t/"
[Switching to Thread 0x7f932da20740 (LWP 20080)]

Breakpoint 1, PIO_buf_read (interp=0x9195a0, layer=0xc51f40, io=0x1394f80, 
buf=0x7fff35b5a510) at src/io/io_buf.c:505
505             memcpy(out_buf, b->next, current);
(gdb) i lo
avail = 18446744073709547519
l = (ParrotIOLayer *) 0xc51f40
b = (ParrotIOBuf *) 0x1394fb8
out_buf = (unsigned char *) 0x15c87e8 ""
s = (STRING *) 0x7f932640a3b0
len = 4096
current = 4096
(gdb) p b      
$1 = (ParrotIOBuf *) 0x1394fb8
(gdb) p *b
$2 = {flags = 3, size = 8192, startb = 0x1367150 "", endb = 0x136714f "", next 
= 0x1368150 "\020\020"}
(gdb) c
Continuing.

Breakpoint 1, PIO_buf_read (interp=0x9195a0, layer=0xc51f40, io=0x1394f80, 
buf=0x7fff35b5a510) at src/io/io_buf.c:505
505             memcpy(out_buf, b->next, current);
(gdb) dis
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
0x00007f9329f80dab in memcpy () from /lib/libc.so.6
(gdb) bt
#0  0x00007f9329f80dab in memcpy () from /lib/libc.so.6
#1  0x00007f932d4e503f in PIO_buf_read (interp=0x9195a0, layer=0xc51f40, 
io=0x1394f80, buf=0x7fff35b5a510)
    at src/io/io_buf.c:505
#2  0x00007f932d4e85a9 in PIO_read_down (interp=0x9195a0, layer=0xc51f40, 
io=0x1394f80, buf=0x7fff35b5a510)
    at src/io/io_passdown.c:229
#3  0x00007f932d4e3b3f in PIO_reads (interp=0x9195a0, pmc=0x7f9326b41988, 
len=4096) at src/io/io.c:866
#4  0x00007f932d505045 in Parrot_ParrotIO_nci_slurp (interp=0x9195a0, 
pmc=0xbf6b08) at ./src/pmc/parrotio.pmc:313
#5  0x00007f932d51d8c5 in Parrot_NCI_invoke (interp=0x9195a0, pmc=0xbf6b08, 
next=0x7f93278c4e60) at ./src/pmc/nci.pmc:203
#6  0x00007f932d3a6474 in Parrot_callmethodcc_p_sc (cur_opcode=0x7f93278c4e48, 
interp=0x9195a0) at src/ops/object.ops:78
#7  0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f93278c4e48) 
at src/runops_cores.c:222
#8  0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#9  0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#10 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0x134fd10, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5a840) at src/inter_run.c:223
#11 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0x134fd10, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#12 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0x134f8e8) at src/exceptions.c:292
#13 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#14 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0x134fbf8) 
at src/oo.c:632
#15 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0x134fbf8) at src/oo.c:662
#16 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, 
self=0x134fb50, info=0x134f958) at ./src/pmc/class.pmc:222
#17 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, 
pmc=0x134fb50, init_data=0x134fbf8)
    at ./src/pmc/class.pmc:512
#18 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0x134fbf8) at src/pmc.c:368
#19 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#20 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#21 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#22 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
---Type <return> to continue, or q <return> to quit---
#23 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xf97538, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5ae40) at src/inter_run.c:223
#24 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xf97538, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#25 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xf97180) at src/exceptions.c:292
#26 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#27 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xf97420) 
at src/oo.c:632
#28 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xf97420) at src/oo.c:662
#29 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xf97378, 
info=0xf971b8) at ./src/pmc/class.pmc:222
#30 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xf97378, 
init_data=0xf97420)
    at ./src/pmc/class.pmc:512
#31 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xf97420) at src/pmc.c:368
#32 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#33 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#34 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#35 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#36 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfc05e8, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5b440) at src/inter_run.c:223
#37 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfc05e8, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#38 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfc0230) at src/exceptions.c:292
#39 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#40 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfc04d0) 
at src/oo.c:632
#41 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfc04d0) at src/oo.c:662
#42 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xfc0428, 
info=0xfc0268) at ./src/pmc/class.pmc:222
#43 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xfc0428, 
init_data=0xfc04d0)
    at ./src/pmc/class.pmc:512
---Type <return> to continue, or q <return> to quit---
#44 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfc04d0) at src/pmc.c:368
#45 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#46 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#47 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#48 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#49 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfc6238, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5ba40) at src/inter_run.c:223
#50 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfc6238, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#51 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfc5e48) at src/exceptions.c:292
#52 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#53 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfc6120) 
at src/oo.c:632
#54 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfc6120) at src/oo.c:662
#55 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xfc6078, 
info=0xfc5e80) at ./src/pmc/class.pmc:222
#56 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xfc6078, 
init_data=0xfc6120)
    at ./src/pmc/class.pmc:512
#57 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfc6120) at src/pmc.c:368
#58 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#59 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#60 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#61 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#62 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfc9290, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5c040) at src/inter_run.c:223
#63 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfc9290, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#64 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfc8ed8) at src/exceptions.c:292
#65 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
---Type <return> to continue, or q <return> to quit---
#66 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfc9178) 
at src/oo.c:632
#67 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfc9178) at src/oo.c:662
#68 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xfc90d0, 
info=0xfc8f10) at ./src/pmc/class.pmc:222
#69 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xfc90d0, 
init_data=0xfc9178)
    at ./src/pmc/class.pmc:512
#70 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfc9178) at src/pmc.c:368
#71 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#72 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#73 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#74 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#75 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfcc978, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5c640) at src/inter_run.c:223
#76 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfcc978, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#77 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfcc5c0) at src/exceptions.c:292
#78 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#79 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfcc860) 
at src/oo.c:632
#80 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfcc860) at src/oo.c:662
#81 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xfcc7b8, 
info=0xfcc5f8) at ./src/pmc/class.pmc:222
#82 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xfcc7b8, 
init_data=0xfcc860)
    at ./src/pmc/class.pmc:512
#83 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfcc860) at src/pmc.c:368
#84 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#85 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#86 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#87 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#88 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfd07d0, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5cc40) at src/inter_run.c:223
---Type <return> to continue, or q <return> to quit---
#89 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfd07d0, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#90 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfd0418) at src/exceptions.c:292
#91 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#92 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfd06b8) 
at src/oo.c:632
#93 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfd06b8) at src/oo.c:662
#94 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, self=0xfd0610, 
info=0xfd0450) at ./src/pmc/class.pmc:222
#95 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, pmc=0xfd0610, 
init_data=0xfd06b8)
    at ./src/pmc/class.pmc:512
#96 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfd06b8) at src/pmc.c:368
#97 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
#98 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, pc=0x7f9325ece538) 
at src/runops_cores.c:222
#99 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=3289) at 
src/interpreter.c:933
#100 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=3289) at 
src/inter_run.c:101
#101 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0xfd7840, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ef34 "vPS", ap=0x7fff35b5d240) at src/inter_run.c:223
#102 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0xfd7840, sig=0x7f932d60ef34 "vPS")
    at src/inter_run.c:295
#103 0x00007f932d3ff58a in Parrot_ex_throw_from_c (interp=0x9195a0, 
exception=0xfd7488) at src/exceptions.c:292
#104 0x00007f932d3ff71e in Parrot_ex_throw_from_c_args (interp=0x9195a0, 
ret_addr=0x0, exitcode=20, 
    format=0x7f932d612168 "Class %Ss already registered!\n") at 
src/exceptions.c:339
#105 0x00007f932d4464eb in fail_if_type_exists (interp=0x9195a0, name=0xfd7728) 
at src/oo.c:632
#106 0x00007f932d44654d in Parrot_oo_register_type (interp=0x9195a0, 
name=0xfd7728) at src/oo.c:662
#107 0x00007f932d56ccc6 in init_class_from_hash (interp=0x9195a0, 
self=0xfd7680, info=0xfd74c0) at ./src/pmc/class.pmc:222
#108 0x00007f932d56e810 in Parrot_Class_init_pmc (interp=0x9195a0, 
pmc=0xfd7680, init_data=0xfd7728)
    at ./src/pmc/class.pmc:512
#109 0x00007f932d452bd2 in pmc_new_init (interp=0x9195a0, base_type=47, 
init=0xfd7728) at src/pmc.c:368
#110 0x00007f932d3a799e in Parrot_newclass_p_p (cur_opcode=0x7f9325ece538, 
interp=0x9195a0) at src/ops/object.ops:249
---Type <return> to continue, or q <return> to quit---
#111 0x00007f932d45367f in runops_slow_core (interp=0x9195a0, 
pc=0x7f9325ece538) at src/runops_cores.c:222
#112 0x00007f932d415fe4 in runops_int (interp=0x9195a0, offset=15157) at 
src/interpreter.c:933
#113 0x00007f932d4169d3 in runops (interp=0x9195a0, offs=15157) at 
src/inter_run.c:101
#114 0x00007f932d416c8a in runops_args (interp=0x9195a0, sub=0x7f9326b30310, 
obj=0x9860f0, meth_unused=0x0, 
    sig=0x7f932d60ec0b "vP", ap=0x7fff35b5d840) at src/inter_run.c:223
#115 0x00007f932d416e7b in Parrot_runops_fromc_args (interp=0x9195a0, 
sub=0x7f9326b30310, sig=0x7f932d60ec0b "vP")
    at src/inter_run.c:295
#116 0x00007f932d3fca3e in Parrot_runcode (interp=0x9195a0, argc=1, 
argv=0x7fff35b5da78) at src/embed.c:951
#117 0x0000000000400d6d in main ()
When running some tests for perl6, I spotted a case where parrot was
crashing. The segfault can be spotted in
languages/perl6/t/spec/S16-unfiled/slurp.t. Specifically, the following
perl6 code crashes parrot:

slurp "t/"

Testing this further, I found the crash in PIO_buf_read in src/io/io_buf.c.
Attached is a backtrace where the bug occurs. Also of notice is the
following that was spotted in almost every breakpoint:

Breakpoint 1, PIO_buf_read (interp=0x9195a0, layer=0xc51f40, io=0x1394f80,
buf=0x7fff35b5a510) at src/io/io_buf.c:505
505            memcpy(out_buf, b->next, current);
(gdb) i lo
avail = 18446744073709547519
l = (ParrotIOLayer *) 0xc51f40
b = (ParrotIOBuf *) 0x1394fb8
out_buf = (unsigned char *) 0x15c87e8 ""
s = (STRING *) 0x7f932640a3b0
len = 4096
current = 4096
(gdb) p b
$1 = (ParrotIOBuf *) 0x1394fb8
(gdb) p *b
$2 = {flags = 3, size = 8192, startb = 0x1367150 "", endb = 0x136714f "",
next = 0x1368150 "\020\020"}

Notice how io_buf.c:502 does the following to determine available bytes (I
assume that's what it's doing):

const size_t avail = b->endb - b->next

This is a negative number that is monotonically decreasing, as evident in
the inspection of the ParrotIOBuf. I should also point out I am running an
amd64 system.

I'm not sure what else perl6 is doing, but when this continues (breakpoint
is hit plenty of times), it'll eventually segfault. I don't know enough
about the parrot IO system to provide a patch, but I'm guessing it might be
related to my architecture. More information and testing is available if
needed.

Thanks,

Jason "s1n" Switzer

Reply via email to