Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.85k stars 527 forks source link

C stack overflow in Perl_scalarvoid #11866

Closed p5pRT closed 4 years ago

p5pRT commented 12 years ago

Migrated from rt.perl.org#108276 (status was 'open')

Searchable as RT108276$

p5pRT commented 12 years ago

From @bulk88

Created by @bulk88

Perl lexer (???) has a deep recursion bug in Perl_scalarvoid when given a very large Perl subroutine to run.  Perl_scalarvoid calls itself over and over\, for what I blindly guess is every opcode in the sub.  If there are too many opcodes\, C stack overflows.

I could not replicate this with any stock ActivePerl (AP 5.10.0\, AP 5.12.3).  While the test script is running\, ActivePerls peak at 8 MB on the C stack.  I checked with VMMAP.  If I lower the stack reserve from 16 MB to 256KB in the PE header on perl.exe from ActivePerls\, I will get the same exact Perl_scalarvoid stack overflow.  There is no reason for the interpreter to peak at many MBs of C stack\, which is irreversibly expanded (there are OS specific ways to shrink C stacks.... I know it can be done with VirtualFree and VirtualAlloc on Windows\, but that is the wrong way to fix C stack recursion) and wasted\, never to be used again after BEGIN blocks run.  I have not tested doing the "require" at runtime.  On other perl scripts and apps I run\, all the interpreter (APs and my compiled Perl) peak at 20-50KB of C stack which is fine.  I assume that the reason that my self-compiled Perl will stack overflow at 16MB and ActivePerls do not is because of high C stack overhead of each recursive Perl_scalarvoid when Perl is compiled with -Od (no registers) meanwhile ActivePerls are compiled with -O1 (small code).

I wrote this test script to test how efficient Perl is at returning memory to the OS after a Perl Module is "use"d and if\, and how well\, memory behind the BEGIN blocks (SVs\, CVs\, Opcodes\, pads\, raw malloced blocks) is returned to the OS.  If I lower the 100000 to 50000 in the test script\, the script will run without a stack overflow.  On sucessful runs\, malloced memory went down from ~60MB inside the module BEGIN block (at "print "after branches\n";") to ~3MB at runtime ("print "in main\n";" ) according to VMMAP (private/yellow memory).  C Stack remained at many MBs (7 to 8MB at 50000 in test script).

Perl_scalarvoid\, whatever it does to opcodes\, should run in a loop down the optree\, not recursively on every opcode and thus eating away the C stack.  I request that the above-reported bug be fixed.

Perl Info ``` Flags:     category=core     severity=high Site configuration information for perl 5.12.2: Configured by Owner at Wed Mar 23 08:05:23 2011. Summary of my perl5 (revision 5 version 12 subversion 2) configuration:      Platform:     osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread     uname=''     config_args='undef'     hint=recommended, useposix=true, d_sigaction=undef     useithreads=define, usemultiplicity=define     useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef     use64bitint=undef, use64bitall=undef, uselongdouble=undef     usemymalloc=n, bincompat5005=undef   Compiler:     cc='cl', ccflags ='-nologo -GF -W3 -Od -MD -Zi -DDEBUGGING -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT  -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO',     optimize='-Od -MD -Zi -DDEBUGGING',     cppflags='-DWIN32'     ccversion='13.10.3077', gccversion='', gccosandvers=''     intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234     d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8     ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8     alignbytes=8, prototype=define   Linker and Libraries:     ld='link', ldflags ='-nologo -nodefaultlib -debug  -libpath:"c:\perl512\lib\CORE"  -machine:x86'     libpth="c:\Program Files\Microsoft Visual Studio .NET 2003\VC7\lib"     libs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib     perllibs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib     libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl512.lib     gnulibc_version=''   Dynamic Linking:     dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '     cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug  -libpath:"c:\perl512\lib\CORE"  -machine:x86' Locally applied patches:     @INC for perl 5.12.2:     C:/perl512/site/lib     C:/perl512/lib     . Environment for perl 5.12.2:     HOME (unset)     LANG (unset)     LANGUAGE (unset)     LD_LIBRARY_PATH (unset)     LOGDIR (unset)     PATH=C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\BIN;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\bin;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\perl512\bin;C:\sources\glibbin\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem;C:\Perl\site\bin;C:\Perl\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin;C:\cygwin\bin;     PERL_BADLANG (unset)     PERL_DEBUG_MSTATS=2     SHELL (unset) ```
p5pRT commented 12 years ago

From @bulk88

included pics of VS debugger and opcode structs\, the pp_cond_expr and pp_null only 2 things inthe recursive pattern\, also added full C stack trace\, and added the test Perl script that generates these stack overflows

p5pRT commented 12 years ago

From @bulk88

stk.pl

p5pRT commented 12 years ago

From @bulk88

perlstk1.PNG

p5pRT commented 12 years ago

From @bulk88

perlstk2.png

p5pRT commented 12 years ago

From @bulk88

perlstackcrash.txt

p5pRT commented 12 years ago

@bulk88 - Status changed from 'new' to 'open'

p5pRT commented 12 years ago

From @jkeenan

On Sun Jan 15 10​:35​:13 2012\, bulk88 wrote​:

Perl lexer (???) has a deep recursion bug in Perl_scalarvoid when given a very large Perl subroutine to run.� Perl_scalarvoid calls itself over and over\, for what I blindly guess is every opcode in the sub.� If there are too many opcodes\, C stack overflows.

I could not replicate this with any stock ActivePerl (AP 5.10.0\, AP 5.12.3).� While the test script is running\, ActivePerls peak at 8 MB on the C stack.� I checked with VMMAP.� If I lower the stack reserve from 16 MB to 256KB in the PE header on perl.exe from ActivePerls\, I will get the same exact Perl_scalarvoid stack overflow.� There is no reason for the interpreter to peak at many MBs of C stack\, which is irreversibly expanded (there are OS specific ways to shrink C stacks.... I know it can be done with VirtualFree and VirtualAlloc on Windows\, but that is the wrong way to fix C stack recursion) and wasted\, never to be used again after BEGIN blocks run.� I have not tested doing the "require" at runtime.� On other perl scripts and apps I run\, all the interpreter (APs and my compiled Perl) peak at 20-50KB of C stack which is fine.� I assume that the reason that my self-compiled Perl will stack overflow at 16MB and ActivePerls do not is because of high C stack overhead of each recursive Perl_scalarvoid when Perl is compiled with -Od (no registers) meanwhile ActivePerls are compiled with -O1 (small code).

I wrote this test script to test how efficient Perl is at returning memory to the OS after a Perl Module is "use"d and if\, and how well\, memory behind the BEGIN blocks (SVs\, CVs\, Opcodes\, pads\, raw malloced blocks) is returned to the OS.� If I lower the 100000 to 50000 in the test script\, the script will run without a stack overflow.� On sucessful runs\, malloced memory went down from ~60MB inside the module BEGIN block (at "print "after branches\n";") to ~3MB at runtime ("print "in main\n";" ) according to VMMAP (private/yellow memory).� C Stack remained at many MBs (7 to 8MB at 50000 in test script).

Perl_scalarvoid\, whatever it does to opcodes\, should run in a loop down the optree\, not recursively on every opcode and thus eating away the C stack.� I request that the above-reported bug be fixed.

1. I modified the test program you wrote to take the number of iterations from the command-line rather than having it hard-coded. I then ran the program on the two OSes to which I have access\, Darwin and Linux. In both cases\, the program failed.

$ perl 108276_stk.pl 10 number​: 10 before require Can't exec "pause"​: No such file or directory at 108276_stk.pl line 23. 10after branches Can't exec "pause"​: No such file or directory at testmod1326659374.pm line 14. in main Can't exec "pause"​: No such file or directory at 108276_stk.pl line 27.

'pause' is not an installed executable on those platforms (though it has a man page as a C library function).

Could you modify your program to avoid the use of 'pause'? That would enable more people to run it.

2. While the screenshots you posted via the RT GUI are displaying\, I suspect they won't show up on the perl5-porters mailing list or newsgroup.

Thank you for your report. Jim Keenan

p5pRT commented 12 years ago

From @jkeenan

108276_stk.pl

p5pRT commented 12 years ago

From @cpansprout

On Sun Jan 15 12​:58​:36 2012\, jkeenan wrote​:

On Sun Jan 15 10​:35​:13 2012\, bulk88 wrote​:

Perl lexer (???) has a deep recursion bug in Perl_scalarvoid when given a very large Perl subroutine to run.� Perl_scalarvoid calls itself over and over\, for what I blindly guess is every opcode in the sub.� If there are too many opcodes\, C stack overflows.

I could not replicate this with any stock ActivePerl (AP 5.10.0\, AP 5.12.3).� While the test script is running\, ActivePerls peak at 8 MB on the C stack.� I checked with VMMAP.� If I lower the stack reserve from 16 MB to 256KB in the PE header on perl.exe from ActivePerls\, I will get the same exact Perl_scalarvoid stack overflow.� There is no reason for the interpreter to peak at many MBs of C stack\, which is irreversibly expanded (there are OS specific ways to shrink C stacks.... I know it can be done with VirtualFree and VirtualAlloc on Windows\, but that is the wrong way to fix C stack recursion) and wasted\, never to be used again after BEGIN blocks run.� I have not tested doing the "require" at runtime.� On other perl scripts and apps I run\, all the interpreter (APs and my compiled Perl) peak at 20-50KB of C stack which is fine.� I assume that the reason that my self-compiled Perl will stack overflow at 16MB and ActivePerls do not is because of high C stack overhead of each recursive Perl_scalarvoid when Perl is compiled with -Od (no registers) meanwhile ActivePerls are compiled with -O1 (small code).

I wrote this test script to test how efficient Perl is at returning memory to the OS after a Perl Module is "use"d and if\, and how well\, memory behind the BEGIN blocks (SVs\, CVs\, Opcodes\, pads\, raw malloced blocks) is returned to the OS.� If I lower the 100000 to 50000 in the test script\, the script will run without a stack overflow.� On sucessful runs\, malloced memory went down from ~60MB inside the module BEGIN block (at "print "after branches\n";") to ~3MB at runtime ("print "in main\n";" ) according to VMMAP (private/yellow memory).� C Stack remained at many MBs (7 to 8MB at 50000 in test script).

Perl_scalarvoid\, whatever it does to opcodes\, should run in a loop down the optree\, not recursively on every opcode and thus eating away the C stack.� I request that the above-reported bug be fixed.

1. I modified the test program you wrote to take the number of iterations from the command-line rather than having it hard-coded. I then ran the program on the two OSes to which I have access\, Darwin and Linux. In both cases\, the program failed.

$ perl 108276_stk.pl 10 number​: 10 before require Can't exec "pause"​: No such file or directory at 108276_stk.pl line 23. 10after branches Can't exec "pause"​: No such file or directory at testmod1326659374.pm line 14. in main Can't exec "pause"​: No such file or directory at 108276_stk.pl line 27.

'pause' is not an installed executable on those platforms (though it has a man page as a C library function).

Could you modify your program to avoid the use of 'pause'? That would enable more people to run it.

I haven’t used Windows for a long\, long time (except IE for web testing)\, but if I remember correctly the pause command prints ‘Press the "any" key to continue...’ and waits for a keystroke before exiting.

Changing system("pause") to​:

  system("perl -e '$|=1; print q|Press return to continue... |; \<>'")

should work.

--

Father Chrysostomos

p5pRT commented 12 years ago

From @bulk88

On Sun Jan 15 13​:16​:04 2012\, sprout wrote​:

I haven’t used Windows for a long\, long time (except IE for web testing)\, but if I remember correctly the pause command prints ‘Press the "any" key to continue...’ and waits for a keystroke before exiting.

