Perl / perl5

šŸŖ The Perl programming language
https://dev.perl.org/perl5/
Other
1.91k stars 542 forks source link

[PATCH] export data symbols as data on Win32 #14426

Closed p5pRT closed 9 years ago

p5pRT commented 9 years ago

Migrated from rt.perl.org#123626 (status was 'resolved')

Searchable as RT123626$

p5pRT commented 9 years ago

From @bulk88

Created by @bulk88

Need #.

Perl Info ``` Flags: category=core severity=low Site configuration information for perl 5.21.4: Configured by Owner at Thu Sep 18 12:08:58 2014. Summary of my perl5 (revision 5 version 21 subversion 4) configuration: Derived from: 7d2b2edb94ab56333b9049a3e26d15ea18445512 Ancestor: 19be3be6968e2337bcdfe480693fff795ecd1304 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 use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -O1 -MD -Zi -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_TIME -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T', optimize='-O1 -MD -Zi -DNDEBUG', cppflags='-DWIN32' ccversion='12.00.8168', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8, longdblkind=0 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 -opt:ref,icf -libpath:"c:\perl521\lib\CORE" -machine:x86' libpth=C:\PROGRA~1\MIAF9D~1\VC98\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=perl521.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"c:\perl521\lib\CORE" -machine:x86' Locally applied patches: uncommitted-changes a0fe7a7e75de29e59f1da0d6822dc06e5be658fe a261faffee83d0145642ab5d1d046c9f813bc497 6506ab86ad1602a9ca720fcd30446dce1461d23d 7d2b2edb94ab56333b9049a3e26d15ea18445512 @INC for perl 5.21.4: lib C:/perl521/srcnew/lib . Environment for perl 5.21.4: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH= PERL_BADLANG (unset) PERL_JSON_BACKEND=Cpanel::JSON::XS PERL_YAML_BACKEND=YAML SHELL (unset) ```
p5pRT commented 9 years ago

From @bulk88

The bad perl521.lib pics show the .lib says the data symbol is a code/machine code symbol\, and is a C function that is imported from perl5**.dll. Next 3 pics show SDBM crashing because the C compiler thought PL_markstack_ptr was an extern DLL scope var in the same DLL\, due to something in commit http​://perl5.git.perl.org/perl.git/commit/ac0e53cd2e68c3cd1b17197f1802e71896bf36aa which has yet to be fixed. But the PL_markstack_ptr symbol was a machine code jump stub from perl521.lib. The C compiler should have directly referenced __imp__PL_markstack_ptr IAT array slice\, not the PL_markstack_ptr symbol. The linker then supplied the PL_markstack_ptr symbol (a C function) instead of erroring out. With this patch\, incorrectly declaring an imported DATA symbol\, will error out at link time\, instead of runtime SEGV. Since the data symbols on threaded Win32 Perl are extremely rarely used by typical XS code\, and the chance of dropping out declspec(dllimport) with "-DPERL_STATIC_SYMS" is even more rare\, SDBM didn't crash on threaded Win32 perl even though all the data symbols were junk\, probably none of them were ever used. Below is list of data symbols on threaded win32 blead perl.


  ordinal hint RVA name

  1 0 000CC382 PL_No   2 1 000CC380 PL_Yes   3 2 000CCC10 PL_bincompat_options   4 3 000CCBE0 PL_block_type   5 4 000CBB20 PL_charclass   6 5 00114720 PL_check   7 6 00115680 PL_check_mutex   8 7 000DF1FC PL_core_reg_engine   9 8 00114D30 PL_csighandlerp   10 9 00115114 PL_curinterp   11 A 00115118 PL_do_undump   12 B 001156A0 PL_dollarzero_mutex   13 C 000CC6E0 PL_fold   14 D 000CC7E0 PL_fold_latin1   15 E 00114010 PL_fold_locale   16 F 000CCAE0 PL_freq   17 10 00115698 PL_hash_seed   18 11 0011513C PL_hash_seed_set   19 12 000CC384 PL_hexdigit   20 13 00115720 PL_hints_mutex   21 14 000CCCEC PL_interp_size   22 15 000CCCF0 PL_interp_size_5_18_0   23 16 00114D34 PL_keyword_plugin   24 17 000CC8E0 PL_latin1_lc   25 18 000CEC20 PL_magic_data   26 19 000CE7C0 PL_magic_vtable_names   27 1A 000CE840 PL_magic_vtables   28 1B 000CC36C PL_memory_wrap   29 1C 000CC9E0 PL_mod_latin1_uc   30 1D 001156C0 PL_my_ctx_mutex   31 1E 0011512C PL_my_cxt_index   32 1F 000CC1C8 PL_no_aelem   33 20 000CC2D4 PL_no_dir_func   34 21 000CC300 PL_no_func   35 22 000CC210 PL_no_helem_sv   36 23 000CC348 PL_no_localize_ref   37 24 000CC280 PL_no_mem   38 25 000CC254 PL_no_modify   39 26 000CC324 PL_no_myglob   40 27 000CC290 PL_no_security   41 28 000CC2AC PL_no_sock_func   42 29 000CC110 PL_no_symref   43 2A 000CC194 PL_no_usym   44 2B 000CC0F4 PL_no_wrongref   45 2C 000CD308 PL_op_desc   46 2D 00115700 PL_op_mutex   47 2E 000CCCF8 PL_op_name   48 2F 000CE180 PL_op_private_bitdef_ix   49 30 000CE488 PL_op_private_bitdefs   50 31 000CE130 PL_op_private_bitfields   51 32 000CDF28 PL_op_private_labels   52 33 000CE630 PL_op_private_valid   53 34 00115138 PL_op_seq   54 35 00115134 PL_op_sequence   55 36 000CD918 PL_opargs   56 37 00115128 PL_perlio_debug_fd   57 38 00115120 PL_perlio_fd_refcnt   58 39 00115124 PL_perlio_fd_refcnt_size   59 3A 001156E0 PL_perlio_mutex   60 3B 000CCCD0 PL_phase_names   61 3C 00114110 PL_ppaddr   62 3D 000DF108 PL_reg_extflags_name   63 3E 000DF188 PL_reg_intflags_name   64 3F 000DEEF0 PL_reg_name   65 40 000DEDA8 PL_regkind   66 41 000CC3B2 PL_revision   67 42 000CE7B8 PL_runops_dbg   68 43 000CE7B4 PL_runops_std   69 44 000CC3A8 PL_sh_path   70 45 000CC600 PL_sig_name   71 46 000CC670 PL_sig_num   72 47 0011511C PL_sig_trapped   73 48 001156D8 PL_sigfpe_saved   74 49 000DF1E0 PL_simple   75 4A 000DF1F0 PL_simple_bitmask   76 4B 000CC3B4 PL_subversion   77 4C 00115670 PL_sv_placeholder   78 4D 00115718 PL_thr_key   79 4E 00114D2C PL_use_safe_putenv   80 4F 000CBF20 PL_utf8skip   81 50 000CC3B8 PL_uuemap   82 51 000CED20 PL_valid_types_IVX   83 52 000CED60 PL_valid_types_IV_set   84 53 000CED30 PL_valid_types_NVX   85 54 000CED70 PL_valid_types_NV_set   86 55 000CED40 PL_valid_types_PVX   87 56 000CED50 PL_valid_types_RV   88 57 000DF1BC PL_varies   89 58 000DF1D4 PL_varies_bitmask   90 59 000CC3B3 PL_version   91 5A 00115130 PL_veto_cleanup   92 5B 00114D38 PL_w32_osver   93 5C 000CC0C4 PL_warn_nl   94 5D 000CC068 PL_warn_nosemi   95 5E 000CC088 PL_warn_reserved   96 5F 000CC020 PL_warn_uninit   97 60 000BFFA3 PerlIOBase_binmode


