STATUS 15 KB

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