Changing system("pause") to​:

system\("perl \-e '$|=1; print q|Press return to continue\.\.\. |; \<>'"\)

should work.

Google says "pause" equivalent on POSIX is "echo -n "Press any key to continue . . ." && read -n 1". The system("pause") lines are the points I suggest to look at memory usage of the Perl process. Not sure if there are any tools that can show reserved size of stack vs allocated amount of stack in virtual memory system on Linux/Unix. I used VMMAP for Windows to get the memory counts.

p5pRT commented 12 years ago

From [Unknown Contact. See original ticket]

On Sun Jan 15 13​:16​:04 2012\, sprout wrote​:

I haven’t used Windows for a long\, long time (except IE for web testing)\, but if I remember correctly the pause command prints ‘Press the "any" key to continue...’ and waits for a keystroke before exiting.

Changing system("pause") to​:

system\("perl \-e '$|=1; print q|Press return to continue\.\.\. |; \<>'"\)

should work.

Google says "pause" equivalent on POSIX is "echo -n "Press any key to continue . . ." && read -n 1". The system("pause") lines are the points I suggest to look at memory usage of the Perl process. Not sure if there are any tools that can show reserved size of stack vs allocated amount of stack in virtual memory system on Linux/Unix. I used VMMAP for Windows to get the memory counts.

p5pRT commented 12 years ago

From @iabyn

On Sun\, Jan 15\, 2012 at 10​:35​:14AM -0800\, bulk 88 wrote​:

The code can be simplified to the following​:

  my $n = $ARGV[0];   die unless $n =~ /^\d+$/;

  my $code = 'my $i = 0; if ($i) { print }' . "\n";   $code .= 'elsif ($i) { print }' . "\n" for 1..$n;   eval $code;

segfaults for me on blead with n >= about 5000.

In blead\, it's recursing in S_finalize_op rather than scalarvoid; not sure whether this is instead of or in addition to a scalarvoid problem.

-- "But Sidley Park is already a picture\, and a most amiable picture too. The slopes are green and gentle. The trees are companionably grouped at intervals that show them to advantage. The rill is a serpentine ribbon unwound from the lake peaceably contained by meadows on which the right amount of sheep are tastefully arranged." -- Lady Croom\, "Arcadia"

p5pRT commented 12 years ago

From @cpansprout

On Mon Jan 16 03​:51​:55 2012\, davem wrote​:

On Sun\, Jan 15\, 2012 at 10​:35​:14AM -0800\, bulk 88 wrote​:

The code can be simplified to the following​:

my $n = $ARGV\[0\];
die unless $n =~ /^\\d\+$/;

my $code = 'my $i = 0; if \($i\) \{ print \}' \. "\\n";
$code \.= 'elsif \($i\) \{ print \}' \. "\\n" for 1\.\.$n;
eval $code;

segfaults for me on blead with n >= about 5000.

In blead\, it's recursing in S_finalize_op rather than scalarvoid; not sure whether this is instead of or in addition to a scalarvoid problem.

Without actually looking\, I suspect it is in addition.

As I’m sure you already know\, each elsif is nested inside the previous one in the op tree.

So it looks as though at least S_finalize_op needs to be made iterative\, and probably scalarvoid\, too.

And this results in a crash in op_free​:

perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

What else needs to be made iterative?

--

Father Chrysostomos

p5pRT commented 12 years ago

From @bulk88

On Fri Jan 20 09​:38​:48 2012\, sprout wrote​:

So it looks as though at least S_finalize_op needs to be made iterative\, and probably scalarvoid\, too.

And this results in a crash in op_free​:

perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

What else needs to be made iterative?

I decided to run Perl's test suite on my c stack reduced perl. First one found is on parset.t\, there are many more on my list to analyze\, I see one in comp/proto.t that I am working on getting a stack trace of right now.

Perl_peep\, when running

  cop_line 111 unsigned long + cop_file 0x018332bc "C​:\perl-5.12.2\t\comp\parser.t"

p5pRT commented 12 years ago

From @bulk88

perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845b44) Line 8479 + 0x3 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845af8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845a58) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018459b8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845918) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845878) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018457d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845738) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845698) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018455f8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845558) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018454b8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845418) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845378) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018452d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845238) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845198) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018450f8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01845058) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844fb8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844f18) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844e78) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844dd8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844d38) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844c98) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844bf8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844b58) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844ab8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844a18) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844978) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018448d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848e88) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848de8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848d48) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848ca8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848c08) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848b68) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848ac8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848a28) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848988) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018488e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848848) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018487a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848708) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848668) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018485c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848528) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848488) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018483e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848348) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018482a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848208) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848168) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018480c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848028) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847f88) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847ee8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847e48) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847da8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847d08) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847c68) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847bc8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847b28) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847a88) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018479e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847948) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018478a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847808) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847768) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018476c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847628) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847588) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018474e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847448) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018473a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847308) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847268) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018471c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847128) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847088) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01846fe8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01846f48) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018549f8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854958) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018548b8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854818) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854778) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018546d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854638) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854598) Line 8729 + 0x13 C   perl512.dll!Perl_newPROG(interpreter * my_perl=0x0035403c\, op * o=0x01837a60) Line 2365 + 0x17 C   perl512.dll!Perl_yyparse(interpreter * my_perl=0x0035403c) Line 143 + 0x2c C   perl512.dll!S_parse_body(interpreter * my_perl=0x0035403c\, char * * env=0x002428f8\, void (interpreter *)* xsinit=0x281d2260) Line 2160 + 0x9 C   perl512.dll!perl_parse(interpreter * my_perl=0x0035403c\, void (interpreter *)* xsinit=0x281d2260\, int argc=0x00000002\, char * * argv=0x00242510\, char * * env=0x002428f8) Line 1605 + 0x11 C   perl512.dll!RunPerl(int argc=0x00000002\, char * * argv=0x00242510\, char * * env=0x002428f8) Line 263 + 0x1a C++   perl.exe!main(int argc=0x00000002\, char * * argv=0x00242510\, char * * env=0x00242d48) Line 73 + 0x12 C   perl.exe!mainCRTStartup() Line 398 + 0xe C   kernel32.dll!_BaseProcessStart@​4() + 0x23

p5pRT commented 12 years ago

From @bulk88

/t/cmd/for.t Overflow in Peep at   cop_line 462 unsigned long + cop_file 0x0186ed8c "C​:\perl-5.12.2\t\cmd\for.t" char * /t/io/fs.t overflow in peep at   cop_line 416 unsigned long + cop_file 0x0193b074 "C​:\perl-5.12.2\t\io\fs.t" char * overflow in peep at /t/re/pat_advanced.t   cop_line 832 unsigned long + cop_file 0x01add1b4 "C​:\perl-5.12.2\t\re\pat_advanced.t" char * half the re folder failed at 28KB stack size\, im not going to analyze them unless someone wants me to\, i guess they are all peeps /t/op/pack.t overflow in S_group_end\, this is interesting\, i set stack to 81920 bytes long\, not 28KB\, at 28KB this overflowed in peek   cop_line 1230 unsigned long + cop_file 0x01bc671c "C​:\perl-5.12.2\t\op\pack.t" char *

I killed "perl harness " when it started running cpan folder tests. I also include the way I change the c stack size for these tests. I modified perlmain.c . PLSTK is the number of pages you want the c stack to be long. I wrote the code for 32 bit windows only. If someone wants me to try something specific\, reply to the bug\, I have no other ideas for figuring out what has bad C stack recursion in perl.

p5pRT commented 12 years ago

From @bulk88

re.pat_advanced.t.stk.pl

p5pRT commented 12 years ago

From @bulk88

#include "EXTERN.h"
#include "perl.h"
#define _WIN32_WINNT 0x0400
#include <windows.h>

#ifdef __GNUC__

/* Mingw32 defaults to globing command line 
 * This is inconsistent with other Win32 ports and 
 * seems to cause trouble with passing -DXSVERSION=\"1.6\" 
 * So we turn it off like this, but only when compiling
 * perlmain.c: perlmainst.c is linked into the same executable
 * as win32.c, which also does this, so we mustn't do it twice
 * otherwise we get a multiple definition error.
 */
#ifndef PERLDLL
int _CRT_glob = 0;
#endif

#endif

DWORD FilterFunction(LPEXCEPTION_POINTERS exceptionPtr) 
{ 
    printf("1 ");                     // printed first 
    return EXCEPTION_EXECUTE_HANDLER; 
} 

int
main(int argc, char **argv, char **env)
{
    char * stackSizeEnv = getenv("PLSTK");
    int newStackSize = 0;
    DWORD oldProtect;
    PBYTE pPtr;
    MEMORY_BASIC_INFORMATION infoRes;
    MEMORY_BASIC_INFORMATION infoGuard;
    MEMORY_BASIC_INFORMATION infoAlloc;
    DWORD_PTR stackEnd;
    DWORD_PTR stackAllocBegin;
    BOOL ret;
    __asm mov pPtr, esp
    if(stackSizeEnv) {
        newStackSize = atoi(stackSizeEnv);
    }
    else {
        newStackSize = 7;
    }
    if(newStackSize) {
        assert(VirtualQuery(pPtr, &infoRes, 
               sizeof(MEMORY_BASIC_INFORMATION)));
        assert(VirtualQuery((DWORD_PTR)infoRes.AllocationBase, &infoRes, 
                sizeof(MEMORY_BASIC_INFORMATION)));
        assert(VirtualQuery((DWORD_PTR)infoRes.AllocationBase+infoRes.RegionSize, &infoGuard, 
            sizeof(MEMORY_BASIC_INFORMATION)));
        assert(VirtualQuery((DWORD_PTR)infoRes.AllocationBase+infoRes.RegionSize
                            +infoGuard.RegionSize, &infoAlloc, 
            sizeof(MEMORY_BASIC_INFORMATION)));
        stackEnd = (DWORD_PTR)infoRes.AllocationBase+infoRes.RegionSize
                            +infoGuard.RegionSize+infoAlloc.RegionSize;
        stackAllocBegin = stackEnd-(newStackSize*4096);
        ret = VirtualAlloc(stackAllocBegin, (newStackSize*4096), MEM_COMMIT, PAGE_READWRITE);
        //ret = VirtualProtect(stackAllocBegin, (newStackSize*4096),
        //                        PAGE_READWRITE, &oldProtect);
        //printf("vp ret=%u glr=%u\n", ret, GetLastError());
        ret = VirtualAlloc(stackAllocBegin-(4096*2), (4096*2), MEM_COMMIT, PAGE_NOACCESS);
        //printf("vp ret=%u glr=%u\n", ret, GetLastError());
        //ret = VirtualProtect(stackEnd-(newStackSize*4096)-4096, 4096,
        //                        PAGE_NOACCESS, &oldProtect);
        //printf("vp ret=%u glr=%u\n", ret, GetLastError());
        //while( ! (stMemBasicInfo.Protect & PAGE_GUARD)) {
        //    assert(VirtualQuery((DWORD_PTR)stMemBasicInfo.BaseAddress-1, &stMemBasicInfo, 
        //           sizeof(stMemBasicInfo)));        
        //}
        //assert(VirtualProtect(stMemBasicInfo.BaseAddress, stMemBasicInfo.RegionSize,
        //                        PAGE_NOACCESS, &oldProtect));
        //assert(VirtualQuery((DWORD_PTR)stMemBasicInfo.BaseAddress-1, &stMemBasicInfo, 
        //       sizeof(stMemBasicInfo)));
        //assert(VirtualFree((DWORD_PTR)stMemBasicInfo.AllocationBase, 
        //           0, MEM_RELEASE));
    }
    if(0) {
        exit(1);
    }
    __try {
    ret = RunPerl(argc, argv, env);
    }
    __except(FilterFunction(GetExceptionInformation())) {
    ret = 1;
    }
    return ret;
}
p5pRT commented 12 years ago