but the list of data symbols on unthreaded win32 perl is much bigger\, and no xsub can run without using the data export symbols (can't pop or read mark stack).


  ordinal hint RVA name

  1 0 00028500 ASCII_TO_NEED   2 1 000284F0 NATIVE_TO_NEED   3 2 00150888 PL_AboveLatin1   4 3 001507F4 PL_Argv   5 4 00150284 PL_Cmd   6 5 001500EC PL_DBcontrol   7 6 001501B4 PL_DBgv   8 7 0015086C PL_DBline   9 8 00150800 PL_DBsignal   10 9 001502E4 PL_DBsingle   11 A 0014FFB4 PL_DBsub   12 B 00150788 PL_DBtrace   13 C 00150380 PL_HasMultiCharFold   14 D 0014FF0C PL_InBitmap   15 E 001502E8 PL_Latin1   16 F 00126701 PL_No   17 10 001501C8 PL_NonL1NonFinalFold   18 11 0014FF60 PL_Posix_ptrs   19 12 001501AC PL_Sv   20 13 0014FF50 PL_UpperLatin1   21 14 0014FFC0 PL_XPosix_ptrs   22 15 00150308 PL_Xpv   23 16 00126702 PL_Yes   24 17 0014F07C PL_an   25 18 001506FC PL_argvgv   26 19 00150320 PL_argvout_stack   27 1A 0014FEF4 PL_argvoutgv   28 1B 001500D4 PL_basetime   29 1C 001500A8 PL_beginav   30 1D 0014F060 PL_beginav_save   31 1E 00125CE0 PL_bincompat_options   32 1F 00125DC0 PL_block_type   33 20 00150274 PL_blockhooks   34 21 0014FE70 PL_body_arenas   35 22 00150340 PL_body_roots   36 23 00150128 PL_bodytarget   37 24 0014F078 PL_breakable_sub_gen   38 25 00126CA0 PL_charclass   39 26 0011F120 PL_check   40 27 0014FFB0 PL_checkav   41 28 0014F048 PL_checkav_save   42 29 0011F0FC PL_chopset   43 2A 0014F040 PL_clocktick   44 2B 0014F06C PL_collation_ix   45 2C 001502AC PL_collation_name   46 2D 0011F0CC PL_collation_standard   47 2E 00150798 PL_collxfrm_base   48 2F 0011F0D0 PL_collxfrm_mult   49 30 001502CC PL_colors   50 31 00150758 PL_colorset   51 32 00150778 PL_compcv   52 33 00150720 PL_compiling   53 34 0014FE6C PL_comppad   54 35 00150280 PL_comppad_name   55 36 00150700 PL_comppad_name_fill   56 37 0015016C PL_comppad_name_floor   57 38 0014FE88 PL_constpadix   58 39 0014F074 PL_cop_seqmax   59 3A 00141B20 PL_core_reg_engine   60 3B 0011F0A0 PL_csighandlerp   61 3C 00150324 PL_curcop   62 3D 0014F098 PL_curcopdb   63 3E 0014F028 PL_curinterp   64 3F 0015002C PL_curpad   65 40 00150108 PL_curpm   66 41 00150024 PL_curstack   67 42 00150704 PL_curstackinfo   68 43 00150864 PL_curstash   69 44 00150148 PL_curstname   70 45 00150020 PL_custom_op_descs   71 46 00150160 PL_custom_op_names   72 47 001507A0 PL_custom_ops   73 48 0014F090 PL_cv_has_eval   74 49 001502EC PL_dbargs   75 4A 0015003C PL_debstash   76 4B 00150104 PL_debug   77 4C 00150820 PL_debug_pad   78 4D 0014F054 PL_def_layerlist   79 4E 00150790 PL_defgv   80 4F 00150040 PL_defoutgv   81 50 001501A8 PL_defstash   82 51 00150860 PL_delaymagic   83 52 00150894 PL_delaymagic_egid   84 53 00150878 PL_delaymagic_euid   85 54 001502C8 PL_delaymagic_gid   86 55 00150784 PL_delaymagic_uid   87 56 0011F0B0 PL_destroyhook   88 57 0014FFBC PL_diehook   89 58 0014F024 PL_do_undump   90 59 00150854 PL_doswitches   91 5A 00150278 PL_dowarn   92 5B 0011F0F8 PL_dumpindent   93 5C 0014FFA4 PL_e_script   94 5D 001500E4 PL_efloatbuf   95 5E 0015085C PL_efloatsize   96 5F 0014F050 PL_encoding   97 60 0014FFA8 PL_endav   98 61 001500B4 PL_envgv   99 62 0015077C PL_errgv   100 63 0014F0B0 PL_errors   101 64 00150794 PL_eval_root   102 65 00150868 PL_eval_start   103 66 0014F070 PL_evalseq   104 67 00150880 PL_exit_flags   105 68 0014F088 PL_exitlist   106 69 0014F08C PL_exitlistlen   107 6A 00150708 PL_fdpid   108 6B 001501C4 PL_filemode   109 6C 00150140 PL_firstgv   110 6D 00126200 PL_fold   111 6E 00126100 PL_fold_latin1   112 6F 0011FD60 PL_fold_locale   113 70 001500A0 PL_forkprocess   114 71 00150004 PL_formtarget   115 72 00125E00 PL_freq   116 73 0014F094 PL_gensym   117 74 0014FF10 PL_globalstash   118 75 0014F02C PL_globhook   119 76 0014F0C0 PL_hash_rand_bits   120 77 0011F101 PL_hash_rand_bits_enabled   121 78 001502B4 PL_hash_seed   122 79 0014F004 PL_hash_seed_set   123 7A 001266E0 PL_hexdigit   124 7B 001500C8 PL_hintgv   125 7C 001501B8 PL_hv_fetch_ent_mh   126 7D 0014F081 PL_in_clean_all   127 7E 0014F082 PL_in_clean_objs   128 7F 0014FEFC PL_in_eval   129 80 0014F065 PL_in_load_module   130 81 00150294 PL_in_utf8_CTYPE_locale   131 82 00150270 PL_incgv   132 83 001500DC PL_initav   133 84 00150390 PL_inplace   134 85 0014F03C PL_isarev   135 86 0011F09C PL_keyword_plugin   136 87 0014F058 PL_known_layers   137 88 001502B0 PL_last_in_gv   138 89 00150168 PL_last_swash_hv   139 8A 0014FF00 PL_last_swash_key   140 8B 001507F0 PL_last_swash_klen   141 8C 00150818 PL_last_swash_slen   142 8D 00150300 PL_last_swash_tmps   143 8E 00150298 PL_lastfd   144 8F 0011F0E0 PL_laststatval   145 90 0011F0E4 PL_laststype   146 91 00126000 PL_latin1_lc   147 92 0014F04C PL_lex_encoding   148 93 0014FEEC PL_localizing   149 94 001501D4 PL_localpatches   150 95 0011F0BC PL_lockhook   151 96 00122320 PL_magic_data   152 97 001228E0 PL_magic_vtable_names   153 98 00122420 PL_magic_vtables   154 99 00150120 PL_main_cv   155 9A 001501D8 PL_main_root   156 9B 00150754 PL_main_start   157 9C 00150304 PL_mainstack   158 9D 00150750 PL_markstack   159 9E 00150010 PL_markstack_max   160 9F 001500BC PL_markstack_ptr   161 A0 001502C4 PL_max_intro_pending   162 A1 0011F0D8 PL_maxo   163 A2 0011F0E8 PL_maxsysfd   164 A3 00126704 PL_memory_wrap   165 A4 00150114 PL_mess_sv   166 A5 001500B0 PL_min_intro_pending   167 A6 0015038A PL_minus_E   168 A7 00150815 PL_minus_F   169 A8 00150118 PL_minus_a   170 A9 00150389 PL_minus_c   171 AA 0014FF44 PL_minus_l   172 AB 0014FE84 PL_minus_n   173 AC 0015078C PL_minus_p   174 AD 00125F00 PL_mod_latin1_uc   175 AE 0014FE7C PL_modglobal   176 AF 00150030 PL_multideref_pc   177 B0 001500C0 PL_na   178 B1 00126920 PL_no_aelem   179 B2 001267E0 PL_no_dir_func   180 B3 001267A0 PL_no_func   181 B4 001268C0 PL_no_helem_sv   182 B5 00126720 PL_no_localize_ref   183 B6 00126864 PL_no_mem   184 B7 00126880 PL_no_modify   185 B8 00126760 PL_no_myglob   186 B9 00126848 PL_no_security   187 BA 00126820 PL_no_sock_func   188 BB 00126A20 PL_no_symref   189 BC 00126980 PL_no_usym   190 BD 00126A60 PL_no_wrongref   191 BE 00150814 PL_nomemok   192 BF 0011F0C4 PL_numeric_local   193 C0 0014FE80 PL_numeric_name   194 C1 0014FEF8 PL_numeric_radix_sv   195 C2 0011F0C8 PL_numeric_standard   196 C3 0015088C PL_ofsgv   197 C4 001500E8 PL_oldname   198 C5 0014FE64 PL_op   199 C6 00124960 PL_op_desc   200 C7 0014F09C PL_op_mask   201 C8 00125680 PL_op_name   202 C9 00122CE0 PL_op_private_bitdef_ix   203 CA 00122B20 PL_op_private_bitdefs   204 CB 00123000 PL_op_private_bitfields   205 CC 00123060 PL_op_private_labels   206 CD 00122980 PL_op_private_valid   207 CE 0014F008 PL_op_seq   208 CF 0014F00C PL_op_sequence   209 D0 00123280 PL_opargs   210 D1 0014F0AC PL_opfreehook   211 D2 00150384 PL_origalen   212 D3 0015080C PL_origargc   213 D4 001500C4 PL_origargv   214 D5 0015038C PL_origenviron   215 D6 0015011C PL_origfilename   216 D7 00150850 PL_ors_sv   217 D8 001507FC PL_osname   218 D9 001502F0 PL_pad_reset_pending   219 DA 00150028 PL_padix   220 DB 0015079C PL_padix_floor   221 DC 0011F0A8 PL_padlist_generation   222 DD 0014FE40 PL_padname_const   223 DE 0014FF20 PL_padname_undef   224 DF 0014FE68 PL_parser   225 E0 0014FF54 PL_patchlevel   226 E1 0011F0F4 PL_peepp   227 E2 0014F064 PL_perl_destruct_level   228 E3 0015027C PL_perldb   229 E4 0014F05C PL_perlio   230 E5 0014F014 PL_perlio_debug_fd   231 E6 0014F01C PL_perlio_fd_refcnt   232 E7 0014F018 PL_perlio_fd_refcnt_size   233 E8 0014F068 PL_phase   234 E9 00125CBC PL_phase_names   235 EA 0011F740 PL_ppaddr   236 EB 001502F8 PL_preambleav   237 EC 0014F084 PL_profiledata   238 ED 00150008 PL_psig_name   239 EE 00150764 PL_psig_pend   240 EF 00150288 PL_psig_ptr   241 F0 0014FF48 PL_ptr_table   242 F1 00150018 PL_random_state   243 F2 00150034 PL_reentrant_retint   244 F3 0014F0BC PL_reg_curpm   245 F4 00141DC0 PL_reg_extflags_name   246 F5 00141C20 PL_reg_intflags_name   247 F6 00142300 PL_reg_name   248 F7 001500A4 PL_registered_mros   249 F8 00142520 PL_regkind   250 F9 0014F0B8 PL_regmatch_slab   251 FA 001502BC PL_regmatch_state   252 FB 001502FC PL_replgv   253 FC 0014FE8C PL_restartjmpenv   254 FD 001502F4 PL_restartop   255 FE 001266C3 PL_revision   256 FF 0011F0F0 PL_rpeepp   257 100 001500F8 PL_rs   258 101 0011F0D4 PL_runops   259 102 0012295C PL_runops_dbg   260 103 00122960 PL_runops_std   261 104 0014F080 PL_savebegin   262 105 0014FFB8 PL_savestack   263 106 0014FF40 PL_savestack_ix   264 107 00150310 PL_savestack_max   265 108 0014F0C4 PL_sawalias   266 109 001501B0 PL_scopestack   267 10A 001502C0 PL_scopestack_ix   268 10B 00150124 PL_scopestack_max   269 10C 0014F030 PL_scopestack_name   270 10D 001507F8 PL_secondgv   271 10E 001266C4 PL_sh_path   272 10F 0011F0C0 PL_sharehook   273 110 00126400 PL_sig_name   274 111 00126300 PL_sig_num   275 112 0014F0A0 PL_sig_pending   276 113 0014F020 PL_sig_trapped   277 114 00150094 PL_sigfpe_saved   278 115 0014FF4C PL_sighandlerp   279 116 0011F0AC PL_signalhook   280 117 001500E0 PL_signals   281 118 00141B5C PL_simple   282 119 00141B50 PL_simple_bitmask   283 11A 00150100 PL_sort_RealCmp   284 11B 0015030C PL_sortcop   285 11C 00150044 PL_sortstash   286 11D 0011F0EC PL_splitstr   287 11E 00150144 PL_srand_called   288 11F 0015031C PL_stack_base   289 120 0015013C PL_stack_max   290 121 001501BC PL_stack_sp   291 122 0014FEA0 PL_start_env   292 123 00150090 PL_stashcache   293 124 001507C0 PL_statbuf   294 125 00150060 PL_statcache   295 126 001501C0 PL_statgv   296 127 0014F0B4 PL_statname   297 128 0015000C PL_statusvalue   298 129 00150858 PL_statusvalue_posix   299 12A 001500CC PL_stderrgv   300 12B 0014FFAC PL_stdingv   301 12C 0014FE78 PL_strtab   302 12D 0011F104 PL_sub_generation   303 12E 00150870 PL_subline   304 12F 0015015C PL_subname   305 130 001266C1 PL_subversion   306 131 001500D8 PL_sv_arenaroot   307 132 001501E0 PL_sv_consts   308 133 0014FEF0 PL_sv_count   309 134 0015014C PL_sv_no   310 135 0015029C PL_sv_placeholder   311 136 00150318 PL_sv_root   312 137 00150768 PL_sv_undef   313 138 0015012C PL_sv_yes   314 139 001503A0 PL_sys_intern   315 13A 001501D0 PL_taint_warn   316 13B 0015081C PL_tainted   317 13C 00150760 PL_tainting   318 13D 0011F0B4 PL_threadhook   319 13E 0011F108 PL_tmps_floor   320 13F 0011F10C PL_tmps_ix   321 140 00150394 PL_tmps_max   322 141 0014FE60 PL_tmps_stack   323 142 00150164 PL_top_env   324 143 0015028C PL_toptarget   325 144 001501CC PL_unicode   326 145 00150314 PL_unitcheckav   327 146 0014F044 PL_unitcheckav_save   328 147 0011F0B8 PL_unlockhook   329 148 00150388 PL_unsafe   330 149 0011F0A4 PL_use_safe_putenv   331 14A 001500D0 PL_utf8_X_extend   332 14B 00150780 PL_utf8_X_regular_begin   333 14C 00150810 PL_utf8_charname_begin   334 14D 00150110 PL_utf8_charname_continue   335 14E 0014F034 PL_utf8_foldable   336 14F 0014F038 PL_utf8_foldclosures   337 150 00150874 PL_utf8_idcont   338 151 0015009C PL_utf8_idstart   339 152 0015010C PL_utf8_mark   340 153 0014FE74 PL_utf8_perl_idcont   341 154 00150884 PL_utf8_perl_idstart   342 155 00150180 PL_utf8_swash_ptrs   343 156 00150804 PL_utf8_tofold   344 157 00150808 PL_utf8_tolower   345 158 001500FC PL_utf8_totitle   346 159 00150098 PL_utf8_toupper   347 15A 001500AC PL_utf8_xidcont   348 15B 00150038 PL_utf8_xidstart   349 15C 0011F100 PL_utf8cache   350 15D 00150862 PL_utf8locale   351 15E 00126BA0 PL_utf8skip   352 15F 00126680 PL_uuemap   353 160 00122310 PL_valid_types_IVX   354 161 001222D0 PL_valid_types_IV_set   355 162 00122300 PL_valid_types_NVX   356 163 001222C0 PL_valid_types_NV_set   357 164 001222F0 PL_valid_types_PVX   358 165 001222E0 PL_valid_types_RV   359 166 00141B76 PL_varies   360 167 00141B6A PL_varies_bitmask   361 168 001266C2 PL_version   362 169 0014F010 PL_veto_cleanup   363 16A 0011F000 PL_w32_osver   364 16B 001500B8 PL_warn_locale   365 16C 00126A80 PL_warn_nl   366 16D 00126AF9 PL_warn_nosemi   367 16E 00126AC0 PL_warn_reserved   368 16F 00126B60 PL_warn_uninit   369 170 00150890 PL_warnhook   370 171 0014F0A4 PL_xsubfilename   371 172 001083B0 PerlIOBase_binmode


With this patch\, instead of broken SDBM SEGVing at runtime\, broken SDBM fails to link\, which is a much easier scenario to debug than a SEGV.


  C​:\perl521\srcnewb4opt\miniperl.exe "-I..\..\lib" "-I..\..\lib" -MExtUti ls​::Command -e chmod -- 755 ..\..\lib\auto\PerlIO\via\via.dll Generating a nmake-style Makefile Writing Makefile for SDBM_File Running Mkbootstrap for SDBM_File ()   C​:\perl521\srcnewb4opt\miniperl.exe "-I..\..\lib" "-I..\..\lib" -MExtUti ls​::Command -e chmod -- 644 "SDBM_File.bs"   "..\..\miniperl.exe" "-I..\..\lib" "-I..\..\lib" "..\..\lib\ExtUtils\xsu bpp" -typemap "..\..\lib\ExtUtils\typemap" -typemap "typemap" SDBM_File.xs > S DBM_File.xsc && C​:\perl521\srcnewb4opt\miniperl.exe "-I..\..\lib" "-I..\..\lib" -MExtUtils​::Command -e mv -- SDBM_File.xsc SDBM_File.c Please specify prototyping behavior for SDBM_File.xs (see perlxs manual)   cl -c -I..\..\lib\CORE -nologo -GF -W3 -Od -MD -Zi -DNDEBUG -G7 -GL -D WIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_T IME -DNO_MATHOMS -D_USE_32BIT_TIME_T -Od -MD -Zi -DNDEBUG -G7 -GL -DVERSION=\ "1.13\" -DXS_VERSION=\"1.13\" "-I..\..\lib\CORE" -DSDBM -DDUFF -DWIN32 -DPERL _STATIC_SYMS SDBM_File.c SDBM_File.c   cl -c -I..\..\lib\CORE -nologo -GF -W3 -Od -MD -Zi -DNDEBUG -G7 -GL -D WIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_T IME -DNO_MATHOMS -D_USE_32BIT_TIME_T -Od -MD -Zi -DNDEBUG -G7 -GL -DVERSION=\ "1.13\" -DXS_VERSION=\"1.13\" "-I..\..\lib\CORE" -DSDBM -DDUFF -DWIN32 -DPERL _STATIC_SYMS hash.c hash.c   cl -c -I..\..\lib\CORE -nologo -GF -W3 -Od -MD -Zi -DNDEBUG -G7 -GL -D WIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_T IME -DNO_MATHOMS -D_USE_32BIT_TIME_T -Od -MD -Zi -DNDEBUG -G7 -GL -DVERSION=\ "1.13\" -DXS_VERSION=\"1.13\" "-I..\..\lib\CORE" -DSDBM -DDUFF -DWIN32 -DPERL _STATIC_SYMS pair.c pair.c   cl -c -I..\..\lib\CORE -nologo -GF -W3 -Od -MD -Zi -DNDEBUG -G7 -GL -D WIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_HASH_FUNC_ONE_AT_A_T IME -DNO_MATHOMS -D_USE_32BIT_TIME_T -Od -MD -Zi -DNDEBUG -G7 -GL -DVERSION=\ "1.13\" -DXS_VERSION=\"1.13\" "-I..\..\lib\CORE" -DSDBM -DDUFF -DWIN32 -DPERL _STATIC_SYMS sdbm.c sdbm.c   "..\..\miniperl.exe" "-I..\..\lib" "-I..\..\lib" -MExtUtils​::Mksymlists -e "Mksymlists('NAME'=>\"SDBM_File\"\, 'DLBASE' => 'SDBM_File'\, 'DL_FUNCS' => { }\, 'FUNCLIST' => []\, 'IMPORTS' => { }\, 'DL_VARS' => []);"   link -out​:..\..\lib\auto\SDBM_File\SDBM_File.dll -dll -nologo -nodefault lib -debug -opt​:ref\,icf -ltcg -libpath​:"c​:\perl521\lib\CORE" -machine​:x86 SDBM _File.obj hash.obj pair.obj sdbm.obj "..\..\lib\CORE\perl521.lib" oldnames. lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib sh ell32.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 -def​:SDBM_File .def   Creating library ..\..\lib\auto\SDBM_File\SDBM_File.lib and object ..\..\lib\ auto\SDBM_File\SDBM_File.exp SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_tmps_ix SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_sv_undef SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_op SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_curpad SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_stack_base SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_defgv SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_markstack_ptr SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_stack_sp SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_markstack_max SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_tmps_floor ..\..\lib\auto\SDBM_File\SDBM_File.dll : fatal error LNK1120​: 10 unresolved exte rnals NMAKE : fatal error U1077​: 'link' : return code '0x460' Stop.   link -out​:..\..\lib\auto\SDBM_File\SDBM_File.dll -dll -nologo -nodefault lib -debug -opt​:ref\,icf -ltcg -libpath​:"c​:\perl521\lib\CORE" -machine​:x86 SDBM _File.obj hash.obj pair.obj sdbm.obj "..\..\lib\CORE\perl521.lib" oldnames. lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib sh ell32.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 -def​:SDBM_File .def   Creating library ..\..\lib\auto\SDBM_File\SDBM_File.lib and object ..\..\lib\ auto\SDBM_File\SDBM_File.exp SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_tmps_ix SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_sv_undef SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_op SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_curpad SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_stack_base SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_defgv SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_markstack_ptr SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_stack_sp SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_markstack_max SDBM_File.obj : error LNK2001​: unresolved external symbol _PL_tmps_floor ..\..\lib\auto\SDBM_File\SDBM_File.dll : fatal error LNK1120​: 10 unresolved exte rnals NMAKE : fatal error U1077​: 'link' : return code '0x460' Stop. Unsuccessful make(ext/SDBM_File)​: code=512 at ..\make_ext.pl line 640. NMAKE : fatal error U1077​: '..\miniperl.exe' : return code '0x2' Stop.

C​:\perl521\srcnewb4opt\win32>


To avoid huge changes in makedef.pl\, which risks breaking platforms I can't test\, I choose to use "PL_" to figure out what is a data symbol and what is a code symbol. Recording the origin file of each symbol would be the better failsafe solution\, in case P5P makes a global data symbol that doesn't start with "PL_" for some reason.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 9 years ago

From @bulk88

[bad perl521.lib 2.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708289/bad perl521.lib 2.PNG)

p5pRT commented 9 years ago

From @bulk88

[bad perl521.lib.png](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708290/bad perl521.lib.png)

p5pRT commented 9 years ago

From @bulk88

[vc import 1.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708291/vc import 1.PNG)

p5pRT commented 9 years ago

From @bulk88

[vc import 2.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708292/vc import 2.PNG)

p5pRT commented 9 years ago

From @bulk88

[vc import 3.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708293/vc import 3.PNG)

p5pRT commented 9 years ago

From @bulk88

Patch attached\, note this patch will turn the SDBM crash on VC unthreaded win32 perl into a link failure.

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 9 years ago

From @bulk88

0001-export-data-symbols-as-data-on-Win32.patch ```diff From 9ebd628e2bae0b2eb79f61bc81b906c2694ef7e5 Mon Sep 17 00:00:00 2001 From: Daniel Dragan Date: Mon, 19 Jan 2015 17:30:04 -0500 Subject: [PATCH] export data symbols as data on Win32 Previously on Win32 Perl, all the PL_* data symbols were treated as function symbols with expectation of machine code at their targets when generating the linking library perl5**.lib or perl5**.a. In VC Perl, if an DLL XS module accidentally (by manipulating the defines before #including perls headers) turned "extern __declspec(dllimport) I32 *PL_markstack_ptr;" into "extern I32 *PL_markstack_ptr;", a SEGV would result as if the XS module executed "I32 ax = (*(I32*)Perl_sv_2mortal)--;". By marking the symbols as data in the linking lib, the VC linker will error out while creating a XS DLL where this mistake of dropping out __declspec(dllimport) happened, instead of a runtime crash. Mingw GCC linker does the correct behavior, and does not treat the data symbol as machine code even if "__declspec(dllimport)" is removed. Still add DATA to the GCC perldll.def to be sure. There is no reason for "jmp" machine codestubs/thunks to exist in the perl.lib/perl.a to a data export. Also add constant folding to the loop in makedef.pl, since every other platform check executes exactly once, there is no point of executing the ops in the perl compile time constant folder vs runtime executing them. If a data symbol name exceeds the 32 limit, then "DATA" will be catted onto the symbol name and linking lib generation will fail since the symbol wont exist. The 32 limit will then be increased at that point in the future. See details about this patch in [perl #123626] --- makedef.pl | 64 +++++++++++++++++++++++++++++++++-------------------------- 1 files changed, 36 insertions(+), 28 deletions(-) diff --git a/makedef.pl b/makedef.pl index 0bc3862..2b5ca80 100644 --- a/makedef.pl +++ b/makedef.pl @@ -32,36 +32,33 @@ # perl.imp NetWare # makedef.lis VMS -BEGIN { unshift @INC, "lib" } -use Config; -use strict; - -my %ARGS = (CCTYPE => 'MSVC', TARG_DIR => ''); - +my $fold; +my %ARGS; my %define; -my $fold; +BEGIN { + BEGIN { unshift @INC, "lib" } + use Config; + use strict; -sub process_cc_flags { - foreach (map {split /\s+/, $_} @_) { - $define{$1} = $2 // 1 if /^-D(\w+)(?:=(.+))?/; - } -} + %ARGS = (CCTYPE => 'MSVC', TARG_DIR => ''); -while (@ARGV) { - my $flag = shift; - if ($flag =~ /^(?:CC_FLAGS=)?(-D\w.*)/) { - process_cc_flags($1); - } elsif ($flag =~ /^(CCTYPE|FILETYPE|PLATFORM|TARG_DIR)=(.+)$/) { - $ARGS{$1} = $2; - } elsif ($flag eq '--sort-fold') { - ++$fold; + sub process_cc_flags { + foreach (map {split /\s+/, $_} @_) { + $define{$1} = $2 // 1 if /^-D(\w+)(?:=(.+))?/; + } } -} -require "$ARGS{TARG_DIR}regen/embed_lib.pl"; - -{ + while (@ARGV) { + my $flag = shift; + if ($flag =~ /^(?:CC_FLAGS=)?(-D\w.*)/) { + process_cc_flags($1); + } elsif ($flag =~ /^(CCTYPE|FILETYPE|PLATFORM|TARG_DIR)=(.+)$/) { + $ARGS{$1} = $2; + } elsif ($flag eq '--sort-fold') { + ++$fold; + } + } my @PLATFORM = qw(aix win32 wince os2 netware vms test); my %PLATFORM; @PLATFORM{@PLATFORM} = (); @@ -71,6 +68,9 @@ require "$ARGS{TARG_DIR}regen/embed_lib.pl"; die "PLATFORM must be one of: @PLATFORM\n" unless exists $PLATFORM{$ARGS{PLATFORM}}; } +use constant PLATFORM => $ARGS{PLATFORM}; + +require "$ARGS{TARG_DIR}regen/embed_lib.pl"; # Is the following guard strictly necessary? Added during refactoring # to keep the same behaviour when merging other code into here. @@ -1301,10 +1301,18 @@ elsif ($ARGS{PLATFORM} eq 'netware') { my @symbols = $fold ? sort {lc $a cmp lc $b} keys %export : sort keys %export; foreach my $symbol (@symbols) { - if ($ARGS{PLATFORM} =~ /^win(?:32|ce)$/) { - print "\t$symbol\n"; + if (PLATFORM eq 'win32' || PLATFORM eq 'wince') { + #remembering the origin file of each symbol is an alternative to PL_ matching + if(substr($symbol, 0, 3) eq 'PL_') { + #PL_utf8_charname_continue @ 25 seems to be the longest symbol + #pick 32 for visual alignment, plus 32 is 8/tab aligned + print "\t$symbol".' 'x(32 - length $symbol )."DATA\n"; + } + else { + print "\t$symbol\n"; + } } - elsif ($ARGS{PLATFORM} eq 'os2') { + elsif (PLATFORM eq 'os2') { printf qq( %-31s \@%s\n), qq("$symbol"), $ordinal{$symbol} || ++$sym_ord; printf qq( %-31s \@%s\n), @@ -1312,7 +1320,7 @@ foreach my $symbol (@symbols) { $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord if $exportperlmalloc and exists $exportperlmalloc{$symbol}; } - elsif ($ARGS{PLATFORM} eq 'netware') { + elsif (PLATFORM eq 'netware') { print "\t$symbol,\n"; } else { print "$symbol\n"; -- 1.7.9.msysgit.0 ```
p5pRT commented 9 years ago

From @steve-m-hay

On Mon Jan 19 15​:34​:28 2015\, bulk88 wrote​:

Patch attached\, note this patch will turn the SDBM crash on VC unthreaded win32 perl into a link failure.

Works fine for me (VC++ and GCC). My only question is why the 32 character limit on the symbol names? Why not just tack " DATA" onto the end of the name instead of trying to line up all the "DATA"s in the same column? I don't think that makes an excessive mess of the .def file\, and avoids any possible future problems. (Any such problems wouldn't be difficult to find or fix\, but why suffer them at all just for the sake of slightly beautifying the .def file?)

p5pRT commented 9 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 9 years ago

From @bulk88

On Fri Jan 23 10​:46​:18 2015\, shay wrote​:

On Mon Jan 19 15​:34​:28 2015\, bulk88 wrote​:

Patch attached\, note this patch will turn the SDBM crash on VC unthreaded win32 perl into a link failure.

Works fine for me (VC++ and GCC). My only question is why the 32 character limit on the symbol names? Why not just tack " DATA" onto the end of the name instead of trying to line up all the "DATA"s in the same column? I don't think that makes an excessive mess of the .def file\, and avoids any possible future problems. (Any such problems wouldn't be difficult to find or fix\, but why suffer them at all just for the sake of slightly beautifying the .def file?)

