forked from rurban/perl-compiler
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSTATUS
416 lines (341 loc) · 15.1 KB
/
STATUS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
5.8, 5.6 and earlier had a good core perl compiler, but we are much better.
Our Bytecode compiler disabled for 5.6, we keep the old. The old core
compiler fails 50% but in mine is a 5.6 blocker.
Bytecode is only stable for >=5.8, non-debugging, threaded.
C is used in production, but a bit unstable, not all methods packages
are detected.
CC is very unstable and slow, work in progress.
C and CC: Same ok and less failures as with 5.6, 5.8 and 5.9.4.
In 5.8.8 and 5.8.9 we have much less errors in the testsuite for the
new CPAN compiler and the CORE compiler. See below.
Most B::C and B::CC bugs fixed.
5.10 + 5.12 + 5.14 + 5.16 compatibility added.
Open Problems for B::C:
shared_hek cleanup esp. since 5.15
see google issues
See below at the detailed 5.6, 5.8, 5.10, 5.12, 5.14 status
TEST STATUS
-----------
Tested on cygwin1.7, centos4, centos5.6, centos6,
debian5, freebsd7, solaris10 intel sunpro, openbsd49
Not so regurarily on strawberry-5.10.1, strawberry-5.12.2, activeperl-5.10.1
List of failed tests.
CORE (old)
----
5.6.2:
t/bytecode 3,6,8..10,12,15,16,18,28,31,35,38,39
t/c 8,15,16,22,27,28,31 | 27 worked in 5.6.2!
t/c_o1 8,15,16,22,27,28,31
t/c_o2 8,15,16,22,27,28,31
t/cc 15,18,21,25,27,28,30..32
t/cc_o1 15,18,21,25,27,28,30..32
t/cc_o2 10,15,16,18,21,25,26,27,28,30..32
5.8: | non-threaded
t/bytecode 27,44,33,39
t/c 11,14,15,20,23,27..29,31,101,102 | 5,7-12,14-20,22-23,25,27,28,30,31
t/c_o1 1,3-8,10..12,14,15,17..25,27..29,31,101,102| 7-12,14-20,22-23,25,27,28,30,31
t/c_o2 1,3-12,14,15,17..25,27..29,31,101,102 | 7-12,14-20,22-23,25,27,28,30,31
t/cc 7,11,14,15,18..21,23..25,28..32,101..103
t/cc_o1 7,11,14,15,18..21,23..32,101..103
t/cc_o2 7,10,11,14..16,18-21,23..32,101..103
Recipe:
p=perl5.6.2
t/testc.sh -q -c
for t in $(seq -f"%02.0f" 32); do rm ccode 2>/dev/null; $p -MO=C,-occode.c ccode$t.pl 2>/dev/null && $p script/cc_harness ccode.c -o ccode >/dev/null; echo -n "$t: "; $p ccode$t.pl; echo -n " => "; ./ccode; echo; done
p=perl5.8.9
for t in $(seq -f"%02.0f" 35); do rm ccode 2>/dev/null; $p -MO=C,-occode.c ccode$t.pl 2>/dev/null && $p script/cc_harness -Bstatic ccode.c -o ccode >/dev/null; echo -n "$t: "; $p ccode$t.pl; echo -n " => "; ./ccode; echo; done
p=perl5.8.9d-nt
for t in $(seq -f"%02.0f" 35); do rm ccode 2>/dev/null; $p -MO=C,-occode.c ccode$t.pl 2>/dev/null && $p script/cc_harness -Bdynamic ccode.c -o ccode >/dev/null; echo -n "$t: "; $p ccode$t.pl; echo -n " => "; ./ccode; echo; done
B::C (new)
----
t/testc.sh -q -c; t/testcc.sh -q -c or make test TEST_VERBOSE=1
5.6.2:
t/bytecode broken/not used
t/c 15,41-43,50
t/c_o1,2 +44,45
t/cc 15,21,30,35,41-46,50,103-105
5.8.[45]:
t/bytecode -
t/c -
t/cc 3,7,15,21,27,29,30,44-46,50,103,105
5.8.9:
t/bytecode -
t/c -
t/cc 21,30,46,50,103,105
5.10.1:
t/bytecode 27,42,43
t/c -
t/cc 14,21,30,46,50,103,105
5.12.4:
t/bytecode 32,46
t/c 21
t/cc 14,21,30,46,50,103,105
5.14.2:
t/bytecode 27,46
t/c -
t/cc 14,21,30,46,50,103,105
5.16.1:
t/bytecode 27,46
t/c -
t/cc 14,21,30,46,50,103,105
CPAN Modules
------------
See t/modules.t:is_todo() We only try to compile use module, not the testsuite.
We only try B::C so far.
The full module testsuite is run with t/testm.sh -t [OPTS] Module
Compile-time status from top100:
generally: pass 100%
5.6.2 pass 100%
5.8.9 pass 100%
5.10.1 pass 100%
5.12.4 pass 100%
5.14.2 pass 100%
5.16.1 fail 4% (unshare_hek) Moose MooseX::Types DateTime DateTime::TimeZone
5.17.6 ??
Run-time tests not yet fully done
5.17.x status
-----------
PADLIST support not yet stable.
op_static fixed since 5.17.6, 5.17.2-5.17.5 are unusable without -fno-destruct
5.16 status
-----------
new XSLoader:load_file
hang at hfree_next_entry issue78 (runtime load of Carp), esp. problematic non-debugging
unshare_hek issues in dynamic scope
5.10, 5.12, 5.14 status
-----------------------
TODO for B::C
tests 21,41-43: B destruction,46,50
Encode qr-copy issue 71
restricted hashes in 5.10.0
r-magic (e.g. Template::Stash 5.10.0 only)
check t/testcore and testm.sh -t
see google issues (71,59)
Fix CC
several other issues detected (and mostly fixed) by Heinz Knutzen
minimize pad copies from local to pad
label not defined (utf8::SWASHNEW)
DONE
----
fixed with 1.37:
fixed wrong test 46, test for Exporter STASH in *main:: STASH
copy-on-grow with LEN=0 and FAKE clash with share_hek
share_hek re-implemented
init of READONLY hash keys
re-hash everything at startup (oCERT-2011-003)
find UNIVERSAL methods, load SelectSaver with IO
hv_clear_placeholders
%+, %-, %!
%SIG
magic->PTR when SV (>5.6)
attributes::reftype
inc_cleanup (partially)
CV prototypes (>5.10)
ignore aelemfast SPECIAL pads (5.8.[45])
strip version object overload from XS packages (i91)
restore stdio handles from BEGIN blocks (Test::NoWarnings)
B::COP::stashflags (>5.15.4)
lost PL_regex_pad, (5.15 threaded)
fixed with 1.36:
5.15 XSLoader and hash init
support lexical warnings
better __DATA__ detection and support,
still IO::File not IO::Scalar handle though
fixed test 29 mostly (use IO)
fixed with 1.35:
improve package_pv detection for methods,
detect previously missing packages within the main source file
run-time %ENV
fixed with 1.32:
improved scanner, try_isa, mark_package force, ...
do not gp_free shared GPs
Internals::V
dl_init of cached deleted packages
fixed with 1.30:
cc_queue sort 18 ccpp
dl_init regression
xs_init (soname by context)
5.14 support
package_pv detection for method_named
AUTOLOAD goto xsub and SelfLoader esp. on 5.8 (27).
use AutoLoader works okay. (test 27, 31)
>5.11.3 test 32 catch evaltry die
fixed test 29 >5.10 DEBUGGING for -O0 (use IO)
fixed xpvio off-by-one error for 5.10 (test 29)
mark a package which is autoloaded from XS
fixed forbidden REGEXP IVX/NVX access since 5.12
fixed evaltry (test 12), NVX was shared with 2 xpad_cop_seq ints
which accidently just worked before 1.17, but not after using the %g
representation changed with 1.16. Also fixed in Bytecode, fixing tests 9,10,12.
fixed several minor bugs only in modules, no short testcases yet. See Changes
fixed PP_ENTEREVAL (CC test 12) for 5.10 with 1.14.
Nullify ending retop for the string to CALLRUNOPS.
fixed __DATA__ IO (test 15) on 5.10 and 5.11 with 1.12.
On 5.6 it is hard to fix (re-implement PerlIO::scalar).
fixed RV => IV on blead (test 16 tiearray magic obj HVref) with 1.11
fixed GV -> BM magic (index) without needing fbm_compile with 1.09. Just 5.8.9 not.
fixed non-xsub AUTOLOAD (31) with 1.08
ccode17_o1 namepad[1] to PL_sv_undef
GVCV for 5.11 (27)
runtime require $scalar (28)
RVs for 5.11 (29)
index (fbm_compile) for GVs fixed with 1.04_31
test 14+23 destruction of GvPVX of the empty main:: stash fixed by adding a dummy.
cccode19 sort failure via custom sortcv fixed with B::CC 1.02_03. endless loop
autoload subs from main::, from packages it works ok (test 8)
fixed with 1.04_25
panic: illegal pad in pad_new: 0x18c4368[0x18cf6e8] with DEBUGGING only
CvPADLIST: curpad<=>comppad
fixed with 1.04_22
pvx: seems to be fixed now in bc, and c
With the move of the pvx field from xpv to the sv, we have to solve
that differently for the Bytecode and C backend.
Bytecode can simply mimic the old XPV behaviour of a 3 field struct
(pvx, cur, len) to simplify pv handling.
hv: crash at invalid entry in hv_store in B::HV::save fixed
hek: new implementation, needs static optimization via heksect
regexp: match works, split still broken
bc 10: padv+sassign => Modification of a read-only value attempted at
bytecode10.pl line 1. Only on cygwin, not on linux!
The bytecode is exactly the same, it must be pp_entersub() with &$cv()
Is FAKE flag of the padsv is missing or should we check for readonly pads?
g <1> entersub[t4] vKS/TARG,1
=> Perl_sv_force_normal_flags()
if (SvREADONLY(sv) && (!SvFAKE(sv)) && (IN_PERL_RUNTIME)) => die
SV = NULL(0x0) at 0x12207c0
REFCNT = 2147483129
FLAGS = (READONLY)
-Dt crash fixed by core patch pl-dump-const.patch
cop_io status?
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2006-05/msg00770.html
5.8 status
----------
I've restored full 5.8 backwards compatibility, mainly for test comparison.
But since the new B::C compiler is better than the CORE compiler, it is installed.
Details
--------
Test::Harness:
t/testm.sh -D- Test::Harness; gdb ./test_harness
enter nextstate pushmark const(PV("ok"\0)) print leave
cxstack is corrupt at leave
5.8.9d-nt test 27 AUTOLOAD:
gdb --args ccode27
start
b Perl_gv_autoload4
=> The Fcntl stash misses AUTOLOAD
-fcog: (13) unshare_hek tricky assertion fails
he: "Find the shared he which is just before us in memory"
./ccode13_o1 Assertion he->shared_he_he.hent_hek == hek failed: file "hv.c", line 2327.
Maybe call our own destruct handler on >=510, which resets all such pv's to NULL beforehand.
cccode12_o2: 5.10.1d-nt
Program received signal SIGSEGV, Segmentation fault.
0x521ab445 in Perl_pop_scope () at scope.c:103
103 const I32 oldsave = PL_scopestack[--PL_scopestack_ix];
(gdb) p PL_scopestack_ix
$1 = -272716323
(gdb) bt
#0 0x521ab445 in Perl_pop_scope () at scope.c:103
#1 0x52121784 in Perl_pp_leave () at pp_hot.c:1904
#2 0x00401ca5 in _fu23__PL_ppaddr () at cccode12_o2.c:246
#3 0x520d95d1 in Perl_runops_debug () at dump.c:1968
bytecode11 - 5.11d
assertion "isGV_with_GP(shplep)" failed: file "B.c", line 4961
#0 XS_B__GV_GP (my_perl=0x14222d0, cv=0x152a750) at B.c:15887
#1 0x521ca568 in Perl_pp_entersub () from /usr/local/bin/cygperl5_11d.dll
#2 0x52165d4c in Perl_runops_debug () from /usr/local/bin/cygperl5_11d.dll
#3 0x521a9730 in Perl_call_sv () from /usr/local/bin/cygperl5_11d.dll
#4 0x521b1640 in Perl_call_list () from /usr/local/bin/cygperl5_11d.dll
#5 0x521a596f in perl_parse () from /usr/local/bin/cygperl5_11d.dll
#6 0x00401136 in main (argc=4, argv=0x14221a0, env=0x1420090)
(gdb) p *gv
$2 = {sv_any = 0x14d1d48, sv_refcnt = 3, sv_flags = 32777 (0x8009), sv_u = {
svu_iv = -5931823458977729848, svu_uv = 12514920614731821768,
svu_rv = 0x14db2c8, svu_pv = 0x14db2c8 "ðúE\001", svu_array = 0x14db2c8,
svu_hash = 0x14db2c8, svu_gp = 0x14db2c8}}
cccode3.c - 5.11 dstr assert
XPUSHs(GvSV(PL_curpad[1])); /* oops, this GV is empty */
/* stack = */
/* BINOP (0x15ec140) sassign [OPf_STACKED] */
dst = POPs; src = TOPs; /* empty var dst at stack ! */
MAYBE_TAINT_SASSIGN_SRC(src);
SvSetSV(dst, src);
ccode3 - 5.10 (fixed via workaround, dynamic init)
-------------
SEGV $_ = "xyxyx"; %j=(1,2); s/x/$j{print("z")}/g; print $_
empty data. cause: no pv flag and refcnt in the sv
#0 0x004a38c3 in Perl_fbm_instr (my_perl=0x18926d0, big=0x18d4bc8 "xyxyx",
bigend=0x18d4bcd "", littlestr=0x0, flags=0) at util.c:577
#1 0x006481d4 in Perl_re_intuit_start (my_perl=0x18926d0, prog=0x18d2088,
sv=0x18d3fb8, strpos=0x18d4bc8 "xyxyx", strend=0x18d4bcd "", flags=0,
data=0x0) at regexec.c:561
#2 0x005a13f3 in Perl_pp_subst (my_perl=0x18926d0) at pp_hot.c:2105
(gdb) p *rx
$7 = {engine = 0x6a06a0, mother_re = 0x0, extflags = 1126170624, minlen = 0,
minlenret = 0, gofs = 0, substrs = 0x18c0908, nparens = 0, intflags = 0,
pprivate = 0x18d1588, lastparen = 0, lastcloseparen = 0, swap = 0x0,
offs = 0x18cf748, subbeg = 0x0, sublen = 0, prelen = 0,
precomp = 0x18ab870 ")", wrapped = 0x18ab868 "(?-xism:)", wraplen = 9,
seen_evals = 0, paren_names = 0x0, refcnt = 1}
ccode2 - 5.11 (fixed via workaround, dynamic init)
-------------
match with /\d/
(gdb) p *pm
$1 = {op_next = 0x66513c, op_sibling = 0x665198, op_ppaddr = 0x59a6e9 <Perl_pp_match>, op_targ = 0, op_type = 31,
op_opt = 0, op_latefree = 1, op_latefreed = 0, op_attached = 0, op_spare = 0, op_flags = 2 '\002',
op_private = 64 '@', op_first = 0x0, op_last = 0x0, op_pmoffset = 46, op_pmflags = 0, op_pmreplrootu = {
op_pmreplroot = 0x0, op_pmtargetoff = 0}, op_pmstashstartu = {op_pmreplstart = 0x0, op_pmstashpv = 0x0}}
(gdb) n
1216 register REGEXP *rx = PM_GETRE(pm);
(gdb) p *rx
$2 = {engine = 0x69f690, mother_re = 0x0, extflags = 52428800, minlen = 1, minlenret = 1, gofs = 0,
substrs = 0x1920188, nparens = 0, intflags = 0, pprivate = 0x1915448, lastparen = 0, lastcloseparen = 0,
swap = 0x0, offs = 0x191f6c8, subbeg = 0x0, sublen = 0, prelen = 1, precomp = 0x18fb870 "0)",
wrapped = 0x18fb868 "(?-xism:0)", wraplen = 10, seen_evals = 0, paren_names = 0x0, refcnt = 1}
TEST COVERAGE
-------------
Bytecode:
coverage for ret(0) ldsv(1) ldop(2) stsv(3) stop(4) stpv(5) ldspecsv(6)
ldspecsvx(7) newsv(8) newsvx(9) nop(10) newop(11) newopx(12) newopn(13)
newpv(14) pv_cur(15) pv_free(16) sv_upgrade(17) sv_refcnt(18) sv_refcnt_add(19)
sv_flags(20) xrv(21) xpv(22) xpv_cur(23) xpv_len(24) xiv(25) xnv(26)
xlv_targoff(27) xlv_targlen(28) xlv_targ(29) xlv_type(30) xbm_useful(31)
xbm_previous(32) xbm_rare(33) xfm_lines(34) comment(35) xio_lines(36) xio_page(37)
xio_page_len(38) xio_lines_left(39) xio_top_name(40) xio_top_gv(41) xio_fmt_name(42)
xio_fmt_gv(43) xio_bottom_name(44) xio_bottom_gv(45) xio_type(46) xio_flags(47)
xcv_xsubany(48) xcv_stash(49) xcv_start(50) xcv_root(51) xcv_gv(52) xcv_file(53)
xcv_depth(54) xcv_padlist(55) xcv_outside(56) xcv_outside_seq(57) xcv_flags(58)
av_extend(59) av_pushx(60) av_push(61) xav_fill(62) xav_max(63) xav_flags(64)
xhv_name(65) hv_store(66) sv_magic(67) mg_obj(68) mg_private(69) mg_flags(70)
mg_name(71) mg_namex(72) xmg_stash(73) gv_fetchpv(74) gv_fetchpvx(75) gv_stashpv(76)
gv_stashpvx(77) gp_sv(78) gp_refcnt(79) gp_refcnt_add(80) gp_av(81) gp_hv(82)
gp_cv(83) gp_file(84) gp_io(85) gp_form(86) gp_cvgen(87) gp_line(88) gp_share(89)
xgv_flags(90) op_next(91) op_sibling(92) op_ppaddr(93) op_targ(94) op_type(95)
op_opt(96) op_latefree(97) op_latefreed(98) op_attached(99) op_first(102) op_last(103)
op_pmreplroot(105) op_pmreplstart(106) op_pmreplrootpo(108) op_pmstash(109)
op_pmreplrootgv(110) pregcomp(111) op_pmflags(112) unused(113) op_reflags(114)
op_sv(115) op_pv(117) op_pv_tr(118) op_redoop(119) op_nextop(120) op_lastop(121)
cop_label(122) cop_stash(125) cop_filegv(126) push_begin(134) push_init(135)
push_end(136) curstash(137) defstash(138) data(139) incav(140) load_glob(141)
regex_padav(142) comppad_name(144) xgv_stash(145) signal(146) formfeed(147)
JIT PLANS
---------
Jit came alive March 2010 on github and now CPAN.
It works to do profiling, but is not finished.
B-C-1.04_10:
Playing with the idea to target against parrot pir instead of lightning
and use the parrot jit, with pbc_to_exe or exec_save.
Then we need no jit support in the ByteLoader and get rid of all the Jit
stuff for now.
=> B::PIR, Doing mentoring for Google Soc 2008
B-C-1.04_03:
added Jit and Asm layout, with the idea of using either
lightning as jit backend (Jit), or creating our own assembler (Asm)
to be able to use a high-level language.
Abbrevations
------------
bc B::ByteCode
c B::C
cc B::CC
-D -DDEBUGGING perl, also used as d version suffix, eg 5.8.8d
-nt not threaded perl
2012-01-26 rurban