From @bulk88

  ntdll.dll!_RtlFreeHeap@​12() + 0x1763f
  msvcrt.dll!_free() + 0xc3
  perl512.dll!VMem​::Free(void * pMem=0x0193ae34) Line 229 + 0xa C++   perl512.dll!CPerlHost​::Free(void * ptr=0x0193ae34) Line 68 + 0x22 C++   perl512.dll!PerlMemFree(IPerlMem * piPerl=0x00245b6c\, void * ptr=0x0193ae34) Line 311 C++   perl512.dll!Perl_safesysfree(void * where=0x0193ae34) Line 262 + 0x1a C   perl512.dll!Perl_sv_clear(interpreter * my_perl=0x0035403c\, sv * const sv=0x0192e964) Line 5865 + 0xc C   perl512.dll!Perl_sv_free2(interpreter * my_perl=0x0035403c\, sv * const sv=0x0192e964) Line 5985 + 0xd C   perl512.dll!Perl_sv_free(interpreter * my_perl=0x0035403c\, sv * const sv=0x0192e964) Line 5962 + 0xd C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193a14c) Line 8784 + 0xd C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019396a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193a75c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193a660) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193aae0) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019353d4) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01935988) Line 8671 + 0x13 C

perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193588c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01936014) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193a3b4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01936364) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019362bc) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019366e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01931d78) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019322c4) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019328f8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0193a314) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01932e94) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192bb9c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192bdac) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192bde8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01933290) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192c040) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192cbc8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192cd34) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192cdac) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192c7bc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019255b8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01925630) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01924fdc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01926520) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01921530) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019215a8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01926b60) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01921c48) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01921cc0) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019217ac) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019222a0) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01922318) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01921ec4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01922818) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019225bc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01922f2c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01922c98) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191b45c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191b4d4) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0192251c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191c304) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191c054) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191c940) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191c6e4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01918140) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01917ee4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191851c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191b6d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019188bc) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01918930) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01918ea4) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191902c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01918b84) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019194a8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019192a4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01914e58) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01918ae4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019152b8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01915540) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0191594c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01915988) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01915a38) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019156ec) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01915d1c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01916048) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01916b28) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019105b8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019107b0) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019107ec) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01910a5c) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01910c94) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01910bec) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01910f38) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911170) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911318) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019113c8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911478) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911528) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x019115d8) Line 8671 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911948) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01911dd0) Line 8671 + 0x13 C   perl512.dll!Perl_newPROG(interpreter * my_perl=0x0035403c\, op * o=0x01911ed8) Line 2365 + 0x17 C   perl512.dll!Perl_yyparse(interpreter * my_perl=0x0035403c) Line 143 + 0x2c C   perl512.dll!S_parse_body(interpreter * my_perl=0x0035403c\, char * * env=0x002428f0\, void (interpreter *)* xsinit=0x281d2260) Line 2160 + 0x9 C   perl512.dll!perl_parse(interpreter * my_perl=0x0035403c\, void (interpreter *)* xsinit=0x281d2260\, int argc=2\, char * * argv=0x00242510\, char * * env=0x002428f0) Line 1605 + 0x11 C   perl512.dll!RunPerl(int argc=2\, char * * argv=0x00242510\, char * * env=0x002428f0) Line 263 + 0x1a C++   perl.exe!main(int argc=2\, char * * argv=0x00242510\, char * * env=0x00242d48) Line 85 + 0x12 C   perl.exe!mainCRTStartup() Line 398 + 0xe C   kernel32.dll!_BaseProcessStart@​4() + 0x23

p5pRT commented 12 years ago

From @bulk88

perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186e564) Line 8479 + 0x3 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186e48c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186e9c0) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01869dc4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186a3c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186aa74) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186b104) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186b694) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01866864) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01866e68) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186746c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01867b18) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018681a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01862648) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01862bbc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018631a4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0186378c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01863e1c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185f23c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185f7b0) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185fd08) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018602f0) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018608d8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01860f68) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185c368) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185c8dc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185ce34) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185d41c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185da04) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185759c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01857c10) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01858184) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018586dc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01858cc4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018592ac) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854958) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01854fcc) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01855540) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01855a98) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0185602c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018520a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01852700) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01852d3c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01853278) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01853798) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01853d40) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184d384) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184d9d4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184e008) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184e53c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184ea54) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01849280) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018497d4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01849dec) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184a3e8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184a8e4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184adc4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184645c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01846a28) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184709c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018476f4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01847c4c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01848188) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184325c) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018437d4) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01843e10) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844430) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01844950) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183f334) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183f514) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183f198) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183fe08) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018400a8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0184051c) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x018406c8) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183a384) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183a530) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183aaa4) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183ad30) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183afbc) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183b658) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183b95c) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x0183bd58) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01835b84) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01835e8c) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01836264) Line 8729 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01836718) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01836a30) Line 8735 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01836e00) Line 8722 + 0x13 C   perl512.dll!Perl_peep(interpreter * my_perl=0x0035403c\, op * o=0x01837700) Line 8729 + 0x13 C   perl512.dll!Perl_newPROG(interpreter * my_perl=0x0035403c\, op * o=0x01837a18) Line 2365 + 0x17 C   perl512.dll!Perl_yyparse(interpreter * my_perl=0x0035403c) Line 143 + 0x2c C   perl512.dll!S_parse_body(interpreter * my_perl=0x0035403c\, char * * env=0x002428f8\, void (interpreter *)* xsinit=0x281d2260) Line 2160 + 0x9 C   perl512.dll!perl_parse(interpreter * my_perl=0x0035403c\, void (interpreter *)* xsinit=0x281d2260\, int argc=2\, char * * argv=0x00242510\, char * * env=0x002428f8) Line 1605 + 0x11 C   perl512.dll!RunPerl(int argc=2\, char * * argv=0x00242510\, char * * env=0x002428f8) Line 263 + 0x1a C++   perl.exe!main(int argc=2\, char * * argv=0x00242510\, char * * env=0x00242d48) Line 85 + 0x12 C   perl.exe!mainCRTStartup() Line 398 + 0xe C   kernel32.dll!_BaseProcessStart@​4() + 0x23

p5pRT commented 12 years ago

From @bulk88

this bug sounds similar to https://rt-archive.perl.org/perl5/Ticket/Display.html?id=89356&nbsp;

p5pRT commented 10 years ago

From @nthykier

Hi\,

I cannot reproduce the issue in S_finalize_op on blead[1]. It is possible that it has been "fixed" somehow (or we got different architectures).

On the other hand\, I can reproduce the crash caused by​:

  perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

I have attached a prototype patch that solves the problem (at least for me). With the patch applied\, I can run it with up to at least 2M without it crashing - I have not tested beyond that because perl starts to use >= 4GB of RAM around the 2M mark.   A more memory friendly test case is definitely welcome. :)

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2]. It re-uses the basic principe of the DEFER marco used in the peephole optimizer. The "major" difference is that it uses a fixed-size stack rather than a fixed-size queue. The size of the queue did not seem to matter a lot (even with MAX_DEFERRED reduced to 2 was the crash avoided in original test case).

The test suite showed no regression\, perl was configured with​:   ./Configure -des -Dusedevel

~Niels

[1] I have been using code suggested by Dave Mitchell (rewritten as a perl one-liner)

./perl -e 'my $code = q[my $i = 0; if ($i) { print } ] . "\n";'   -e '$code .= q[ elsif ($i) { print } ] . "\n" for 1..$ARGV[0];'   -e 'eval $code' 10000

[2] Compare

$ git diff --ignore-all-space --stat op.c | 37 [...] 1 file changed\, 34 insertions(+)\, 3 deletions(-)

versus.

$ git diff --stat op.c | 141 [...] 1 file changed\, 86 insertions(+)\, 55 deletions(-)

p5pRT commented 10 years ago

From @bulk88

On Wed Jul 17 14​:29​:33 2013\, niels@​thykier.net wrote​:

Hi\,

I cannot reproduce the issue in S_finalize_op on blead[1]. It is possible that it has been "fixed" somehow (or we got different architectures).

On the other hand\, I can reproduce the crash caused by​:

perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

I'll update this ticket for 5.19.2. All experiments were done with a intentionally C stack reduced perl\, the C stack is fixed at 20 KB\, the perl is -O1\, so the parameters in the callstacks may be/are garbage.

Perl_scalarvoid on stk.pl script above is still a problem. I attach a new callstack.

The davem script above is still a problem. New callstack attached.

The Father C rep operator on add operator then eval is still a problem. Callstack attached.

I also attach a newer perlmain.c that I used to reduce the C stack's size\, the original c stack shrinking code above was more hackish and only worked on DEBUGGING perl.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @bulk88

  perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x00930a80) Line 1233 + 0x3 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b1ec) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b1cc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b14c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b12c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b0ac) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b08c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6b00c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6afec) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6af6c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6af4c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6aecc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6aeac) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ae2c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ae0c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ad8c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ad6c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6acec) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6accc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ac4c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ac2c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6abac) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ab8c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ab0c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6aaec) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6aa6c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6aa4c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6a9cc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6a9ac) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f5f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f5d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f554) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f534) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f4b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f494) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f414) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f3f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f374) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f354) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f2d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f2b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f234) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f214) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f194) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f174) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f0f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f0d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f054) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6f034) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6efb4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ef94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ef14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6eef4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ee74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ee54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6edd4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6edb4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ed34) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ed14) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ec94) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ec74) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ebf4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ebd4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6eb54) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6eb34) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6eab4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ea94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ea14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e9f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e974) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e954) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e8d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e8b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e834) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e814) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e794) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e774) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e6f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e6d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e654) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e634) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e5b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e594) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e514) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e4f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e474) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e454) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e3d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e3b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e334) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e314) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e294) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e274) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e1f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e1d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e154) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e134) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e0b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e094) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6e014) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dff4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6df74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6df54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6ded4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6deb4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6de34) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6de14) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dd94) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dd74) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dcf4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dcd4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dc54) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dc34) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6dbb4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6db94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6db14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6daf4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6da74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6da54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d9d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d9b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d934) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d914) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d894) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d874) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d7f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d7d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d754) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d734) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d6b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f6d694) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f722dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f722bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7223c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7221c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7219c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7217c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f720fc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f720dc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7205c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7203c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71fbc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71f9c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71f1c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71efc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71e7c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71e5c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71ddc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71dbc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71d3c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71d1c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71c9c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71c7c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71bfc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71bdc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71b5c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71b3c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71abc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71a9c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f71a1c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f719fc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7197c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7195c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f718dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f718bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7183c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7181c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7179c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7177c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f716fc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f716dc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7165c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7163c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f715bc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7159c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7151c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f714fc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7147c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7145c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f713dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f713bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7133c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7131c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7129c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7127c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f711fc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f711dc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7115c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7113c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f710bc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7109c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7101c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70ffc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70f7c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70f5c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70edc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70ebc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70e3c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70e1c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70d9c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70d7c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70cfc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70cdc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70c5c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70c3c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70bbc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70b9c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70b1c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70afc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70a7c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f70a5c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f709dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f709bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7093c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7091c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7089c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7087c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f707fc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f707dc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7075c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7073c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f706bc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7069c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7061c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f705fc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7057c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7055c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f704dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f704bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7043c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7041c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7039c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7037c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74fc4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74fa4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74f24) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74f04) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74e84) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74e64) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74de4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74dc4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74d44) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74d24) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74ca4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74c84) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74c04) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74be4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74b64) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74b44) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74ac4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74aa4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74a24) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74a04) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74984) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74964) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f748e4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f748c4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74844) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74824) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f747a4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74784) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74704) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f746e4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74664) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74644) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f745c4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f745a4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74524) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74504) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74484) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74464) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f743e4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f743c4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74344) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74324) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f742a4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74284) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74204) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f741e4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74164) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74144) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f740c4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f740a4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74024) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f74004) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73f84) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73f64) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73ee4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73ec4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73e44) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73e24) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73da4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73d84) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73d04) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73ce4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73c64) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73c44) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73bc4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73ba4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73b24) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73b04) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73a84) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73a64) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f739e4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f739c4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73944) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73924) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f738a4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73884) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73804) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f737e4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73764) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73744) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f736c4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f736a4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73624) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73604) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73584) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73564) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f734e4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f734c4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73444) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73424) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f733a4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73384) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73304) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f732e4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73264) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73244) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f731c4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f731a4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73124) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73104) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73084) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f73064) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77cb4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77c94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77c14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77bf4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77b74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77b54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77ad4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77ab4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77a34) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77a14) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77994) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77974) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f778f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f778d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77854) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77834) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f777b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77794) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77714) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f776f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77674) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77654) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f775d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f775b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77534) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77514) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77494) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77474) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f773f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f773d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77354) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77334) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f772b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77294) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77214) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f771f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77174) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77154) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f770d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f770b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77034) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f77014) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76f94) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76f74) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76ef4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76ed4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76e54) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76e34) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76db4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76d94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76d14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76cf4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76c74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76c54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76bd4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76bb4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76b34) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76b14) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76a94) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76a74) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f769f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f769d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76954) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76934) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f768b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76894) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76814) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f767f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76774) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76754) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f766d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f766b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76634) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76614) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76594) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76574) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f764f4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f764d4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76454) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76434) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f763b4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76394) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76314) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f762f4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76274) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76254) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f761d4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f761b4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76134) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76114) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76094) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f76074) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75ff4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75fd4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75f54) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75f34) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75eb4) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75e94) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75e14) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75df4) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75d74) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f75d54) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a99c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a97c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a8fc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a8dc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a85c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a83c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a7bc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a79c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a71c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a6fc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a67c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a65c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a5dc) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a5bc) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a53c) Line 1505 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a51c) Line 1528 + 0x9 C   perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a4f8) Line 1505 + 0x9 C