There is a precedent for having generated code be pretty at P5P. Do you want to change the policy? Why does regen/warnings.pl make pretty files with indenting\, and doublequote strings instead of using minimal white space and single quotes with raw binary (except for escaped "\"s) for least amount of read calls/IO from disk and least compiling complexity?

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 9 years ago

From @cpansprout

On Sat Jan 24 21​:16​:18 2015\, bulk88 wrote​:

On Fri Jan 23 10​:46​:18 2015\, shay wrote​:

On Mon Jan 19 15​:34​:28 2015\, bulk88 wrote​:

Patch attached\, note this patch will turn the SDBM crash on VC unthreaded win32 perl into a link failure.

Works fine for me (VC++ and GCC). My only question is why the 32 character limit on the symbol names? Why not just tack " DATA" onto the end of the name instead of trying to line up all the "DATA"s in the same column? I don't think that makes an excessive mess of the .def file\, and avoids any possible future problems. (Any such problems wouldn't be difficult to find or fix\, but why suffer them at all just for the sake of slightly beautifying the .def file?)

There is a precedent for having generated code be pretty at P5P. Do you want to change the policy?

I think itā€™s more tradition than policy. The last time it came up it was specifically about .c files generated from .xs files. The amount of whitespace in those has no effect on run-time performance\, and being able to read .c files is extremely helpful in debugging .xs files. (I speak as one who has trouble with XS and regularly looks at the generated code.)

