123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436 |
- 5.8, 5.6 and earlier had a good core perl compiler, but we are much better.
- B::C is stable and used in production for -O0 and -O3. For bigger programs
- not all methods in certain packages are detected, you'd need to add them via
- -u<packagename>.
- B::CC is very unstable, work is in progress. Certain alioth benchmarks are 6x faster.
- Recursive function calls and certain dynamic ops are not yet supported.
- The Bytecode compiler is only stable for >=5.8, non-debugging, threaded. The
- CPAN Bytecode compiler is disabled for 5.6, we keep the old. The old core
- compiler fails for 50% of the testcases.
- Windows and other OS with strict linking will fail to install due to some
- not exported libperl symbols. Looks at the patches in ramblings.
- Windows: Bad luck. perl 5.16 has finally all needed symbols exported, but the
- 5.16 perl releases are considered too insecure to be recommended for production.
- Security: The latest released compiler version 1.42 is only supported up to 5.14.2.
- 5.16.x, 5.14.3 and 5.12.5 are too insecure to be recommended for production.
- 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 + 5.18 compatibility added.
- Open Problems for B::C:
- See google issues.
- 5.16 not yet supported in the stable 1.42 release, only git master.
- See below at the detailed 5.6, 5.8, 5.10, 5.12, 5.14, 5.16, 5.17.6 status
- TEST STATUS
- -----------
- Regularily tested on cygwin1.7, darwin 10.8/intel, centos4, centos5, centos6,
- debian5, debian6, freebsd7, freebsd8, solaris10/intel sunpro, openbsd49, netbsd.
- With the respective default gcc and clang compilers, with the latest address-sanitizer
- versions.
- Not so regurarily on darwin 10.4/ppc, strawberry-5.10.1, strawberry-5.12.2,
- strawberry-5.14, strawberry-5.16 and activeperl-5.10.1/msvc8
- 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.19.x status
- -----------
- PADLIST support not yet stable.
- 5.18 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
|