perl519.dll!Perl_scalarvoid(interpreter * my_perl=0x003657e4\, op * o=0x01f7a4d8) Line 1528 + 0x9 C   perl519.dll!S_scalarseq(interpreter * my_perl=0x0012b000\, op * o=0x000001ff) Line 1646 + 0x7 C   perl519.dll!Perl_block_end(interpreter * my_perl=0x00000005\, long floor=0x000000ab\, op * seq=0x000001ff) Line 2902 + 0xd C   perl519.dll!Perl_yyparse(interpreter * my_perl=0x003657e4\, int gramtype=0x00000001) Line 209 + 0xd C   perl519.dll!S_doeval(interpreter * my_perl=0x00000005\, int gimme=0x00000002\, cv * outside=0x000001ff\, unsigned long seq=0x0000001c\, hv * hh=0x00000000) Line 3490 C   perl519.dll!Perl_pp_require(interpreter * my_perl=0x009045bc) Line 4095 + 0x21 C   perl519.dll!Perl_runops_standard(interpreter * my_perl=0x003657e4) Line 42 + 0x4 C   perl519.dll!Perl_call_sv(interpreter * my_perl=0x00000000\, sv * sv=0x0012b0b0\, volatile long flags=0x28021eb4) Line 2809 + 0xc C   perl519.dll!Perl_call_list(interpreter * my_perl=0x003657e4\, long oldscope=0x00000002\, av * paramList=0x008fe704) Line 4900 C   perl519.dll!S_process_special_blocks(interpreter * my_perl=0x00070023\, long floor=0x000001ff\, const char * const fullname=0x0036e684\, gv * const gv=0x008fe784\, cv * const cv=0x008fe724) Line 7741 C   perl519.dll!Perl_newATTRSUB_flags(interpreter * my_perl=0x000001ff\, long floor=0x00000026\, op * o=0x009076f0\, op * proto=0x00000000\, void * attrs=0x2802a49e\, op * block=0x0036e4e0\, unsigned long flags=0x01000000) Line 7703 + 0x13 C   perl519.dll!Perl_newATTRSUB(interpreter * my_perl=0x003657e4\, long floor=0x00000026\, op * o=0x009076f0\, op * proto=0x00000000\, op * attrs=0x00000000\, op * block=0x0036e4e0) Line 7376 + 0x19 C   perl519.dll!Perl_yyparse(interpreter * my_perl=0x003657e4\, int gramtype=0x009076f0) Line 364 + 0x25 C   perl519.dll!S_parse_body(interpreter * my_perl=0x000001ff\, char * * env=0x003628c0\, void (interpreter *)* xsinit=0x280af764) Line 2337 + 0xd C   perl519.dll!perl_parse(interpreter * my_perl=0x003657e4\, void (interpreter *)* xsinit=0x280af764\, int argc=0x00000002\, char * * argv=0x00362478\, char * * env=0x003628c0) Line 1650 C   perl519.dll!RunPerl(int argc=0x00000002\, char * * argv=0x01362478\, char * * env=0x00362de8) Line 263 + 0x10 C   perl.exe!main(int argc=0x00000002\, char * * argv=0x00362478\, char * * env=0x00362de8) Line 88 + 0x12 C   perl.exe!mainCRTStartup() Line 398 + 0xe C   kernel32.dll!_BaseProcessStart@​4() + 0x23

p5pRT commented 10 years ago

From @bulk88

#include "EXTERN.h"
#include "perl.h"

#ifdef __GNUC__

/* Mingw32 defaults to globing command line 
 * This is inconsistent with other Win32 ports and 
 * seems to cause trouble with passing -DXSVERSION=\"1.6\" 
 * So we turn it off like this, but only when compiling
 * perlmain.c: perlmainst.c is linked into the same executable
 * as win32.c, which also does this, so we mustn't do it twice
 * otherwise we get a multiple definition error.
 */
#ifndef PERLDLL
int _CRT_glob = 0;
#endif

#endif

DWORD FilterFunction(LPEXCEPTION_POINTERS exceptionPtr) 
{ 
    printf("1 ");                     // printed first 
    return EXCEPTION_EXECUTE_HANDLER; 
} 

int
main(int argc, char **argv, char **env)
{
    char * stackSizeEnv = getenv("PLSTK");
    int newStackSize = 0;
    DWORD oldProtect;
    PBYTE pPtr;
    MEMORY_BASIC_INFORMATION infoRes;
    MEMORY_BASIC_INFORMATION infoGuard;
    MEMORY_BASIC_INFORMATION infoAlloc;
    DWORD_PTR stackEnd;
    DWORD_PTR stackAllocBegin;
    BOOL ret;
    __asm mov pPtr, esp
    if(stackSizeEnv) {
        newStackSize = atoi(stackSizeEnv);
    }
    else {
        newStackSize = 5;
    }
    if(newStackSize) {
        ret = VirtualQuery(pPtr, &infoRes, 
                sizeof(MEMORY_BASIC_INFORMATION));
        assert(ret);
        ret = VirtualQuery((DWORD_PTR)infoRes.AllocationBase, &infoRes, 
                sizeof(MEMORY_BASIC_INFORMATION));
        assert(ret);
        ret = VirtualQuery((DWORD_PTR)infoRes.AllocationBase+infoRes.RegionSize, &infoGuard, 
            sizeof(MEMORY_BASIC_INFORMATION));
        assert(ret);
        ret = VirtualQuery((DWORD_PTR)infoRes.AllocationBase
                            +infoRes.RegionSize
                            +infoGuard.RegionSize
                            ,&infoAlloc, sizeof(MEMORY_BASIC_INFORMATION));
        assert(ret);
        stackEnd = (DWORD_PTR)infoRes.AllocationBase+infoRes.RegionSize
                            +infoGuard.RegionSize+infoAlloc.RegionSize;
        stackAllocBegin = stackEnd-(newStackSize*4096);
        ret = VirtualAlloc(stackAllocBegin, (newStackSize*4096), MEM_COMMIT, PAGE_READWRITE);
        //ret = VirtualProtect(stackAllocBegin, (newStackSize*4096),
        //                        PAGE_READWRITE, &oldProtect);
        printf("vp ret=%u glr=%u\n", ret, GetLastError());
        ret = VirtualAlloc(stackAllocBegin-(4096*2), (4096*2), MEM_COMMIT, PAGE_NOACCESS);
        printf("vp ret=%u glr=%u\n", ret, GetLastError());
        //ret = VirtualProtect(stackEnd-(newStackSize*4096)-4096, 4096,
        //                        PAGE_NOACCESS, &oldProtect);
        //printf("vp ret=%u glr=%u\n", ret, GetLastError());
        //while( ! (stMemBasicInfo.Protect & PAGE_GUARD)) {
        //    assert(VirtualQuery((DWORD_PTR)stMemBasicInfo.BaseAddress-1, &stMemBasicInfo, 
        //           sizeof(stMemBasicInfo)));        
        //}
        //assert(VirtualProtect(stMemBasicInfo.BaseAddress, stMemBasicInfo.RegionSize,
        //                        PAGE_NOACCESS, &oldProtect));
        //assert(VirtualQuery((DWORD_PTR)stMemBasicInfo.BaseAddress-1, &stMemBasicInfo, 
        //       sizeof(stMemBasicInfo)));
        //assert(VirtualFree((DWORD_PTR)stMemBasicInfo.AllocationBase, 
        //           0, MEM_RELEASE));
    }
    if(0) {
        exit(1);
    }
    __try {
    ret = RunPerl(argc, argv, env);
    }
    __except(FilterFunction(GetExceptionInformation())) {
    ret = 1;
    }
    return ret;
}
p5pRT commented 10 years ago

From @bulk88