That does not apply to the .def files\, does it?

Why does regen/warnings.pl make pretty files with indenting\, and doublequote strings instead of using minimal white space and single quotes with raw binary (except for escaped "\"s) for least amount of read calls/IO from disk and least compiling complexity?

I donā€™t think it needs to\, though it is helpful for debugging if you are working on warnings.pm itself. I would be willing to apply a patch that minifies warnings.pm\, as long as you can get it to work on EBCDIC too\, where raw binary might be a problem.

--

Father Chrysostomos

p5pRT commented 9 years ago

From @bulk88

On Sat Jan 24 21​:43​:33 2015\, sprout wrote​:

On Sat Jan 24 21​:16​:18 2015\, bulk88 wrote​:

On Fri Jan 23 10​:46​:18 2015\, shay wrote​:

Works fine for me (VC++ and GCC). My only question is why the 32 character limit on the symbol names? Why not just tack " DATA" onto the end of the name instead of trying to line up all the "DATA"s in the same column? I don't think that makes an excessive mess of the .def file\, and avoids any possible future problems. (Any such problems wouldn't be difficult to find or fix\, but why suffer them at all just for the sake of slightly beautifying the .def file?)

There is a precedent for having generated code be pretty at P5P. Do you want to change the policy?

I think itā€™s more tradition than policy. The last time it came up it was specifically about .c files generated from .xs files. The amount of whitespace in those has no effect on run-time performance\, and being able to read .c files is extremely helpful in debugging .xs files. (I speak as one who has trouble with XS and regularly looks at the generated code.)

