Closed p5pRT closed 9 years ago
Need #.
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
[bad perl521.lib 2.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708289/bad perl521.lib 2.PNG)
[bad perl521.lib.png](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708290/bad perl521.lib.png)
[vc import 1.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708291/vc import 1.PNG)
[vc import 2.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708292/vc import 2.PNG)
[vc import 3.PNG](https://rt-archive.perl.org/perl5/Ticket/Attachment/1327524/708293/vc import 3.PNG)
Patch attached\, note this patch will turn the SDBM crash on VC unthreaded win32 perl into a link failure.
-- bulk88 ~ bulk88 at hotmail.com
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?)
The RT System itself - Status changed from 'new' to 'open'
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
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
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
Now applied in commit 196f7c461b\, with the prettification removed in commit 75debb79e4.
@steve-m-hay - Status changed from 'open' to 'pending release'
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
@khwilliamson - Status changed from 'pending release' to 'resolved'
Migrated from rt.perl.org#123626 (status was 'resolved')
Searchable as RT123626$