[rep op on evaled add callstack.txt](https://rt-archive.perl.org/perl5/Ticket/Attachment/1235621/643139/rep op on evaled add callstack.txt)

p5pRT commented 10 years ago

From @bulk88

RT web interface lost the attachment. Adding a missing one.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @bulk88

On Wed Jul 17 19​:10​:02 2013\, bulk88 wrote​:

RT web interface lost the attachment. Adding a missing one.

Ok\, I uploaded a 0 byte file before. Trying again.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @bulk88

n is at 5000

perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00958b84) Line 1696 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00958ba0) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00958ae8) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c069c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c069a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06924) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06904) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06884) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06864) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c067e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c067c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06744) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06724) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c066a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06684) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06604) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c065e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06564) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06544) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c064c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c064a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06424) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06404) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06384) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06364) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c062e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c062c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06244) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06224) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c061a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06184) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06104) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c060e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06064) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c06044) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a95c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a93c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a8bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a89c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a81c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a7fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a77c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a75c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a6dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a6bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a63c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a61c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a59c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a57c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a4fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a4dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a45c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a43c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a3bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a39c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a31c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a2fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a27c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a25c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a1dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a1bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a13c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a11c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a09c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0a07c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09ffc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09fdc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09f5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09f3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09ebc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09e9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09e1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09dfc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09d7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09d5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09cdc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09cbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09c3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09c1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09b9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09b7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09afc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09adc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09a5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c09a3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c099bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0999c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0991c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c098fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0987c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0985c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c097dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c097bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0973c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0971c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0969c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0967c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c095fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c095dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0955c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0953c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c094bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0949c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0941c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c093fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0937c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0935c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c092dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c092bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0923c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0921c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0919c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0917c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c090fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c090dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0905c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0903c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08fbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08f9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08f1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08efc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08e7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08e5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08ddc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08dbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08d3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08d1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08c9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08c7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08bfc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08bdc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08b5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08b3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08abc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08a9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c08a1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c089fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d314) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d2f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d274) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d254) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d1d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d1b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d134) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d114) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d094) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d074) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cff4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cfd4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cf54) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cf34) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ceb4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ce94) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ce14) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cdf4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cd74) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cd54) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ccd4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ccb4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cc34) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cc14) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cb94) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cb74) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0caf4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0cad4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ca54) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ca34) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c9b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c994) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c914) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c8f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c874) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c854) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c7d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c7b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c734) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c714) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c694) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c674) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c5f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c5d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c554) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c534) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c4b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c494) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c414) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c3f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c374) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c354) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c2d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c2b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c234) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c214) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c194) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c174) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c0f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c0d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c054) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0c034) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bfb4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bf94) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bf14) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bef4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0be74) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0be54) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bdd4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bdb4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bd34) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bd14) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bc94) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bc74) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bbf4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bbd4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bb54) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bb34) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0bab4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ba94) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ba14) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b9f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b974) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b954) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b8d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b8b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b834) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b814) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b794) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b774) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b6f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b6d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b654) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b634) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b5b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b594) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b514) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b4f4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b474) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b454) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b3d4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0b3b4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f33c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f31c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f29c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f27c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f1fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f1dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f15c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f13c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f0bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f09c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f01c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0effc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ef7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ef5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0eedc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0eebc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ee3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ee1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ed9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ed7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ecfc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ecdc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ec5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ec3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ebbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0eb9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0eb1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0eafc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ea7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ea5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e9dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e9bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e93c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e91c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e89c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e87c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e7fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e7dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e75c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e73c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e6bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e69c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e61c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e5fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e57c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e55c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e4dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e4bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e43c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e41c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e39c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e37c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e2fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e2dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e25c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e23c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e1bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e19c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e11c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e0fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e07c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0e05c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dfdc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dfbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0df3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0df1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0de9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0de7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ddfc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dddc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dd5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dd3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dcbc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dc9c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dc1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dbfc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0db7c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0db5c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dadc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0dabc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0da3c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0da1c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d99c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d97c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d8fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d8dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d85c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d83c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d7bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d79c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d71c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d6fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d67c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d65c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d5dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d5bc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d53c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d51c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d49c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d47c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d3fc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0d3dc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11364) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11344) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c112c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c112a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11224) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11204) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11184) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11164) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c110e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c110c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11044) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c11024) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10fa4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10f84) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10f04) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10ee4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10e64) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10e44) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10dc4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10da4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10d24) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10d04) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10c84) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10c64) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10be4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10bc4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10b44) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10b24) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10aa4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10a84) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10a04) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c109e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10964) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10944) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c108c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c108a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10824) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10804) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10784) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10764) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c106e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c106c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10644) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10624) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c105a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10584) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10504) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c104e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10464) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10444) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c103c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c103a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10324) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10304) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10284) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10264) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c101e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c101c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10144) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10124) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c100a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10084) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c10004) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ffe4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ff64) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0ff44) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fec4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fea4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fe24) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fe04) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fd84) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fd64) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fce4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fcc4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fc44) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fc24) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fba4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fb84) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fb04) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fae4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fa64) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0fa44) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f9c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f9a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f924) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f904) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f884) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f864) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f7e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f7c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f744) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f724) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f6a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f684) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f604) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f5e4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f564) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f544) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f4c4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f4a4) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f424) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c0f404) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1356c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1354c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c134cc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c134ac) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1342c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1340c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1338c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1336c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c132ec) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c132cc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1324c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1322c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c131ac) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1318c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1310c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c130ec) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1306c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c1304c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12fcc) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12fac) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12f2c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12f0c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12e8c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12e6c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12e48) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12e28) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x0093005c) Line 1917 + 0x7 C   perl519.dll!S_finalize_op(interpreter * my_perl=0x003657e4\, op * o=0x00c12dcc) Line 1917 + 0x7 C   perl519.dll!Perl_finalize_optree(interpreter * my_perl=0x003657e4\, op * o=0x00c12dcc) Line 1691 C   perl519.dll!Perl_newPROG(interpreter * my_perl=0x003657e4\, op * o=0x0093005c) Line 3046 C   perl519.dll!Perl_yyparse(interpreter * my_perl=0x003657e4\, int gramtype=0x00000000) Line 146 + 0x14 C   perl519.dll!S_doeval(interpreter * my_perl=0x00958ba0\, int gimme=0x00000001\, cv * outside=0x000000b6\, unsigned long seq=0x00000002\, hv * hh=0x00000000) Line 3490 C   perl519.dll!Perl_pp_entereval(interpreter * my_perl=0x013657e4) Line 4225 + 0x18 C   perl519.dll!Perl_runops_standard(interpreter * my_perl=0x003657e4) Line 42 + 0x4 C   perl519.dll!S_run_body(interpreter * my_perl=0x003657e4\, long oldscope=0x00000001) Line 2495 + 0xa C   perl519.dll!perl_run(interpreter * my_perl=0x003657e4) Line 2411 + 0x8 C   perl519.dll!RunPerl(int argc=0x00000003\, char * * argv=0x01362478\, char * * env=0x00362de8) Line 270 + 0x6 C   perl.exe!main(int argc=0x00000003\, char * * argv=0x00362478\, char * * env=0x00362de8) Line 88 + 0x12 C   perl.exe!mainCRTStartup() Line 398 + 0xe C   kernel32.dll!_BaseProcessStart@​4() + 0x23

p5pRT commented 10 years ago

From @bulk88

On Wed Jul 17 14​:29​:33 2013\, niels@​thykier.net wrote​:

Hi\,

I cannot reproduce the issue in S_finalize_op on blead[1]. It is possible that it has been "fixed" somehow (or we got different architectures).

On the other hand\, I can reproduce the crash caused by​:

perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

I have attached a prototype patch that solves the problem (at least for me). With the patch applied\, I can run it with up to at least 2M without it crashing - I have not tested beyond that because perl starts to use >= 4GB of RAM around the 2M mark. A more memory friendly test case is definitely welcome. :)

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2]. It re-uses the basic principe of the DEFER marco used in the peephole optimizer. The "major" difference is that it uses a fixed-size stack rather than a fixed-size queue. The size of the queue did not seem to matter a lot (even with MAX_DEFERRED reduced to 2 was the crash avoided in original test case).

Applied patch\, used on 20 KB C stack perl described above\,

-e "eval \"sub{\".q\"$a+\"x shift . \"}\"" 500000

after patch didn't crash\, previously was crashing as described in earlier post of mine in this ticket. I have no comment on the correctness of this patch.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @Leont

On Wed\, Jul 17\, 2013 at 11​:28 PM\, Niels Thykier \niels@&#8203;thykier\.net wrote​:

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2].

Then why did you post it with space changes? Not only does it deter reviewers from looking at this\, it's also wrong (our style standard is crap\, but it's generally considered too late to change that).

Leon

p5pRT commented 10 years ago

From @nthykier

On 2013-07-18 13​:12\, Leon Timmermans wrote​:

On Wed\, Jul 17\, 2013 at 11​:28 PM\, Niels Thykier \niels@&#8203;thykier\.net wrote​:

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2].

Then why did you post it with space changes? Not only does it deter reviewers from looking at this\, it's also wrong (our style standard is crap\, but it's generally considered too late to change that).

Leon

The space changes are caused by adding an extra scope\, i.e.

  code

became

  while (something)   {   code-with-minor-modifications   }

I can rewrite the patch as

  while (something)   {   code-with-minor-modifications   }

but I suspected that it would make things worse in the long-term.

In regards to the spaces used. As I understood it\, the "desired" intention is " "\, "\t"\, "\t "\, "\t\t". So that is what I have been using so far. If it is wrong\, then by all means do correct me so I don't include it in future patches.

~Niels

p5pRT commented 10 years ago

From @nwc10

On Thu\, Jul 18\, 2013 at 01​:19​:05PM +0200\, Niels Thykier wrote​:

On 2013-07-18 13​:12\, Leon Timmermans wrote​:

On Wed\, Jul 17\, 2013 at 11​:28 PM\, Niels Thykier \niels@&#8203;thykier\.net wrote​:

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2].

Then why did you post it with space changes? Not only does it deter reviewers from looking at this\, it's also wrong (our style standard is crap\, but it's generally considered too late to change that).

Leon

The space changes are caused by adding an extra scope\, i.e.

code

became

while (something) { code-with-minor-modifications }

I can rewrite the patch as

while (something) { code-with-minor-modifications }

but I suspected that it would make things worse in the long-term.

Yes\, typically we have been re-indenting when adding scopes. So you're right that the answer isn't as obvious as it first seemed.

In this case\, I think for ease of review the best course of action would have been to attach the "proper" diff and put a whitespace-ignoring diff inline in your message.

(Because I'm unaware of any means for a reviewer to generate that diff without having to 1) checkout the correct parent version 2) apply your patch 3) run diff themselves

whereas you are in a position to do just step 3\, and save anyone else having to quit their e-mail client to duplicate work)

In regards to the spaces used. As I understood it\, the "desired" intention is " "\, "\t"\, "\t "\, "\t\t". So that is what I have been using so far. If it is wrong\, then by all means do correct me so I don't include it in future patches.

There's an editor block at the bottom of each file which is supposed to get (at least) emacs and vi to indent at 4 columns\, and expand tabs to spaces. Historically most of the code has hard tabs\, and the alignment mostly seems to assume a tabstop is at 8 spaces\, but the rough plan is to eliminate tabs on any line that gets changed for any other reason. The intent is to avoid the "blame" history of files (at least of the complex old C code) being confused by having whitespace only changes.

Nicholas Clark

p5pRT commented 10 years ago

From @iabyn

On Thu\, Jul 18\, 2013 at 12​:27​:46PM +0100\, Nicholas Clark wrote​:

Yes\, typically we have been re-indenting when adding scopes. So you're right that the answer isn't as obvious as it first seemed.

In this case\, I think for ease of review the best course of action would have been to attach the "proper" diff and put a whitespace-ignoring diff inline in your message.

My personal preference is to do it as two commits; the first adds the extra scope and the code changes; the second does just the re-indenting.

-- I don't want to achieve immortality through my work... I want to achieve it through not dying.   -- Woody Allen

p5pRT commented 10 years ago

From @iabyn

On Wed\, Jul 17\, 2013 at 11​:28​:48PM +0200\, Niels Thykier wrote​:

I have attached a prototype patch that solves the problem (at least for me). With the patch applied\, I can run it with up to at least 2M without it crashing - I have not tested beyond that because perl starts to use >= 4GB of RAM around the 2M mark.

Some general thoughts and comments about this issue.

There are several places in op.c that recursively do a partial or full treewalk of the subtree associated with a node. A quick scan of op.c for likely recursive functions turns up​:

  Perl_op_free   S_find_and_forget_pmops   Perl_scalar   Perl_scalarvoid   Perl_list   S_finalize_op   Perl_doref   S_my_kid   S_aassign_common_vars