That does not apply to the .def files\, does it?

A .def file is not steppable\, you will never see it in a C debugger on Win32. I very rarely look at it. C++ on Win32\, this ticket/SDBM_File crash\, and a non-P5P project to convert Win32 GCC perl into building XS modules with VC are the only 3 reasons I've ever opened that file. The file is written once\, and read once on VC (when C linking perl521.dll) and read 2 or 3 times during a Win32 GCC build (dlltool.exe and g++.exe (as linker) read it) during the build process. Its size and amount of read I/O calls is very small. The pretty file is 34KB for threaded Win32 perl. Hypothetical ugly is 27KB.

Pretty which this patch does

LIBRARY perl521 EXPORTS   PL_AboveLatin1 DATA   PL_Argv DATA   PL_Cmd DATA   PL_DBcontrol DATA   PL_DBgv DATA   PL_DBline DATA   PL_DBsignal DATA   PL_DBsingle DATA   PL_DBsub DATA   PL_DBtrace DATA   PL_HasMultiCharFold DATA   PL_InBitmap DATA   PL_Latin1 DATA   PL_No DATA   PL_NonL1NonFinalFold DATA   PL_Posix_ptrs DATA   PL_Sv DATA   PL_UpperLatin1 DATA   PL_XPosix_ptrs DATA   PL_Xpv DATA   PL_Yes DATA   PL_an DATA   PL_argvgv DATA   PL_argvout_stack DATA   PL_argvoutgv DATA   PL_basetime DATA   PL_beginav DATA   PL_beginav_save DATA   PL_bincompat_options DATA   PL_block_type DATA   PL_blockhooks DATA   PL_body_arenas DATA   PL_body_roots DATA   PL_bodytarget DATA   PL_breakable_sub_gen DATA   PL_charclass DATA   PL_check DATA   PL_checkav DATA   PL_checkav_save DATA   PL_chopset DATA   PL_clocktick DATA   PL_collation_ix DATA   PL_collation_name DATA   PL_collation_standard DATA   PL_collxfrm_base DATA   PL_collxfrm_mult DATA   PL_colors DATA   PL_colorset DATA   PL_compcv DATA   PL_compiling DATA   PL_comppad DATA   PL_comppad_name DATA   PL_comppad_name_fill DATA   PL_comppad_name_floor DATA   PL_constpadix DATA   PL_cop_seqmax DATA   PL_core_reg_engine DATA   PL_csighandlerp DATA   PL_curcop DATA   PL_curcopdb DATA   PL_curinterp DATA   PL_curpad DATA   PL_curpm DATA   PL_curstack DATA   PL_curstackinfo DATA   PL_curstash DATA   PL_curstname DATA   PL_custom_op_descs DATA   PL_custom_op_names DATA   PL_custom_ops DATA   PL_cv_has_eval DATA   PL_dbargs DATA   PL_debstash DATA   PL_debug DATA   PL_debug_pad DATA   PL_def_layerlist DATA   PL_defgv DATA   PL_defoutgv DATA   PL_defstash DATA   PL_delaymagic DATA   PL_delaymagic_egid DATA   PL_delaymagic_euid DATA   PL_delaymagic_gid DATA   PL_delaymagic_uid DATA   PL_destroyhook DATA   PL_diehook DATA   PL_do_undump DATA   PL_doswitches DATA   PL_dowarn DATA   PL_dumpindent DATA   PL_e_script DATA   PL_efloatbuf DATA   PL_efloatsize DATA   PL_encoding DATA   PL_endav DATA   PL_envgv DATA   PL_errgv DATA   PL_errors DATA   PL_eval_root DATA   PL_eval_start DATA   PL_evalseq DATA   PL_exit_flags DATA   PL_exitlist DATA   PL_exitlistlen DATA   PL_fdpid DATA   PL_filemode DATA   PL_firstgv DATA   PL_fold DATA   PL_fold_latin1 DATA   PL_fold_locale DATA   PL_forkprocess DATA   PL_formtarget DATA   PL_freq DATA   PL_gensym DATA   PL_globalstash DATA   PL_globhook DATA   PL_hash_rand_bits DATA   PL_hash_rand_bits_enabled DATA   PL_hash_seed DATA   PL_hash_seed_set DATA   PL_hexdigit DATA   PL_hintgv DATA   PL_hv_fetch_ent_mh DATA   PL_in_clean_all DATA   PL_in_clean_objs DATA   PL_in_eval DATA   PL_in_load_module DATA   PL_in_utf8_CTYPE_locale DATA   PL_incgv DATA   PL_initav DATA   PL_inplace DATA   PL_isarev DATA   PL_keyword_plugin DATA   PL_known_layers DATA   PL_last_in_gv DATA   PL_last_swash_hv DATA   PL_last_swash_key DATA   PL_last_swash_klen DATA   PL_last_swash_slen DATA   PL_last_swash_tmps DATA   PL_lastfd DATA   PL_laststatval DATA   PL_laststype DATA   PL_latin1_lc DATA   PL_lex_encoding DATA   PL_localizing DATA   PL_localpatches DATA   PL_lockhook DATA   PL_magic_data DATA   PL_magic_vtable_names DATA   PL_magic_vtables DATA   PL_main_cv DATA   PL_main_root DATA   PL_main_start DATA   PL_mainstack DATA   PL_markstack DATA   PL_markstack_max DATA   PL_markstack_ptr DATA   PL_max_intro_pending DATA   PL_maxo DATA   PL_maxsysfd DATA   PL_memory_wrap DATA   PL_mess_sv DATA   PL_min_intro_pending DATA   PL_minus_E DATA   PL_minus_F DATA   PL_minus_a DATA   PL_minus_c DATA   PL_minus_l DATA   PL_minus_n DATA   PL_minus_p DATA   PL_mod_latin1_uc DATA   PL_modglobal DATA   PL_multideref_pc DATA   PL_na DATA   PL_no_aelem DATA   PL_no_dir_func DATA   PL_no_func DATA   PL_no_helem_sv DATA   PL_no_localize_ref DATA   PL_no_mem DATA   PL_no_modify DATA   PL_no_myglob DATA   PL_no_security DATA   PL_no_sock_func DATA   PL_no_symref DATA   PL_no_usym DATA   PL_no_wrongref DATA   PL_nomemok DATA   PL_numeric_local DATA   PL_numeric_name DATA   PL_numeric_radix_sv DATA   PL_numeric_standard DATA   PL_ofsgv DATA   PL_oldname DATA   PL_op DATA   PL_op_desc DATA   PL_op_mask DATA   PL_op_name DATA   PL_op_private_bitdef_ix DATA   PL_op_private_bitdefs DATA   PL_op_private_bitfields DATA   PL_op_private_labels DATA   PL_op_private_valid DATA   PL_op_seq DATA   PL_op_sequence DATA   PL_opargs DATA   PL_opfreehook DATA   PL_origalen DATA   PL_origargc DATA   PL_origargv DATA   PL_origenviron DATA   PL_origfilename DATA   PL_ors_sv DATA   PL_osname DATA   PL_pad_reset_pending DATA   PL_padix DATA   PL_padix_floor DATA   PL_padlist_generation DATA   PL_padname_const DATA   PL_padname_undef DATA   PL_parser DATA   PL_patchlevel DATA   PL_peepp DATA   PL_perl_destruct_level DATA   PL_perldb DATA   PL_perlio DATA   PL_perlio_debug_fd DATA   PL_perlio_fd_refcnt DATA   PL_perlio_fd_refcnt_size DATA   PL_phase DATA   PL_phase_names DATA   PL_ppaddr DATA   PL_preambleav DATA   PL_profiledata DATA   PL_psig_name DATA   PL_psig_pend DATA   PL_psig_ptr DATA   PL_ptr_table DATA   PL_random_state DATA   PL_reentrant_retint DATA   PL_reg_curpm DATA   PL_reg_extflags_name DATA   PL_reg_intflags_name DATA   PL_reg_name DATA   PL_registered_mros DATA   PL_regkind DATA   PL_regmatch_slab DATA   PL_regmatch_state DATA   PL_replgv DATA   PL_restartjmpenv DATA   PL_restartop DATA   PL_revision DATA   PL_rpeepp DATA   PL_rs DATA   PL_runops DATA   PL_runops_dbg DATA   PL_runops_std DATA   PL_savebegin DATA   PL_savestack DATA   PL_savestack_ix DATA   PL_savestack_max DATA   PL_sawalias DATA   PL_scopestack DATA   PL_scopestack_ix DATA   PL_scopestack_max DATA   PL_scopestack_name DATA   PL_secondgv DATA   PL_sh_path DATA   PL_sharehook DATA   PL_sig_name DATA   PL_sig_num DATA   PL_sig_pending DATA   PL_sig_trapped DATA   PL_sigfpe_saved DATA   PL_sighandlerp DATA   PL_signalhook DATA   PL_signals DATA   PL_simple DATA   PL_simple_bitmask DATA   PL_sort_RealCmp DATA   PL_sortcop DATA   PL_sortstash DATA   PL_splitstr DATA   PL_srand_called DATA   PL_stack_base DATA   PL_stack_max DATA   PL_stack_sp DATA   PL_start_env DATA   PL_stashcache DATA   PL_statbuf DATA   PL_statcache DATA   PL_statgv DATA   PL_statname DATA   PL_statusvalue DATA   PL_statusvalue_posix DATA   PL_stderrgv DATA   PL_stdingv DATA   PL_strtab DATA   PL_sub_generation DATA   PL_subline DATA   PL_subname DATA   PL_subversion DATA   PL_sv_arenaroot DATA   PL_sv_consts DATA   PL_sv_count DATA   PL_sv_no DATA   PL_sv_placeholder DATA   PL_sv_root DATA   PL_sv_undef DATA   PL_sv_yes DATA   PL_sys_intern DATA   PL_taint_warn DATA   PL_tainted DATA   PL_tainting DATA   PL_threadhook DATA   PL_tmps_floor DATA   PL_tmps_ix DATA   PL_tmps_max DATA   PL_tmps_stack DATA   PL_top_env DATA   PL_toptarget DATA   PL_unicode DATA   PL_unitcheckav DATA   PL_unitcheckav_save DATA   PL_unlockhook DATA   PL_unsafe DATA   PL_use_safe_putenv DATA   PL_utf8_X_extend DATA   PL_utf8_X_regular_begin DATA   PL_utf8_charname_begin DATA   PL_utf8_charname_continue DATA   PL_utf8_foldable DATA   PL_utf8_foldclosures DATA   PL_utf8_idcont DATA   PL_utf8_idstart DATA   PL_utf8_mark DATA   PL_utf8_perl_idcont DATA   PL_utf8_perl_idstart DATA   PL_utf8_swash_ptrs DATA   PL_utf8_tofold DATA   PL_utf8_tolower DATA   PL_utf8_totitle DATA   PL_utf8_toupper DATA   PL_utf8_xidcont DATA   PL_utf8_xidstart DATA   PL_utf8cache DATA   PL_utf8locale DATA   PL_utf8skip DATA   PL_uuemap DATA   PL_valid_types_IVX DATA   PL_valid_types_IV_set DATA   PL_valid_types_NVX DATA   PL_valid_types_NV_set DATA   PL_valid_types_PVX DATA   PL_valid_types_RV DATA   PL_varies DATA   PL_varies_bitmask DATA   PL_version DATA   PL_veto_cleanup DATA   PL_w32_osver DATA   PL_warn_locale DATA   PL_warn_nl DATA   PL_warn_nosemi DATA   PL_warn_reserved DATA   PL_warn_uninit DATA   PL_warnhook DATA   PL_watch_pvx DATA   PL_watchaddr DATA   PL_watchok DATA   PL_xsubfilename DATA   PerlIOBase_binmode   PerlIOBase_clearerr   PerlIOBase_close   PerlIOBase_dup   PerlIOBase_eof   PerlIOBase_error   PerlIOBase_fileno   PerlIOBase_noop_fail   PerlIOBase_noop_ok   PerlIOBase_open   PerlIOBase_popped   PerlIOBase_pushed   PerlIOBase_read   PerlIOBase_setlinebuf   PerlIOBase_unread   PerlIOBuf_bufsiz   PerlIOBuf_close   PerlIOBuf_dup   PerlIOBuf_fill   PerlIOBuf_flush   PerlIOBuf_get_base   PerlIOBuf_get_cnt   PerlIOBuf_get_ptr   PerlIOBuf_open   PerlIOBuf_popped   PerlIOBuf_pushed   PerlIOBuf_read   PerlIOBuf_seek   PerlIOBuf_set_ptrcnt   PerlIOBuf_tell   PerlIOBuf_unread   PerlIOBuf_write   PerlIO_allocate   PerlIO_apply_layera   PerlIO_apply_layers   PerlIO_arg_fetch   PerlIO_binmode   PerlIO_canset_cnt   PerlIO_debug   PerlIO_define_layer   PerlIO_exportFILE   PerlIO_fast_gets   PerlIO_fdopen   PerlIO_findFILE   PerlIO_find_layer   PerlIO_getc   PerlIO_getname   PerlIO_getpos   PerlIO_has_base   PerlIO_has_cntptr   PerlIO_importFILE   PerlIO_init   PerlIO_isutf8   PerlIO_layer_fetch   PerlIO_list_alloc   PerlIO_list_free   PerlIO_modestr   PerlIO_open   PerlIO_parse_layers   PerlIO_pending   PerlIO_perlio   PerlIO_pop   PerlIO_printf   PerlIO_push   PerlIO_putc   PerlIO_puts   PerlIO_releaseFILE **************cut******************