(Then of course there's Perl_rpeep\, which doesn't recursively walk the tree\, but instead follows op_next nodes\, recursively scanning whenever there's a branch\, such as a LOGOP with an op_other field).

Now\, it's quite simple (especially with machine-generated code) to create an optree that's arbitrarily deep. For example​:

  my $line = "\$cond ? \$a : \n";   my $code = ($line x 10000) . "\$b;\n";   eval $code;

This creates a 10\,000 depth tree.

Any function which walks the tree recursively (or which uses a small fixed stack to avoid some recursion) is going to crash on a suitably pathological piece of code.

Which leads me to speculate...

The problem really is that there is no pointer back from the kids to the parent op. Thus to walk the tree you need a stack (C or otherwise) to record your current op_sibling iterator for every depth in the tree.

If hypothetically the last kid in an op_sibling chain had a pointer back to its parent\, e.g.

  parent   |   kid1 --> kid2 ---> kid3 ---> NULL   |   kid4 ---> kid5 --> kid6 ---> NULL

becomes

  parent \<-----------------   | \   kid1 --> kid2 ---> kid3 -/   | ^   | \   | --------------------   | \   kid4 ---> kid5 --> kid6 -/

Then walking the whole subtree can be done simply by iteratively following (op_first || op_sibling) until we arrive back at the original node.

For this to work\, we need a temporary 'already processed' flag on ops to show that they've already been visited (so in the above when we arrive back at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt will suffice?.

Also\, we need to temporarily set the op_sibling of the last kid from NULL to instead point back at its parent; we revert this to NULL once we visit the kid in question (which may involve needing another flag bit).

Actually\, if we know we're at the last op_sibling and so the next op will be the parent\, then we don't need an 'already processed' flag​: we know that the next node has already been done. Or maybe the tmp pointer should point to parent->op_sibling rather than to parent\, also avoiding the need for an 'already processed' flag.

Of course this is all predicated on the actions being performed for each tree node not choking on the fake extra pointer on the last kid. I don't know whether this would be an issue.

I had a brief attempt to see if I could get a proof-of-concept implementation to work with op_free\, but that turns out to be a bit complicated by the fact that some actions are performed before the kids are walked\, and some after (and of course the op itself gets freed). So I gave up as I haven't got time to look into this deeply at the moment.

So I thought I'd throw it into the ring instead.

-- If life gives you lemons\, you'll probably develop a citric acid allergy.

p5pRT commented 10 years ago

From @khwilliamson

On 07/18/2013 08​:13 AM\, Dave Mitchell wrote​:

On Thu\, Jul 18\, 2013 at 12​:27​:46PM +0100\, Nicholas Clark wrote​:

Yes\, typically we have been re-indenting when adding scopes. So you're right that the answer isn't as obvious as it first seemed.

In this case\, I think for ease of review the best course of action would have been to attach the "proper" diff and put a whitespace-ignoring diff inline in your message.

My personal preference is to do it as two commits; the first adds the extra scope and the code changes; the second does just the re-indenting.

I thought in fact\, that this was the officially sanctioned thing to do.

p5pRT commented 10 years ago

From @bulk88

On Thu Jul 18 07​:50​:32 2013\, davem wrote​:> Some general thoughts and comments about this issue.

There are several places in op.c that recursively do a partial or full treewalk of the subtree associated with a node. A quick scan of op.c for likely recursive functions turns up​:

Perl\_op\_free
S\_find\_and\_forget\_pmops
Perl\_scalar
Perl\_scalarvoid
Perl\_list
S\_finalize\_op
Perl\_doref
S\_my\_kid
S\_aassign\_common\_vars

(Then of course there's Perl_rpeep\, which doesn't recursively walk the tree\, but instead follows op_next nodes\, recursively scanning whenever there's a branch\, such as a LOGOP with an op_other field).

Now\, it's quite simple (especially with machine-generated code) to create an optree that's arbitrarily deep. For example​:

my $line = "\\$cond ? \\$a : \\n";
my $code = \($line x 10000\) \. "\\$b;\\n";
eval $code;

This creates a 10\,000 depth tree.

Any function which walks the tree recursively (or which uses a small fixed stack to avoid some recursion) is going to crash on a suitably pathological piece of code.

Which leads me to speculate...

The problem really is that there is no pointer back from the kids to the parent op. Thus to walk the tree you need a stack (C or otherwise) to record your current op_sibling iterator for every depth in the tree.

If hypothetically the last kid in an op_sibling chain had a pointer back to its parent\, e.g.

parent
  |
kid1 \-\-> kid2 \-\-\-> kid3 \-\-\-> NULL
          |
         kid4 \-\-\-> kid5 \-\-> kid6 \-\-\-> NULL

becomes

parent \<\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
  |                      \\
kid1 \-\-> kid2 \-\-\-> kid3 \-/
          | ^
          |  \\
          |   \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
          |                       \\
         kid4 \-\-\-> kid5 \-\-> kid6 \-/

Then walking the whole subtree can be done simply by iteratively following (op_first || op_sibling) until we arrive back at the original node.

For this to work\, we need a temporary 'already processed' flag on ops to show that they've already been visited (so in the above when we arrive back at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt will suffice?.

Also\, we need to temporarily set the op_sibling of the last kid from NULL to instead point back at its parent; we revert this to NULL once we visit the kid in question (which may involve needing another flag bit).

Actually\, if we know we're at the last op_sibling and so the next op will be the parent\, then we don't need an 'already processed' flag​: we know that the next node has already been done. Or maybe the tmp pointer should point to parent->op_sibling rather than to parent\, also avoiding the need for an 'already processed' flag.

Of course this is all predicated on the actions being performed for each tree node not choking on the fake extra pointer on the last kid. I don't know whether this would be an issue.

I had a brief attempt to see if I could get a proof-of-concept implementation to work with op_free\, but that turns out to be a bit complicated by the fact that some actions are performed before the kids are walked\, and some after (and of course the op itself gets freed). So I gave up as I haven't got time to look into this deeply at the moment.

So I thought I'd throw it into the ring instead.

Instead of Thykier's 10 deep fixed len mini stack\, or davem's adding return to root OP * to end of a branch on optree\, here is my WAG idea.

Do an ENTER\, use SAVEDESTRUCTOR_X for every OP * encountered\, then do a LEAVE\, and the ops will free in a linear flattened model using an malloced unlimited length (OS user mode memory limit) stack (save stack)?

I'll guess from the other posts in this ticket so far\, that these op tree deep recursion bugs are something/some function needs to trace around the outside of the tree\, linearlizing the tree. A combination of for loops and recursion are used to do this in the current implementation. Is this a correct explanation?

Also\, in the for loop+recusion call stacks\, is the algorithm\, where x is the number of OP structs in the sub\, x*x\, or x! or just plain x? I'm trying to figure out if there is a performance problem/big O of these op tree recursion crashes.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @hvds

Dave Mitchell \davem@&#8203;iabyn\.com wrote​: :There are several places in op.c that recursively do a partial or full :treewalk of the subtree associated with a node. A quick scan of op.c for :likely recursive functions turns up​: : : Perl_op_free : S_find_and_forget_pmops : Perl_scalar : Perl_scalarvoid : Perl_list : S_finalize_op : Perl_doref : S_my_kid : S_aassign_common_vars : :(Then of course there's Perl_rpeep\, which doesn't recursively walk the :tree\, but instead follows op_next nodes\, recursively scanning whenever :there's a branch\, such as a LOGOP with an op_other field). : :Now\, it's quite simple (especially with machine-generated code) to create :an optree that's arbitrarily deep. For example​: : : my $line = "\$cond ? \$a : \n"; : my $code = ($line x 10000) . "\$b;\n"; : eval $code; : :This creates a 10\,000 depth tree. : :Any function which walks the tree recursively (or which uses a small fixed :stack to avoid some recursion) is going to crash on a suitably :pathological piece of code. : :Which leads me to speculate... : :The problem really is that there is no pointer back from the kids to the :parent op. Thus to walk the tree you need a stack (C or otherwise) to :record your current op_sibling iterator for every depth in the tree. : :If hypothetically the last kid in an op_sibling chain had a pointer back :to its parent\, e.g. : : parent : : kid1 --> kid2 ---> kid3 ---> NULL
: kid4 ---> kid5 --> kid6 ---> NULL : :becomes : : parent \<----------------- : \ : kid1 --> kid2 ---> kid3 -/ : ^ : \ : -------------------- : \ : kid4 ---> kid5 --> kid6 -/
:Then walking the whole subtree can be done simply by iteratively :following (op_first op_sibling) until we arrive back at the original :node.

:For this to work\, we need a temporary 'already processed' flag on ops to :show that they've already been visited (so in the above when we arrive back :at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt :will suffice?. : :Also\, we need to temporarily set the op_sibling of the last kid from NULL :to instead point back at its parent; we revert this to NULL once we visit :the kid in question (which may involve needing another flag bit). : :Actually\, if we know we're at the last op_sibling and so the next op will :be the parent\, then we don't need an 'already processed' flag​: we know :that the next node has already been done. Or maybe the tmp pointer should :point to parent->op_sibling rather than to parent\, also avoiding the need :for an 'already processed' flag. : :Of course this is all predicated on the actions being performed for :each tree node not choking on the fake extra pointer on the last kid. :I don't know whether this would be an issue. : :I had a brief attempt to see if I could get a proof-of-concept :implementation to work with op_free\, but that turns out to be a bit :complicated by the fact that some actions are performed before the kids :are walked\, and some after (and of course the op itself gets freed). :So I gave up as I haven't got time to look into this deeply at the moment. : :So I thought I'd throw it into the ring instead.

Maybe I misrepresent it\, but it sounds rather an expensive way - in memory and complexity - to cope with the pathological cases. I feel like there ought to be something rather lighter-weight that performs well in normal cases. If it performs well in pathological cases as well\, all the better\, but (other than trying not to crash) I don't feel they're what we should optimize for.

Moving the C-stack recursion to an optree-traversal stack that grows at need (but rarely needs to in any but pathological cases) sounds as if it should suffice\, and as if it could involve rather less complexity.

Hugo

p5pRT commented 10 years ago

From @nthykier

On 2013-07-18 16​:49\, Dave Mitchell wrote​:

On Wed\, Jul 17\, 2013 at 11​:28​:48PM +0200\, Niels Thykier wrote​:

I have attached a prototype patch that solves the problem (at least for me). With the patch applied\, I can run it with up to at least 2M without it crashing - I have not tested beyond that because perl starts to use >= 4GB of RAM around the 2M mark.

Some general thoughts and comments about this issue.

There are several places in op.c that recursively do a partial or full treewalk of the subtree associated with a node. A quick scan of op.c for likely recursive functions turns up​:

\[\.\.\.\]

(Then of course there's Perl_rpeep\, which doesn't recursively walk the tree\, but instead follows op_next nodes\, recursively scanning whenever there's a branch\, such as a LOGOP with an op_other field).

I agree that it seems like we are re-doing (partial) recursive walking quite a few times. So it would probably be worth it to have some utilities to make it easier.

Now\, it's quite simple (especially with machine-generated code) to create an optree that's arbitrarily deep. For example​:

my $line = "\\$cond ? \\$a : \\n";
my $code = \($line x 10000\) \. "\\$b;\\n";
eval $code;

This creates a 10\,000 depth tree.

Seems to be a nice memory friendly stack-trashing test case. :) Although it seems to take quite a while to compile for larger numbers.

Any function which walks the tree recursively (or which uses a small fixed stack to avoid some recursion) is going to crash on a suitably pathological piece of code.

Which leads me to speculate...

The problem really is that there is no pointer back from the kids to the parent op. Thus to walk the tree you need a stack (C or otherwise) to record your current op_sibling iterator for every depth in the tree.

If hypothetically the last kid in an op_sibling chain had a pointer back to its parent\, e.g.

parent
  |
kid1 \-\-> kid2 \-\-\-> kid3 \-\-\-> NULL
          |
         kid4 \-\-\-> kid5 \-\-> kid6 \-\-\-> NULL

becomes

parent \<\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
  |                      \\
kid1 \-\-> kid2 \-\-\-> kid3 \-/
          | ^
          |  \\
          |   \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
          |                       \\
         kid4 \-\-\-> kid5 \-\-> kid6 \-/

Then walking the whole subtree can be done simply by iteratively following (op_first || op_sibling) until we arrive back at the original node.

Interesting proposal - if nothing else\, we could avoid having to deal with dynamic memory allocation for traversing the tree (once it has been fully constructed that is).

For this to work\, we need a temporary 'already processed' flag on ops to show that they've already been visited (so in the above when we arrive back at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt will suffice?.

Mmm\, we might have to restore its original value again. Admittedly I don't remember the peep optimiser fully\, but if it uses any of the functions above\, we don't want calling them to leave some nodes unoptimised.   Also\, it would possibly make it difficult for the peep optimiser to use this approach (for similar reasons).

Also\, we need to temporarily set the op_sibling of the last kid from NULL to instead point back at its parent; we revert this to NULL once we visit the kid in question (which may involve needing another flag bit).

If you revert it back to NULL\, how are you going to use it for traversing the tree. If I understand this part correctly\, you would end up adding the parent-link back\, then use it and remove it again several times. And I am pretty sure the part of adding the parent-link is not going to be easy without recursion or some helper stack/queue.

Actually\, if we know we're at the last op_sibling and so the next op will be the parent\, then we don't need an 'already processed' flag​: we know that the next node has already been done. Or maybe the tmp pointer should point to parent->op_sibling rather than to parent\, also avoiding the need for an 'already processed' flag.

Are you sure this will work for all cases\, e.g. the peep optimiser makes the following comment about loop ops​:

  /* a while(1) loop doesn't have an op_next that escapes the   * loop\, so we have to explicitly follow the op_lastop to   * process the rest of the code */

(This is an honest question - I am by no means an expert on ops of any kind)

Of course this is all predicated on the actions being performed for each tree node not choking on the fake extra pointer on the last kid. I don't know whether this would be an issue.

I suspect something will croak/while(1)-loop on it\, but I definitely find this an interesting alternative (particularly due to its possible O(1) memory usage).

I had a brief attempt to see if I could get a proof-of-concept implementation to work with op_free\, but that turns out to be a bit complicated by the fact that some actions are performed before the kids are walked\, and some after (and of course the op itself gets freed). So I gave up as I haven't got time to look into this deeply at the moment.

So I thought I'd throw it into the ring instead.

I tried a different approach that for op_free in the attached patch - it /doesn't/ work\, but I had to refactor part of op_free as a side-effect. Part of this refactoring might help you do your proof-of-concept though.

The basic idea behind my patch was to abuse the op_next as a backlink doing free (under the assumption that "about to be freed" => "free general purpose memory"). In theory\, it is also stackless like your idea\, but it works only for free (as the traversion is destructive).   Sadly\, this seems to break perl causing many scripts to do "nothing at all". Possibly a bug in my implementation or in my assumption. Anyway\, hope it helps you.

~Niels

p5pRT commented 10 years ago

From @nthykier

fault-free-op.diff ```diff diff --git a/op.c b/op.c index d5323a0..be857f8 100644 --- a/op.c +++ b/op.c @@ -670,25 +670,26 @@ S_op_destroy(pTHX_ OP *o) FreeOp(o); } -/* Destructor */ - -void -Perl_op_free(pTHX_ OP *o) +/* Returns true if the OP can be freed, otherwise false. + * + * If the OP was refcounted and is to be freed, then this + * will call find_and_forget_pmops on it. + */ +static bool +S_op_may_free(pTHX_ OP *o) { dVAR; - OPCODE type; /* Though ops may be freed twice, freeing the op after its slab is a big no-no. */ - assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0); + assert(!o || !o->op_slabbed || OpSLAB(o)->opslab_refcnt != ~(size_t)0); /* During the forced freeing of ops after compilation failure, kidops may be freed before their parents. */ - if (!o || o->op_type == OP_FREED) - return; + if (!o || o->op_type == OP_FREED ) + return 0; - type = o->op_type; if (o->op_private & OPpREFCOUNTED) { - switch (type) { + switch (o->op_type) { case OP_LEAVESUB: case OP_LEAVESUBLV: case OP_LEAVEEVAL: @@ -696,53 +697,93 @@ Perl_op_free(pTHX_ OP *o) case OP_SCOPE: case OP_LEAVEWRITE: { - PADOFFSET refcnt; - OP_REFCNT_LOCK; - refcnt = OpREFCNT_dec(o); - OP_REFCNT_UNLOCK; - if (refcnt) { - /* Need to find and remove any pattern match ops from the list - we maintain for reset(). */ - find_and_forget_pmops(o); - return; - } + PADOFFSET refcnt; + OP_REFCNT_LOCK; + refcnt = OpREFCNT_dec(o); + OP_REFCNT_UNLOCK; + if (refcnt) { + /* Need to find and remove any pattern match ops from the list + we maintain for reset(). */ + find_and_forget_pmops(o); + return 0; + } } break; default: break; } } + return 1; +} + +/* Destructor */ +void +Perl_op_free(pTHX_ OP *arg) +{ + dVAR; + OPCODE type; + OP *o; + + if (S_op_may_free(aTHX_ arg)) + return; /* Call the op_free hook if it has been set. Do it now so that it's called * at the right time for refcounted ops, but still before all of the kids * are freed. */ - CALL_OPFREEHOOK(o); + CALL_OPFREEHOOK(arg); - if (o->op_flags & OPf_KIDS) { - OP *kid, *nextkid; - for (kid = cUNOPo->op_first; kid; kid = nextkid) { - nextkid = kid->op_sibling; /* Get before next freeing kid */ - op_free(kid); + /* arg is definitely going to be cleared now. + * Clear the next pointer (we abuse these for back tracking) */ + o = arg; + + do + { + + redo: + + if (o->op_flags & OPf_KIDS) { + OP *kid, *nextkid; + /* Iterate over the children, as we visit new children, we update + the op_first pointer of the parent to the first "non-freed" + child it has left */ + for (kid = cUNOPo->op_first; kid; kid = nextkid) { + nextkid = kid->op_sibling; /* Get before next freeing kid */ + if (!S_op_may_free(aTHX_ kid)) + /* Kid was refcounted (or already freed), skip it for now */ + continue; + /* We are going to freeing the kid, call its free hook if any */ + CALL_OPFREEHOOK(kid); + kid->op_next = o; + o = kid; + goto redo; + } } - } - if (type == OP_NULL) - type = (OPCODE)o->op_targ; - if (o->op_slabbed) - Slab_to_rw(OpSLAB(o)); + type = o->op_type; - /* COP* is not cleared by op_clear() so that we may track line - * numbers etc even after null() */ - if (type == OP_NEXTSTATE || type == OP_DBSTATE) { - cop_free((COP*)o); - } + if (type == OP_NULL) + type = (OPCODE)o->op_targ; - op_clear(o); - FreeOp(o); + if (o->op_slabbed) + Slab_to_rw(OpSLAB(o)); + + /* COP* is not cleared by op_clear() so that we may track line + * numbers etc even after null() */ + if (type == OP_NEXTSTATE || type == OP_DBSTATE) { + cop_free((COP*)o); + } + o->op_flags &= ~OPf_KIDS; + op_clear(o); + FreeOp(o); #ifdef DEBUG_LEAKING_SCALARS - if (PL_op == o) - PL_op = NULL; + if (PL_op == o) + PL_op = NULL; #endif + if (o != arg) + o = o->op_next; + else + o = NULL; + } while (o); } void ```
p5pRT commented 10 years ago

From @nthykier

On 2013-07-18 13​:27\, Nicholas Clark wrote​:

On Thu\, Jul 18\, 2013 at 01​:19​:05PM +0200\, Niels Thykier wrote​:

[...]

Yes\, typically we have been re-indenting when adding scopes. So you're right that the answer isn't as obvious as it first seemed.

In this case\, I think for ease of review the best course of action would have been to attach the "proper" diff and put a whitespace-ignoring diff inline in your message.

(Because I'm unaware of any means for a reviewer to generate that diff without having to 1) checkout the correct parent version 2) apply your patch 3) run diff themselves

whereas you are in a position to do just step 3\, and save anyone else having to quit their e-mail client to duplicate work)

True\, I should have thought of that.

In regards to the spaces used. As I understood it\, the "desired" intention is " "\, "\t"\, "\t "\, "\t\t". So that is what I have been using so far. If it is wrong\, then by all means do correct me so I don't include it in future patches.

There's an editor block at the bottom of each file which is supposed to get (at least) emacs and vi to indent at 4 columns\, and expand tabs to spaces. Historically most of the code has hard tabs\, and the alignment mostly seems to assume a tabstop is at 8 spaces\, but the rough plan is to eliminate tabs on any line that gets changed for any other reason. The intent is to avoid the "blame" history of files (at least of the complex old C code) being confused by having whitespace only changes.

Nicholas Clark

Noted.

~Niels

p5pRT commented 10 years ago

From @cpansprout

On Thu Jul 18 15​:15​:54 2013\, niels@​thykier.net wrote​:

On 2013-07-18 16​:49\, Dave Mitchell wrote​:

For this to work\, we need a temporary 'already processed' flag on ops to show that they've already been visited (so in the above when we arrive back at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt will suffice?.

Mmm\, we might have to restore its original value again. Admittedly I don't remember the peep optimiser fully\, but if it uses any of the functions above\, we don't want calling them to leave some nodes unoptimised. Also\, it would possibly make it difficult for the peep optimiser to use this approach (for similar reasons).

I don’t think we need any extra flag here.

for each op {   if o->op_sibling is a list op and o->op_sibling->op_last == o\, then   next_op_to_look_at = o->op_sibling->op_sibling   o->op_sibling = NULL;   do our stuff ... }

I think the correct check for ‘is this sibling actually the parent?’ would be​:

if (o->op_sibling->op_flags & OPf_KIDS && (   o->op_sibling->op_first == o /* UNOP */   || (o->op_sibling->op_first->op_sibling /* LISTOP */ &&   o->op_sibling->op_last == o)   ))

--

Father Chrysostomos

p5pRT commented 10 years ago

From @iabyn

On Fri\, Jul 19\, 2013 at 12​:15​:04AM +0200\, Niels Thykier wrote​:

For this to work\, we need a temporary 'already processed' flag on ops to show that they've already been visited (so in the above when we arrive back at kid2 we know to follow op_sibling rather than op_first). Perhaps op_opt will suffice?.

Mmm\, we might have to restore its original value again. Admittedly I don't remember the peep optimiser fully\, but if it uses any of the functions above\, we don't want calling them to leave some nodes unoptimised. Also\, it would possibly make it difficult for the peep optimiser to use this approach (for similar reasons).

Note that my suggestion is specifically for the treewalker functions (process an op then its kids); the peephole optimiser isn't a treewalker (it follows op_next's\, not kids).

Also\, we need to temporarily set the op_sibling of the last kid from NULL to instead point back at its parent; we revert this to NULL once we visit the kid in question (which may involve needing another flag bit).

If you revert it back to NULL\, how are you going to use it for traversing the tree. If I understand this part correctly\, you would end up adding the parent-link back\, then use it and remove it again several times. And I am pretty sure the part of adding the parent-link is not going to be easy without recursion or some helper stack/queue.

Perhaps a specific example​:

A lot of the recursive tree-walker functions look like\, in essence​:

  Perl_foo(OP *o)   {   switch (o->op_type) {   ... fix up o in some way   }

  /* visit o's kids */   if (o->op_flags & OPf_KIDS) {   OP *kid = cUNOPo->op_first;   while (kid) {   foo(kid);   kid = kid->op_sibling;   }   }   }

I would change it to look like (somewhat handwavy)​:

  Perl_foo(OP *o)   {   while (o) {

  if (o->op_fake_sibling_flag) {   o->op_fake_sibling_flag = 0;   o->op_sibling = NULL;   }

  switch (o->op_type) {   ... fix up o in some way   }

  /* visit o's kids */   if (o->op_flags & OPf_KIDS) {   OP *lastkid = (loop through op_sibling chain to find last kid);   lastkid->op_sibling = o; /* tmp loop back to parents */   lastkid->op_fake_sibling_flag = 1;   o = lastkid;   }   else   o = o->op_sibling;   }   }

The above code is not workable - for example I don't address how to halt once we've parsed the whole subtree and ended back up at the original o; but what it does demonstrate is the *temporary* nature of the fixup; when we're about to process the list of kids\, we hack the last kid; when we reach the last kid\, we unhack it.

Actually\, if we know we're at the last op_sibling and so the next op will be the parent\, then we don't need an 'already processed' flag​: we know that the next node has already been done. Or maybe the tmp pointer should point to parent->op_sibling rather than to parent\, also avoiding the need for an 'already processed' flag.

Are you sure this will work for all cases\, e.g. the peep optimiser makes the following comment about loop ops​:

    /\* a while\(1\) loop doesn't have an op\_next that escapes the
     \* loop\, so we have to explicitly follow the op\_lastop to
     \* process the rest of the code \*/

(This is an honest question - I am by no means an expert on ops of any kind)

Again\, this suggestion doesn't apply to the peephole optimiser.

I tried a different approach that for op_free in the attached patch - it /doesn't/ work\, but I had to refactor part of op_free as a side-effect. Part of this refactoring might help you do your proof-of-concept though.

The basic idea behind my patch was to abuse the op_next as a backlink doing free (under the assumption that "about to be freed" => "free general purpose memory"). In theory\, it is also stackless like your idea\, but it works only for free (as the traversion is destructive). Sadly\, this seems to break perl causing many scripts to do "nothing at all". Possibly a bug in my implementation or in my assumption. Anyway\, hope it helps you.

As I mentioned earlier\, I haven't really got time to look at the deeply at the moment.

-- "You're so sadly neglected\, and often ignored. A poor second to Belgium\, When going abroad."   -- Monty Python\, "Finland"

p5pRT commented 10 years ago

From @iabyn

On Thu\, Jul 18\, 2013 at 10​:05​:09AM -0700\, bulk88 via RT wrote​:

Instead of Thykier's 10 deep fixed len mini stack\, or davem's adding return to root OP * to end of a branch on optree\, here is my WAG idea.

Do an ENTER\, use SAVEDESTRUCTOR_X for every OP * encountered\, then do a LEAVE\, and the ops will free in a linear flattened model using an malloced unlimited length (OS user mode memory limit) stack (save stack)?

Unfortunately I don't think that would work\, since the save stack is per interpreter\, while the op tree is shared among threads (so if the thread that compiled the code exits\, the op tree is freed\, screwing any threads still live and using that code).

I'll guess from the other posts in this ticket so far\, that these op tree deep recursion bugs are something/some function needs to trace around the outside of the tree\, linearlizing the tree. A combination of for loops and recursion are used to do this in the current implementation. Is this a correct explanation?

Not really. During compilation it's sometimes required to visit every node in a tree (or part of a tree) in either depth-first or breath-first order. For example when compiling an assignment op (where expr is a subtree that's already been compiled)​:

  @​foo = expr

Its only at this point that the compiler knows that expr will be evaluated in list context. It calls Perl_list() on the top node of the subtree representing expr. This will mark that node as list context\, then (if appropriate) recursively visit any children of that node; skipping any node whose context has already been determined.

As the code is compiled\, more and more small subtree are joined into bigger trees\, until you end up with a single tree containing the whole function\, with Perl_scalar() and Perl_list() and others being called multiple times on various subtrees (but usually a particular subtree is only walked once).

As a final compilation act\, the whole sub's optree is walked once in finalize_optree() to do any final fixups.

Then when a sub is freed\, its optree is recursively freed using a similar treewalk.

Also\, in the for loop+recusion call stacks\, is the algorithm\, where x is the number of OP structs in the sub\, x*x\, or x! or just plain x? I'm trying to figure out if there is a performance problem/big O of these op tree recursion crashes.

They should be plain x.

-- I've often wanted to drown my troubles\, but I can't get my wife to go swimming.

p5pRT commented 10 years ago

From @iabyn

On Thu\, Jul 18\, 2013 at 08​:22​:00PM +0100\, hv@​crypt.org wrote​:

Maybe I misrepresent it\, but it sounds rather an expensive way - in memory and complexity - to cope with the pathological cases. I feel like there ought to be something rather lighter-weight that performs well in normal cases. If it performs well in pathological cases as well\, all the better\, but (other than trying not to crash) I don't feel they're what we should optimize for.