vs hypothetical non pretty

LIBRARY perl521 EXPORTS   PL_AboveLatin1 DATA   PL_Argv DATA   PL_Cmd DATA   PL_DBcontrol DATA   PL_DBgv DATA   PL_DBline DATA   PL_DBsignal DATA   PL_DBsingle DATA   PL_DBsub DATA   PL_DBtrace DATA   PL_HasMultiCharFold DATA   PL_InBitmap DATA   PL_Latin1 DATA   PL_No DATA   PL_NonL1NonFinalFold DATA   PL_Posix_ptrs DATA   PL_Sv DATA   PL_UpperLatin1 DATA   PL_XPosix_ptrs DATA   PL_Xpv DATA   PL_Yes DATA   PL_an DATA   PL_argvgv DATA   PL_argvout_stack DATA   PL_argvoutgv DATA   PL_basetime DATA   PL_beginav DATA   PL_beginav_save DATA   PL_bincompat_options DATA   PL_block_type DATA   PL_blockhooks DATA   PL_body_arenas DATA   PL_body_roots DATA   PL_bodytarget DATA   PL_breakable_sub_gen DATA   PL_charclass DATA   PL_check DATA   PL_checkav DATA   PL_checkav_save DATA   PL_chopset DATA   PL_clocktick DATA   PL_collation_ix DATA   PL_collation_name DATA   PL_collation_standard DATA   PL_collxfrm_base DATA   PL_collxfrm_mult DATA   PL_colors DATA   PL_colorset DATA   PL_compcv DATA   PL_compiling DATA   PL_comppad DATA   PL_comppad_name DATA   PL_comppad_name_fill DATA   PL_comppad_name_floor DATA   PL_constpadix DATA   PL_cop_seqmax DATA   PL_core_reg_engine DATA   PL_csighandlerp DATA   PL_curcop DATA   PL_curcopdb DATA   PL_curinterp DATA   PL_curpad DATA   PL_curpm DATA   PL_curstack DATA   PL_curstackinfo DATA   PL_curstash DATA   PL_curstname DATA   PL_custom_op_descs DATA   PL_custom_op_names DATA   PL_custom_ops DATA   PL_cv_has_eval DATA   PL_dbargs DATA   PL_debstash DATA   PL_debug DATA   PL_debug_pad DATA   PL_def_layerlist DATA   PL_defgv DATA   PL_defoutgv DATA   PL_defstash DATA   PL_delaymagic DATA   PL_delaymagic_egid DATA   PL_delaymagic_euid DATA   PL_delaymagic_gid DATA   PL_delaymagic_uid DATA   PL_destroyhook DATA   PL_diehook DATA   PL_do_undump DATA   PL_doswitches DATA   PL_dowarn DATA   PL_dumpindent DATA   PL_e_script DATA   PL_efloatbuf DATA   PL_efloatsize DATA   PL_encoding DATA   PL_endav DATA   PL_envgv DATA   PL_errgv DATA   PL_errors DATA   PL_eval_root DATA   PL_eval_start DATA   PL_evalseq DATA   PL_exit_flags DATA   PL_exitlist DATA   PL_exitlistlen DATA   PL_fdpid DATA   PL_filemode DATA   PL_firstgv DATA   PL_fold DATA   PL_fold_latin1 DATA   PL_fold_locale DATA   PL_forkprocess DATA   PL_formtarget DATA   PL_freq DATA   PL_gensym DATA   PL_globalstash DATA   PL_globhook DATA   PL_hash_rand_bits DATA   PL_hash_rand_bits_enabled DATA   PL_hash_seed DATA   PL_hash_seed_set DATA   PL_hexdigit DATA   PL_hintgv DATA   PL_hv_fetch_ent_mh DATA   PL_in_clean_all DATA   PL_in_clean_objs DATA   PL_in_eval DATA   PL_in_load_module DATA   PL_in_utf8_CTYPE_locale DATA   PL_incgv DATA   PL_initav DATA   PL_inplace DATA   PL_isarev DATA   PL_keyword_plugin DATA   PL_known_layers DATA   PL_last_in_gv DATA   PL_last_swash_hv DATA   PL_last_swash_key DATA   PL_last_swash_klen DATA   PL_last_swash_slen DATA   PL_last_swash_tmps DATA   PL_lastfd DATA   PL_laststatval DATA   PL_laststype DATA   PL_latin1_lc DATA   PL_lex_encoding DATA   PL_localizing DATA   PL_localpatches DATA   PL_lockhook DATA   PL_magic_data DATA   PL_magic_vtable_names DATA   PL_magic_vtables DATA   PL_main_cv DATA   PL_main_root DATA   PL_main_start DATA   PL_mainstack DATA   PL_markstack DATA   PL_markstack_max DATA   PL_markstack_ptr DATA   PL_max_intro_pending DATA   PL_maxo DATA   PL_maxsysfd DATA   PL_memory_wrap DATA   PL_mess_sv DATA   PL_min_intro_pending DATA   PL_minus_E DATA   PL_minus_F DATA   PL_minus_a DATA   PL_minus_c DATA   PL_minus_l DATA   PL_minus_n DATA   PL_minus_p DATA   PL_mod_latin1_uc DATA   PL_modglobal DATA   PL_multideref_pc DATA   PL_na DATA   PL_no_aelem DATA   PL_no_dir_func DATA   PL_no_func DATA   PL_no_helem_sv DATA   PL_no_localize_ref DATA   PL_no_mem DATA   PL_no_modify DATA   PL_no_myglob DATA   PL_no_security DATA   PL_no_sock_func DATA   PL_no_symref DATA   PL_no_usym DATA   PL_no_wrongref DATA   PL_nomemok DATA   PL_numeric_local DATA   PL_numeric_name DATA   PL_numeric_radix_sv DATA   PL_numeric_standard DATA   PL_ofsgv DATA   PL_oldname DATA   PL_op DATA   PL_op_desc DATA   PL_op_mask DATA   PL_op_name DATA   PL_op_private_bitdef_ix DATA   PL_op_private_bitdefs DATA   PL_op_private_bitfields DATA   PL_op_private_labels DATA   PL_op_private_valid DATA   PL_op_seq DATA   PL_op_sequence DATA   PL_opargs DATA   PL_opfreehook DATA   PL_origalen DATA   PL_origargc DATA   PL_origargv DATA   PL_origenviron DATA   PL_origfilename DATA   PL_ors_sv DATA   PL_osname DATA   PL_pad_reset_pending DATA   PL_padix DATA   PL_padix_floor DATA   PL_padlist_generation DATA   PL_padname_const DATA   PL_padname_undef DATA   PL_parser DATA   PL_patchlevel DATA   PL_peepp DATA   PL_perl_destruct_level DATA   PL_perldb DATA   PL_perlio DATA   PL_perlio_debug_fd DATA   PL_perlio_fd_refcnt DATA   PL_perlio_fd_refcnt_size DATA   PL_phase DATA   PL_phase_names DATA   PL_ppaddr DATA   PL_preambleav DATA   PL_profiledata DATA   PL_psig_name DATA   PL_psig_pend DATA   PL_psig_ptr DATA   PL_ptr_table DATA   PL_random_state DATA   PL_reentrant_retint DATA   PL_reg_curpm DATA   PL_reg_extflags_name DATA   PL_reg_intflags_name DATA   PL_reg_name DATA   PL_registered_mros DATA   PL_regkind DATA   PL_regmatch_slab DATA   PL_regmatch_state DATA   PL_replgv DATA   PL_restartjmpenv DATA   PL_restartop DATA   PL_revision DATA   PL_rpeepp DATA   PL_rs DATA   PL_runops DATA   PL_runops_dbg DATA   PL_runops_std DATA   PL_savebegin DATA   PL_savestack DATA   PL_savestack_ix DATA   PL_savestack_max DATA   PL_sawalias DATA   PL_scopestack DATA   PL_scopestack_ix DATA   PL_scopestack_max DATA   PL_scopestack_name DATA   PL_secondgv DATA   PL_sh_path DATA   PL_sharehook DATA   PL_sig_name DATA   PL_sig_num DATA   PL_sig_pending DATA   PL_sig_trapped DATA   PL_sigfpe_saved DATA   PL_sighandlerp DATA   PL_signalhook DATA   PL_signals DATA   PL_simple DATA   PL_simple_bitmask DATA   PL_sort_RealCmp DATA   PL_sortcop DATA   PL_sortstash DATA   PL_splitstr DATA   PL_srand_called DATA   PL_stack_base DATA   PL_stack_max DATA   PL_stack_sp DATA   PL_start_env DATA   PL_stashcache DATA   PL_statbuf DATA   PL_statcache DATA   PL_statgv DATA   PL_statname DATA   PL_statusvalue DATA   PL_statusvalue_posix DATA   PL_stderrgv DATA   PL_stdingv DATA   PL_strtab DATA   PL_sub_generation DATA   PL_subline DATA   PL_subname DATA   PL_subversion DATA   PL_sv_arenaroot DATA   PL_sv_consts DATA   PL_sv_count DATA   PL_sv_no DATA   PL_sv_placeholder DATA   PL_sv_root DATA   PL_sv_undef DATA   PL_sv_yes DATA   PL_sys_intern DATA   PL_taint_warn DATA   PL_tainted DATA   PL_tainting DATA   PL_threadhook DATA   PL_tmps_floor DATA   PL_tmps_ix DATA   PL_tmps_max DATA   PL_tmps_stack DATA   PL_top_env DATA   PL_toptarget DATA   PL_unicode DATA   PL_unitcheckav DATA   PL_unitcheckav_save DATA   PL_unlockhook DATA   PL_unsafe DATA   PL_use_safe_putenv DATA   PL_utf8_X_extend DATA   PL_utf8_X_regular_begin DATA   PL_utf8_charname_begin DATA   PL_utf8_charname_continue DATA   PL_utf8_foldable DATA   PL_utf8_foldclosures DATA   PL_utf8_idcont DATA   PL_utf8_idstart DATA   PL_utf8_mark DATA   PL_utf8_perl_idcont DATA   PL_utf8_perl_idstart DATA   PL_utf8_swash_ptrs DATA   PL_utf8_tofold DATA   PL_utf8_tolower DATA   PL_utf8_totitle DATA   PL_utf8_toupper DATA   PL_utf8_xidcont DATA   PL_utf8_xidstart DATA   PL_utf8cache DATA   PL_utf8locale DATA   PL_utf8skip DATA   PL_uuemap DATA   PL_valid_types_IVX DATA   PL_valid_types_IV_set DATA   PL_valid_types_NVX DATA   PL_valid_types_NV_set DATA   PL_valid_types_PVX DATA   PL_valid_types_RV DATA   PL_varies DATA   PL_varies_bitmask DATA   PL_version DATA   PL_veto_cleanup DATA   PL_w32_osver DATA   PL_warn_locale DATA   PL_warn_nl DATA   PL_warn_nosemi DATA   PL_warn_reserved DATA   PL_warn_uninit DATA   PL_warnhook DATA   PL_watch_pvx DATA   PL_watchaddr DATA   PL_watchok DATA   PL_xsubfilename DATA   PerlIOBase_binmode   PerlIOBase_clearerr   PerlIOBase_close   PerlIOBase_dup   PerlIOBase_eof   PerlIOBase_error   PerlIOBase_fileno   PerlIOBase_noop_fail   PerlIOBase_noop_ok   PerlIOBase_open   PerlIOBase_popped   PerlIOBase_pushed   PerlIOBase_read   PerlIOBase_setlinebuf   PerlIOBase_unread   PerlIOBuf_bufsiz   PerlIOBuf_close   PerlIOBuf_dup   PerlIOBuf_fill   PerlIOBuf_flush   PerlIOBuf_get_base   PerlIOBuf_get_cnt   PerlIOBuf_get_ptr   PerlIOBuf_open   PerlIOBuf_popped   PerlIOBuf_pushed   PerlIOBuf_read   PerlIOBuf_seek   PerlIOBuf_set_ptrcnt   PerlIOBuf_tell   PerlIOBuf_unread   PerlIOBuf_write   PerlIO_allocate   PerlIO_apply_layera   PerlIO_apply_layers   PerlIO_arg_fetch   PerlIO_binmode   PerlIO_canset_cnt   PerlIO_debug   PerlIO_define_layer   PerlIO_exportFILE   PerlIO_fast_gets   PerlIO_fdopen   PerlIO_findFILE   PerlIO_find_layer   PerlIO_getc   PerlIO_getname   PerlIO_getpos   PerlIO_has_base   PerlIO_has_cntptr   PerlIO_importFILE   PerlIO_init   PerlIO_isutf8   PerlIO_layer_fetch   PerlIO_list_alloc   PerlIO_list_free   PerlIO_modestr   PerlIO_open   PerlIO_parse_layers   PerlIO_pending   PerlIO_perlio   PerlIO_pop   PerlIO_printf   PerlIO_push   PerlIO_putc   PerlIO_puts   PerlIO_releaseFILE **************cut******************

-- bulk88 ~ bulk88 at hotmail.com

p5pRT commented 9 years ago

From @steve-m-hay

Now applied in commit 196f7c461b\, with the prettification removed in commit 75debb79e4.

p5pRT commented 9 years ago

@steve-m-hay - Status changed from 'open' to 'pending release'

p5pRT commented 9 years ago

From @khwilliamson

Thanks for submitting this ticket

The issue should be resolved with the release today of Perl v5.22\, available at http​://www.perl.org/get.html If you find that the problem persists\, feel free to reopen this ticket

-- Karl Williamson for the Perl 5 porters team

p5pRT commented 9 years ago

@khwilliamson - Status changed from 'pending release' to 'resolved'