Moving the C-stack recursion to an optree-traversal stack that grows at need (but rarely needs to in any but pathological cases) sounds as if it should suffice\, and as if it could involve rather less complexity.

I think both approaches would have a similar level of complexity. They'll both make what was a simple recursive function more messy..

The advantage of my approach would be that no new data needs mallocing(); the entries in the traversal stack are essentially being temporarily being stored in the otherwise NULL op_sibling fields of the last kid at each depth.

I don't think the code for my approach need be messy\, but it would require some hard thinking to do right - i.e. to get exactly the right algorithm so that everything just comes out in the wash and doesn't require lots of flags and messing about.

But I'm not opposed to the mallocing-a-traversal stack either.

-- Atheism is a religion like not collecting stamps is a hobby

p5pRT commented 10 years ago

From @iabyn

On Thu\, Jul 18\, 2013 at 03​:46​:31PM -0700\, Father Chrysostomos via RT wrote​:

I think the correct check for ‘is this sibling actually the parent?’ would be​:

if (o->op_sibling->op_flags & OPf_KIDS && ( o->op_sibling->op_first == o /* UNOP */ || (o->op_sibling->op_first->op_sibling /* LISTOP */ && o->op_sibling->op_last == o) ))

On my quick play with this last night I found that it wasn't simple\, for a given node o\, to determine its last child. For example LOGOPs don't have a pointer to the second child. I tried in op_free() to determine the last kid by doing a switch on the OP class (e.g. OA_LISTOP) and handling each class\, then comparing that with a brute-force   kid=cUNOPo->op_first; while (kid && kid->op_sibling) kid->op_sibling and asserting that the two results were always the same. I found so many exceptions that I quickly gave up.

-- Dave's first rule of Opera​: If something needs saying\, say it​: don't warble it.

p5pRT commented 10 years ago

From @bulk88

Can someone add a HasPatch RT tag to this ticket now that there is a patch in it?

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 10 years ago

From @cpansprout

On Wed Jul 17 14​:29​:33 2013\, niels@​thykier.net wrote​:

Hi\,

I cannot reproduce the issue in S_finalize_op on blead[1]. It is possible that it has been "fixed" somehow (or we got different architectures).

On the other hand\, I can reproduce the crash caused by​:

perl -e'eval "sub{".q"$a+"x shift . "}"' 500000

I have attached a prototype patch that solves the problem (at least for me). With the patch applied\, I can run it with up to at least 2M without it crashing - I have not tested beyond that because perl starts to use >= 4GB of RAM around the 2M mark. A more memory friendly test case is definitely welcome. :)

For the reviewer(s)​: the patch is much easier to read by ignoring space changes[2]. It re-uses the basic principe of the DEFER marco used in the peephole optimizer. The "major" difference is that it uses a fixed-size stack rather than a fixed-size queue. The size of the queue did not seem to matter a lot (even with MAX_DEFERRED reduced to 2 was the crash avoided in original test case).

The test suite showed no regression\, perl was configured with​: ./Configure -des -Dusedevel

~Niels

[1] I have been using code suggested by Dave Mitchell (rewritten as a perl one-liner)

./perl -e 'my $code = q[my $i = 0; if ($i) { print } ] . "\n";' -e '$code .= q[ elsif ($i) { print } ] . "\n" for 1..$ARGV[0];' -e 'eval $code' 10000

[2] Compare

$ git diff --ignore-all-space --stat op.c | 37 [...] 1 file changed\, 34 insertions(+)\, 3 deletions(-)

versus.

$ git diff --stat op.c | 141 [...] 1 file changed\, 86 insertions(+)\, 55 deletions(-)

Would you be willing to finish this patch\, either making it malloc a deferred stack when necessary (presumably a rare case) or using Dave Mitchell’s op_sibling technique?

--

Father Chrysostomos

p5pRT commented 9 years ago

From @tonycoz

On Wed Jul 24 12​:37​:14 2013\, sprout wrote​:

Would you be willing to finish this patch\, either making it malloc a deferred stack when necessary (presumably a rare case) or using Dave Mitchell’s op_sibling technique?

I've attached a variant of Niels' patch\, included inline below as a whitespace ignoring diff.

Without the patch C\< ./perl -e eval\ "sub{".q"$a+"x\ shift\ .\ "}" 500000 > crashed deep in op_free()\, with the patch it didn't.

I was a bit worried about increasing the allocation linearly would result in a performance issue\, but that turned out to be faster than a simple exponential allocation (on Linux\, YMMV.)

Tony

Inline Patch ```diff diff --git a/op.c b/op.c index 59a3541..1460995 100644 --- a/op.c +++ b/op.c @@ -675,11 +675,29 @@ optree. =cut */ +#define DEFERRED_STEP 100 +#define DEFER(o) \ + STMT_START { \ + if (UNLIKELY(defer_ix == (defer_stack_alloc-1))) { \ + defer_stack_alloc += DEFERRED_STEP; \ + assert(defer_stack_alloc > 0); \ + Renew(defer_stack, defer_stack_alloc, OP *); \ + } \ + defer_stack[++defer_ix] = o; \ + } STMT_END + +#define POP_DEFERRED() (defer_ix >= 0 ? defer_stack[defer_ix--] : (OP *)NULL) + void Perl_op_free(pTHX_ OP *o) { dVAR; OPCODE type; + SSize_t defer_ix = -1; + SSize_t defer_stack_alloc = 0; + OP **defer_stack = NULL; + + do { /* Though ops may be freed twice, freeing the op after its slab is a big no-no. */ @@ -687,7 +705,7 @@ Perl_op_free(pTHX_ OP *o) /* During the forced freeing of ops after compilation failure, kidops may be freed before their parents. */ if (!o || o->op_type == OP_FREED) - return; + continue; type = o->op_type; @@ -714,7 +732,7 @@ Perl_op_free(pTHX_ OP *o) /* Need to find and remove any pattern match ops from the list we maintain for reset(). */ find_and_forget_pmops(o); - return; + continue; } } break; @@ -732,7 +750,16 @@ Perl_op_free(pTHX_ OP *o) OP *kid, *nextkid; for (kid = cUNOPo->op_first; kid; kid = nextkid) { nextkid = OP_SIBLING(kid); /* Get before next freeing kid */ + if (!kid || kid->op_type == OP_FREED) + /* During the forced freeing of ops after + compilation failure, kidops may be freed before + their parents. */ + continue; + if (!(kid->op_flags & OPf_KIDS)) + /* If it has no kids, just free it now */ op_free(kid); + else + DEFER(kid); } } if (type == OP_NULL) @@ -753,8 +780,15 @@ Perl_op_free(pTHX_ OP *o) if (PL_op == o) PL_op = NULL; #endif + } while ( (o = POP_DEFERRED()) ); + + Safefree(defer_stack); } +#undef DEFER +#undef POP_DEFERRED +#undef DEFERRED_STEP + void Perl_op_clear(pTHX_ OP *o) { ```