1 #line 2 "perl.c" 2 /* perl.c 3 * 4 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 5 * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 6 * 2013, 2014, 2015, 2016, 2017, 2018, 2019 by Larry Wall and others 7 * 8 * You may distribute under the terms of either the GNU General Public 9 * License or the Artistic License, as specified in the README file. 10 * 11 */ 12 13 /* 14 * A ship then new they built for him 15 * of mithril and of elven-glass 16 * --from Bilbo's song of Eärendil 17 * 18 * [p.236 of _The Lord of the Rings_, II/i: "Many Meetings"] 19 */ 20 21 /* This file contains the top-level functions that are used to create, use 22 * and destroy a perl interpreter, plus the functions used by XS code to 23 * call back into perl. Note that it does not contain the actual main() 24 * function of the interpreter; that can be found in perlmain.c 25 * 26 * Note that at build time this file is also linked to as perlmini.c, 27 * and perlmini.o is then built with PERL_IS_MINIPERL defined, which is 28 * then used to create the miniperl executable, rather than perl.o. 29 */ 30 31 #if defined(PERL_IS_MINIPERL) && !defined(USE_SITECUSTOMIZE) 32 # define USE_SITECUSTOMIZE 33 #endif 34 35 #include "EXTERN.h" 36 #define PERL_IN_PERL_C 37 #include "perl.h" 38 #include "patchlevel.h" /* for local_patches */ 39 #include "XSUB.h" 40 41 #ifdef NETWARE 42 #include "nwutil.h" 43 #endif 44 45 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 46 # ifdef I_SYSUIO 47 # include <sys/uio.h> 48 # endif 49 50 union control_un { 51 struct cmsghdr cm; 52 char control[CMSG_SPACE(sizeof(int))]; 53 }; 54 55 #endif 56 57 #ifndef HZ 58 # ifdef CLK_TCK 59 # define HZ CLK_TCK 60 # else 61 # define HZ 60 62 # endif 63 #endif 64 65 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen); 66 67 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW 68 # define validate_suid(rsfp) NOOP 69 #else 70 # define validate_suid(rsfp) S_validate_suid(aTHX_ rsfp) 71 #endif 72 73 #define CALL_BODY_SUB(myop) \ 74 if (PL_op == (myop)) \ 75 PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \ 76 if (PL_op) \ 77 CALLRUNOPS(aTHX); 78 79 #define CALL_LIST_BODY(cv) \ 80 PUSHMARK(PL_stack_sp); \ 81 call_sv(MUTABLE_SV((cv)), G_EVAL|G_DISCARD|G_VOID); 82 83 static void 84 S_init_tls_and_interp(PerlInterpreter *my_perl) 85 { 86 dVAR; 87 if (!PL_curinterp) { 88 PERL_SET_INTERP(my_perl); 89 #if defined(USE_ITHREADS) 90 INIT_THREADS; 91 ALLOC_THREAD_KEY; 92 PERL_SET_THX(my_perl); 93 OP_REFCNT_INIT; 94 OP_CHECK_MUTEX_INIT; 95 KEYWORD_PLUGIN_MUTEX_INIT; 96 HINTS_REFCNT_INIT; 97 LOCALE_INIT; 98 USER_PROP_MUTEX_INIT; 99 MUTEX_INIT(&PL_dollarzero_mutex); 100 MUTEX_INIT(&PL_my_ctx_mutex); 101 # endif 102 } 103 #if defined(USE_ITHREADS) 104 else 105 #else 106 /* This always happens for non-ithreads */ 107 #endif 108 { 109 PERL_SET_THX(my_perl); 110 } 111 } 112 113 114 /* these implement the PERL_SYS_INIT, PERL_SYS_INIT3, PERL_SYS_TERM macros */ 115 116 void 117 Perl_sys_init(int* argc, char*** argv) 118 { 119 dVAR; 120 121 PERL_ARGS_ASSERT_SYS_INIT; 122 123 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */ 124 PERL_UNUSED_ARG(argv); 125 PERL_SYS_INIT_BODY(argc, argv); 126 } 127 128 void 129 Perl_sys_init3(int* argc, char*** argv, char*** env) 130 { 131 dVAR; 132 133 PERL_ARGS_ASSERT_SYS_INIT3; 134 135 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */ 136 PERL_UNUSED_ARG(argv); 137 PERL_UNUSED_ARG(env); 138 PERL_SYS_INIT3_BODY(argc, argv, env); 139 } 140 141 void 142 Perl_sys_term(void) 143 { 144 dVAR; 145 if (!PL_veto_cleanup) { 146 PERL_SYS_TERM_BODY(); 147 } 148 } 149 150 151 #ifdef PERL_IMPLICIT_SYS 152 PerlInterpreter * 153 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS, 154 struct IPerlMem* ipMP, struct IPerlEnv* ipE, 155 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, 156 struct IPerlDir* ipD, struct IPerlSock* ipS, 157 struct IPerlProc* ipP) 158 { 159 PerlInterpreter *my_perl; 160 161 PERL_ARGS_ASSERT_PERL_ALLOC_USING; 162 163 /* Newx() needs interpreter, so call malloc() instead */ 164 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter)); 165 S_init_tls_and_interp(my_perl); 166 Zero(my_perl, 1, PerlInterpreter); 167 PL_Mem = ipM; 168 PL_MemShared = ipMS; 169 PL_MemParse = ipMP; 170 PL_Env = ipE; 171 PL_StdIO = ipStd; 172 PL_LIO = ipLIO; 173 PL_Dir = ipD; 174 PL_Sock = ipS; 175 PL_Proc = ipP; 176 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl); 177 178 return my_perl; 179 } 180 #else 181 182 /* 183 =head1 Embedding Functions 184 185 =for apidoc perl_alloc 186 187 Allocates a new Perl interpreter. See L<perlembed>. 188 189 =cut 190 */ 191 192 PerlInterpreter * 193 perl_alloc(void) 194 { 195 PerlInterpreter *my_perl; 196 197 /* Newx() needs interpreter, so call malloc() instead */ 198 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter)); 199 200 S_init_tls_and_interp(my_perl); 201 #ifndef PERL_TRACK_MEMPOOL 202 return (PerlInterpreter *) ZeroD(my_perl, 1, PerlInterpreter); 203 #else 204 Zero(my_perl, 1, PerlInterpreter); 205 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl); 206 return my_perl; 207 #endif 208 } 209 #endif /* PERL_IMPLICIT_SYS */ 210 211 /* 212 =for apidoc perl_construct 213 214 Initializes a new Perl interpreter. See L<perlembed>. 215 216 =cut 217 */ 218 219 static void 220 S_fixup_platform_bugs(void) 221 { 222 #if defined(__GLIBC__) && IVSIZE == 8 \ 223 && ( __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8)) 224 { 225 IV l = 3; 226 IV r = -10; 227 /* Cannot do this check with inlined IV constants since 228 * that seems to work correctly even with the buggy glibc. */ 229 if (l % r == -3) { 230 dTHX; 231 /* Yikes, we have the bug. 232 * Patch in the workaround version. */ 233 PL_ppaddr[OP_I_MODULO] = &Perl_pp_i_modulo_glibc_bugfix; 234 } 235 } 236 #endif 237 } 238 239 void 240 perl_construct(pTHXx) 241 { 242 dVAR; 243 244 PERL_ARGS_ASSERT_PERL_CONSTRUCT; 245 246 #ifdef MULTIPLICITY 247 init_interp(); 248 PL_perl_destruct_level = 1; 249 #else 250 PERL_UNUSED_ARG(my_perl); 251 if (PL_perl_destruct_level > 0) 252 init_interp(); 253 #endif 254 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */ 255 256 #ifdef PERL_TRACE_OPS 257 Zero(PL_op_exec_cnt, OP_max+2, UV); 258 #endif 259 260 init_constants(); 261 262 SvREADONLY_on(&PL_sv_placeholder); 263 SvREFCNT(&PL_sv_placeholder) = SvREFCNT_IMMORTAL; 264 265 PL_sighandlerp = (Sighandler_t) Perl_sighandler; 266 #ifdef PERL_USES_PL_PIDSTATUS 267 PL_pidstatus = newHV(); 268 #endif 269 270 PL_rs = newSVpvs("\n"); 271 272 init_stacks(); 273 274 /* The PERL_INTERNAL_RAND_SEED set-up must be after init_stacks because it calls 275 * things that may put SVs on the stack. 276 */ 277 278 #ifdef NO_PERL_INTERNAL_RAND_SEED 279 Perl_drand48_init_r(&PL_internal_random_state, seed()); 280 #else 281 { 282 UV seed; 283 const char *env_pv; 284 if (PerlProc_getuid() != PerlProc_geteuid() || 285 PerlProc_getgid() != PerlProc_getegid() || 286 !(env_pv = PerlEnv_getenv("PERL_INTERNAL_RAND_SEED")) || 287 grok_number(env_pv, strlen(env_pv), &seed) != IS_NUMBER_IN_UV) { 288 seed = seed(); 289 } 290 Perl_drand48_init_r(&PL_internal_random_state, (U32)seed); 291 } 292 #endif 293 294 init_ids(); 295 296 S_fixup_platform_bugs(); 297 298 JMPENV_BOOTSTRAP; 299 STATUS_ALL_SUCCESS; 300 301 init_uniprops(); 302 303 #if defined(LOCAL_PATCH_COUNT) 304 PL_localpatches = local_patches; /* For possible -v */ 305 #endif 306 307 #if defined(LIBM_LIB_VERSION) 308 /* 309 * Some BSDs and Cygwin default to POSIX math instead of IEEE. 310 * This switches them over to IEEE. 311 */ 312 _LIB_VERSION = _IEEE_; 313 #endif 314 315 #ifdef HAVE_INTERP_INTERN 316 sys_intern_init(); 317 #endif 318 319 PerlIO_init(aTHX); /* Hook to IO system */ 320 321 PL_fdpid = newAV(); /* for remembering popen pids by fd */ 322 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */ 323 PL_errors = newSVpvs(""); 324 SvPVCLEAR(PERL_DEBUG_PAD(0)); /* For regex debugging. */ 325 SvPVCLEAR(PERL_DEBUG_PAD(1)); /* ext/re needs these */ 326 SvPVCLEAR(PERL_DEBUG_PAD(2)); /* even without DEBUGGING. */ 327 #ifdef USE_ITHREADS 328 /* First entry is a list of empty elements. It needs to be initialised 329 else all hell breaks loose in S_find_uninit_var(). */ 330 Perl_av_create_and_push(aTHX_ &PL_regex_padav, newSVpvs("")); 331 PL_regex_pad = AvARRAY(PL_regex_padav); 332 Newxz(PL_stashpad, PL_stashpadmax, HV *); 333 #endif 334 #ifdef USE_REENTRANT_API 335 Perl_reentrant_init(aTHX); 336 #endif 337 if (PL_hash_seed_set == FALSE) { 338 /* Initialize the hash seed and state at startup. This must be 339 * done very early, before ANY hashes are constructed, and once 340 * setup is fixed for the lifetime of the process. 341 * 342 * If you decide to disable the seeding process you should choose 343 * a suitable seed yourself and define PERL_HASH_SEED to a well chosen 344 * string. See hv_func.h for details. 345 */ 346 #if defined(USE_HASH_SEED) 347 /* get the hash seed from the environment or from an RNG */ 348 Perl_get_hash_seed(aTHX_ PL_hash_seed); 349 #else 350 /* they want a hard coded seed, check that it is long enough */ 351 assert( strlen(PERL_HASH_SEED) >= PERL_HASH_SEED_BYTES ); 352 #endif 353 354 /* now we use the chosen seed to initialize the state - 355 * in some configurations this may be a relatively speaking 356 * expensive operation, but we only have to do it once at startup */ 357 PERL_HASH_SEED_STATE(PERL_HASH_SEED,PL_hash_state); 358 359 #ifdef PERL_USE_SINGLE_CHAR_HASH_CACHE 360 /* we can build a special cache for 0/1 byte keys, if people choose 361 * I suspect most of the time it is not worth it */ 362 { 363 char str[2]="\0"; 364 int i; 365 for (i=0;i<256;i++) { 366 str[0]= i; 367 PERL_HASH_WITH_STATE(PL_hash_state,PL_hash_chars[i],str,1); 368 } 369 PERL_HASH_WITH_STATE(PL_hash_state,PL_hash_chars[256],str,0); 370 } 371 #endif 372 /* at this point we have initialezed the hash function, and we can start 373 * constructing hashes */ 374 PL_hash_seed_set= TRUE; 375 } 376 377 /* Allow PL_strtab to be pre-initialized before calling perl_construct. 378 * can use a custom optimized PL_strtab hash before calling perl_construct */ 379 if (!PL_strtab) { 380 /* Note that strtab is a rather special HV. Assumptions are made 381 about not iterating on it, and not adding tie magic to it. 382 It is properly deallocated in perl_destruct() */ 383 PL_strtab = newHV(); 384 385 /* SHAREKEYS tells us that the hash has its keys shared with PL_strtab, 386 * which is not the case with PL_strtab itself */ 387 HvSHAREKEYS_off(PL_strtab); /* mandatory */ 388 hv_ksplit(PL_strtab, 1 << 11); 389 } 390 391 Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*); 392 393 #ifndef PERL_MICRO 394 # ifdef USE_ENVIRON_ARRAY 395 PL_origenviron = environ; 396 # endif 397 #endif 398 399 /* Use sysconf(_SC_CLK_TCK) if available, if not 400 * available or if the sysconf() fails, use the HZ. 401 * The HZ if not originally defined has been by now 402 * been defined as CLK_TCK, if available. */ 403 #if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK) 404 PL_clocktick = sysconf(_SC_CLK_TCK); 405 if (PL_clocktick <= 0) 406 #endif 407 PL_clocktick = HZ; 408 409 PL_stashcache = newHV(); 410 411 PL_patchlevel = newSVpvs("v" PERL_VERSION_STRING); 412 413 #ifdef HAS_MMAP 414 if (!PL_mmap_page_size) { 415 #if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_MMAP_PAGE_SIZE)) 416 { 417 SETERRNO(0, SS_NORMAL); 418 # ifdef _SC_PAGESIZE 419 PL_mmap_page_size = sysconf(_SC_PAGESIZE); 420 # else 421 PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE); 422 # endif 423 if ((long) PL_mmap_page_size < 0) { 424 Perl_croak(aTHX_ "panic: sysconf: %s", 425 errno ? Strerror(errno) : "pagesize unknown"); 426 } 427 } 428 #elif defined(HAS_GETPAGESIZE) 429 PL_mmap_page_size = getpagesize(); 430 #elif defined(I_SYS_PARAM) && defined(PAGESIZE) 431 PL_mmap_page_size = PAGESIZE; /* compiletime, bad */ 432 #endif 433 if (PL_mmap_page_size <= 0) 434 Perl_croak(aTHX_ "panic: bad pagesize %" IVdf, 435 (IV) PL_mmap_page_size); 436 } 437 #endif /* HAS_MMAP */ 438 439 #if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) 440 PL_timesbase.tms_utime = 0; 441 PL_timesbase.tms_stime = 0; 442 PL_timesbase.tms_cutime = 0; 443 PL_timesbase.tms_cstime = 0; 444 #endif 445 446 PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME)); 447 448 PL_registered_mros = newHV(); 449 /* Start with 1 bucket, for DFS. It's unlikely we'll need more. */ 450 HvMAX(PL_registered_mros) = 0; 451 452 #ifdef USE_POSIX_2008_LOCALE 453 PL_C_locale_obj = newlocale(LC_ALL_MASK, "C", NULL); 454 #endif 455 456 ENTER; 457 init_i18nl10n(1); 458 } 459 460 /* 461 =for apidoc nothreadhook 462 463 Stub that provides thread hook for perl_destruct when there are 464 no threads. 465 466 =cut 467 */ 468 469 int 470 Perl_nothreadhook(pTHX) 471 { 472 PERL_UNUSED_CONTEXT; 473 return 0; 474 } 475 476 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 477 void 478 Perl_dump_sv_child(pTHX_ SV *sv) 479 { 480 ssize_t got; 481 const int sock = PL_dumper_fd; 482 const int debug_fd = PerlIO_fileno(Perl_debug_log); 483 union control_un control; 484 struct msghdr msg; 485 struct iovec vec[2]; 486 struct cmsghdr *cmptr; 487 int returned_errno; 488 unsigned char buffer[256]; 489 490 PERL_ARGS_ASSERT_DUMP_SV_CHILD; 491 492 if(sock == -1 || debug_fd == -1) 493 return; 494 495 PerlIO_flush(Perl_debug_log); 496 497 /* All these shenanigans are to pass a file descriptor over to our child for 498 it to dump out to. We can't let it hold open the file descriptor when it 499 forks, as the file descriptor it will dump to can turn out to be one end 500 of pipe that some other process will wait on for EOF. (So as it would 501 be open, the wait would be forever.) */ 502 503 msg.msg_control = control.control; 504 msg.msg_controllen = sizeof(control.control); 505 /* We're a connected socket so we don't need a destination */ 506 msg.msg_name = NULL; 507 msg.msg_namelen = 0; 508 msg.msg_iov = vec; 509 msg.msg_iovlen = 1; 510 511 cmptr = CMSG_FIRSTHDR(&msg); 512 cmptr->cmsg_len = CMSG_LEN(sizeof(int)); 513 cmptr->cmsg_level = SOL_SOCKET; 514 cmptr->cmsg_type = SCM_RIGHTS; 515 *((int *)CMSG_DATA(cmptr)) = 1; 516 517 vec[0].iov_base = (void*)&sv; 518 vec[0].iov_len = sizeof(sv); 519 got = sendmsg(sock, &msg, 0); 520 521 if(got < 0) { 522 perror("Debug leaking scalars parent sendmsg failed"); 523 abort(); 524 } 525 if(got < sizeof(sv)) { 526 perror("Debug leaking scalars parent short sendmsg"); 527 abort(); 528 } 529 530 /* Return protocol is 531 int: errno value 532 unsigned char: length of location string (0 for empty) 533 unsigned char*: string (not terminated) 534 */ 535 vec[0].iov_base = (void*)&returned_errno; 536 vec[0].iov_len = sizeof(returned_errno); 537 vec[1].iov_base = buffer; 538 vec[1].iov_len = 1; 539 540 got = readv(sock, vec, 2); 541 542 if(got < 0) { 543 perror("Debug leaking scalars parent read failed"); 544 PerlIO_flush(PerlIO_stderr()); 545 abort(); 546 } 547 if(got < sizeof(returned_errno) + 1) { 548 perror("Debug leaking scalars parent short read"); 549 PerlIO_flush(PerlIO_stderr()); 550 abort(); 551 } 552 553 if (*buffer) { 554 got = read(sock, buffer + 1, *buffer); 555 if(got < 0) { 556 perror("Debug leaking scalars parent read 2 failed"); 557 PerlIO_flush(PerlIO_stderr()); 558 abort(); 559 } 560 561 if(got < *buffer) { 562 perror("Debug leaking scalars parent short read 2"); 563 PerlIO_flush(PerlIO_stderr()); 564 abort(); 565 } 566 } 567 568 if (returned_errno || *buffer) { 569 Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno" 570 " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1, 571 returned_errno, Strerror(returned_errno)); 572 } 573 } 574 #endif 575 576 /* 577 =for apidoc Am|int|perl_destruct|PerlInterpreter *my_perl 578 579 Shuts down a Perl interpreter. See L<perlembed> for a tutorial. 580 581 C<my_perl> points to the Perl interpreter. It must have been previously 582 created through the use of L</perl_alloc> and L</perl_construct>. It may 583 have been initialised through L</perl_parse>, and may have been used 584 through L</perl_run> and other means. This function should be called for 585 any Perl interpreter that has been constructed with L</perl_construct>, 586 even if subsequent operations on it failed, for example if L</perl_parse> 587 returned a non-zero value. 588 589 If the interpreter's C<PL_exit_flags> word has the 590 C<PERL_EXIT_DESTRUCT_END> flag set, then this function will execute code 591 in C<END> blocks before performing the rest of destruction. If it is 592 desired to make any use of the interpreter between L</perl_parse> and 593 L</perl_destruct> other than just calling L</perl_run>, then this flag 594 should be set early on. This matters if L</perl_run> will not be called, 595 or if anything else will be done in addition to calling L</perl_run>. 596 597 Returns a value be a suitable value to pass to the C library function 598 C<exit> (or to return from C<main>), to serve as an exit code indicating 599 the nature of the way the interpreter terminated. This takes into account 600 any failure of L</perl_parse> and any early exit from L</perl_run>. 601 The exit code is of the type required by the host operating system, 602 so because of differing exit code conventions it is not portable to 603 interpret specific numeric values as having specific meanings. 604 605 =cut 606 */ 607 608 int 609 perl_destruct(pTHXx) 610 { 611 dVAR; 612 volatile signed char destruct_level; /* see possible values in intrpvar.h */ 613 HV *hv; 614 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 615 pid_t child; 616 #endif 617 int i; 618 619 PERL_ARGS_ASSERT_PERL_DESTRUCT; 620 #ifndef MULTIPLICITY 621 PERL_UNUSED_ARG(my_perl); 622 #endif 623 624 assert(PL_scopestack_ix == 1); 625 626 /* wait for all pseudo-forked children to finish */ 627 PERL_WAIT_FOR_CHILDREN; 628 629 destruct_level = PL_perl_destruct_level; 630 #if defined(DEBUGGING) || defined(PERL_TRACK_MEMPOOL) 631 { 632 const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"); 633 if (s) { 634 int i; 635 if (strEQ(s, "-1")) { /* Special case: modperl folklore. */ 636 i = -1; 637 } else { 638 UV uv; 639 if (grok_atoUV(s, &uv, NULL) && uv <= INT_MAX) 640 i = (int)uv; 641 else 642 i = 0; 643 } 644 #ifdef DEBUGGING 645 if (destruct_level < i) destruct_level = i; 646 #endif 647 #ifdef PERL_TRACK_MEMPOOL 648 /* RT #114496, for perl_free */ 649 PL_perl_destruct_level = i; 650 #endif 651 } 652 } 653 #endif 654 655 if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) { 656 dJMPENV; 657 int x = 0; 658 659 JMPENV_PUSH(x); 660 PERL_UNUSED_VAR(x); 661 if (PL_endav && !PL_minus_c) { 662 PERL_SET_PHASE(PERL_PHASE_END); 663 call_list(PL_scopestack_ix, PL_endav); 664 } 665 JMPENV_POP; 666 } 667 LEAVE; 668 FREETMPS; 669 assert(PL_scopestack_ix == 0); 670 671 /* normally when we get here, PL_parser should be null due to having 672 * its original (null) value restored by SAVEt_PARSER during leaving 673 * scope (usually before run-time starts in fact). 674 * But if a thread is created within a BEGIN block, the parser is 675 * duped, but the SAVEt_PARSER savestack entry isn't. So PL_parser 676 * never gets cleaned up. 677 * Clean it up here instead. This is a bit of a hack. 678 */ 679 if (PL_parser) { 680 /* stop parser_free() stomping on PL_curcop */ 681 PL_parser->saved_curcop = PL_curcop; 682 parser_free(PL_parser); 683 } 684 685 686 /* Need to flush since END blocks can produce output */ 687 /* flush stdout separately, since we can identify it */ 688 #ifdef USE_PERLIO 689 { 690 PerlIO *stdo = PerlIO_stdout(); 691 if (*stdo && PerlIO_flush(stdo)) { 692 PerlIO_restore_errno(stdo); 693 if (errno) 694 PerlIO_printf(PerlIO_stderr(), "Unable to flush stdout: %s\n", 695 Strerror(errno)); 696 if (!STATUS_UNIX) 697 STATUS_ALL_FAILURE; 698 } 699 } 700 #endif 701 my_fflush_all(); 702 703 #ifdef PERL_TRACE_OPS 704 /* dump OP-counts if $ENV{PERL_TRACE_OPS} > 0 */ 705 { 706 const char * const ptoenv = PerlEnv_getenv("PERL_TRACE_OPS"); 707 UV uv; 708 709 if (!ptoenv || !Perl_grok_atoUV(ptoenv, &uv, NULL) 710 || !(uv > 0)) 711 goto no_trace_out; 712 } 713 PerlIO_printf(Perl_debug_log, "Trace of all OPs executed:\n"); 714 for (i = 0; i <= OP_max; ++i) { 715 if (PL_op_exec_cnt[i]) 716 PerlIO_printf(Perl_debug_log, " %s: %" UVuf "\n", PL_op_name[i], PL_op_exec_cnt[i]); 717 } 718 /* Utility slot for easily doing little tracing experiments in the runloop: */ 719 if (PL_op_exec_cnt[OP_max+1] != 0) 720 PerlIO_printf(Perl_debug_log, " SPECIAL: %" UVuf "\n", PL_op_exec_cnt[OP_max+1]); 721 PerlIO_printf(Perl_debug_log, "\n"); 722 no_trace_out: 723 #endif 724 725 726 if (PL_threadhook(aTHX)) { 727 /* Threads hook has vetoed further cleanup */ 728 PL_veto_cleanup = TRUE; 729 return STATUS_EXIT; 730 } 731 732 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 733 if (destruct_level != 0) { 734 /* Fork here to create a child. Our child's job is to preserve the 735 state of scalars prior to destruction, so that we can instruct it 736 to dump any scalars that we later find have leaked. 737 There's no subtlety in this code - it assumes POSIX, and it doesn't 738 fail gracefully */ 739 int fd[2]; 740 741 if(PerlSock_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, fd)) { 742 perror("Debug leaking scalars socketpair failed"); 743 abort(); 744 } 745 746 child = fork(); 747 if(child == -1) { 748 perror("Debug leaking scalars fork failed"); 749 abort(); 750 } 751 if (!child) { 752 /* We are the child */ 753 const int sock = fd[1]; 754 const int debug_fd = PerlIO_fileno(Perl_debug_log); 755 int f; 756 const char *where; 757 /* Our success message is an integer 0, and a char 0 */ 758 static const char success[sizeof(int) + 1] = {0}; 759 760 close(fd[0]); 761 762 /* We need to close all other file descriptors otherwise we end up 763 with interesting hangs, where the parent closes its end of a 764 pipe, and sits waiting for (another) child to terminate. Only 765 that child never terminates, because it never gets EOF, because 766 we also have the far end of the pipe open. We even need to 767 close the debugging fd, because sometimes it happens to be one 768 end of a pipe, and a process is waiting on the other end for 769 EOF. Normally it would be closed at some point earlier in 770 destruction, but if we happen to cause the pipe to remain open, 771 EOF never occurs, and we get an infinite hang. Hence all the 772 games to pass in a file descriptor if it's actually needed. */ 773 774 f = sysconf(_SC_OPEN_MAX); 775 if(f < 0) { 776 where = "sysconf failed"; 777 goto abort; 778 } 779 while (f--) { 780 if (f == sock) 781 continue; 782 close(f); 783 } 784 785 while (1) { 786 SV *target; 787 union control_un control; 788 struct msghdr msg; 789 struct iovec vec[1]; 790 struct cmsghdr *cmptr; 791 ssize_t got; 792 int got_fd; 793 794 msg.msg_control = control.control; 795 msg.msg_controllen = sizeof(control.control); 796 /* We're a connected socket so we don't need a source */ 797 msg.msg_name = NULL; 798 msg.msg_namelen = 0; 799 msg.msg_iov = vec; 800 msg.msg_iovlen = C_ARRAY_LENGTH(vec); 801 802 vec[0].iov_base = (void*)⌖ 803 vec[0].iov_len = sizeof(target); 804 805 got = recvmsg(sock, &msg, 0); 806 807 if(got == 0) 808 break; 809 if(got < 0) { 810 where = "recv failed"; 811 goto abort; 812 } 813 if(got < sizeof(target)) { 814 where = "short recv"; 815 goto abort; 816 } 817 818 if(!(cmptr = CMSG_FIRSTHDR(&msg))) { 819 where = "no cmsg"; 820 goto abort; 821 } 822 if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) { 823 where = "wrong cmsg_len"; 824 goto abort; 825 } 826 if(cmptr->cmsg_level != SOL_SOCKET) { 827 where = "wrong cmsg_level"; 828 goto abort; 829 } 830 if(cmptr->cmsg_type != SCM_RIGHTS) { 831 where = "wrong cmsg_type"; 832 goto abort; 833 } 834 835 got_fd = *(int*)CMSG_DATA(cmptr); 836 /* For our last little bit of trickery, put the file descriptor 837 back into Perl_debug_log, as if we never actually closed it 838 */ 839 if(got_fd != debug_fd) { 840 if (PerlLIO_dup2_cloexec(got_fd, debug_fd) == -1) { 841 where = "dup2"; 842 goto abort; 843 } 844 } 845 sv_dump(target); 846 847 PerlIO_flush(Perl_debug_log); 848 849 got = write(sock, &success, sizeof(success)); 850 851 if(got < 0) { 852 where = "write failed"; 853 goto abort; 854 } 855 if(got < sizeof(success)) { 856 where = "short write"; 857 goto abort; 858 } 859 } 860 _exit(0); 861 abort: 862 { 863 int send_errno = errno; 864 unsigned char length = (unsigned char) strlen(where); 865 struct iovec failure[3] = { 866 {(void*)&send_errno, sizeof(send_errno)}, 867 {&length, 1}, 868 {(void*)where, length} 869 }; 870 int got = writev(sock, failure, 3); 871 /* Bad news travels fast. Faster than data. We'll get a SIGPIPE 872 in the parent if we try to read from the socketpair after the 873 child has exited, even if there was data to read. 874 So sleep a bit to give the parent a fighting chance of 875 reading the data. */ 876 sleep(2); 877 _exit((got == -1) ? errno : 0); 878 } 879 /* End of child. */ 880 } 881 PL_dumper_fd = fd[0]; 882 close(fd[1]); 883 } 884 #endif 885 886 /* We must account for everything. */ 887 888 /* Destroy the main CV and syntax tree */ 889 /* Set PL_curcop now, because destroying ops can cause new SVs 890 to be generated in Perl_pad_swipe, and when running with 891 -DDEBUG_LEAKING_SCALARS they expect PL_curcop to point to a valid 892 op from which the filename structure member is copied. */ 893 PL_curcop = &PL_compiling; 894 if (PL_main_root) { 895 /* ensure comppad/curpad to refer to main's pad */ 896 if (CvPADLIST(PL_main_cv)) { 897 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1); 898 PL_comppad_name = PadlistNAMES(CvPADLIST(PL_main_cv)); 899 } 900 op_free(PL_main_root); 901 PL_main_root = NULL; 902 } 903 PL_main_start = NULL; 904 /* note that PL_main_cv isn't usually actually freed at this point, 905 * due to the CvOUTSIDE refs from subs compiled within it. It will 906 * get freed once all the subs are freed in sv_clean_all(), for 907 * destruct_level > 0 */ 908 SvREFCNT_dec(PL_main_cv); 909 PL_main_cv = NULL; 910 PERL_SET_PHASE(PERL_PHASE_DESTRUCT); 911 912 /* Tell PerlIO we are about to tear things apart in case 913 we have layers which are using resources that should 914 be cleaned up now. 915 */ 916 917 PerlIO_destruct(aTHX); 918 919 /* 920 * Try to destruct global references. We do this first so that the 921 * destructors and destructees still exist. Some sv's might remain. 922 * Non-referenced objects are on their own. 923 */ 924 sv_clean_objs(); 925 926 /* unhook hooks which will soon be, or use, destroyed data */ 927 SvREFCNT_dec(PL_warnhook); 928 PL_warnhook = NULL; 929 SvREFCNT_dec(PL_diehook); 930 PL_diehook = NULL; 931 932 /* call exit list functions */ 933 while (PL_exitlistlen-- > 0) 934 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr); 935 936 Safefree(PL_exitlist); 937 938 PL_exitlist = NULL; 939 PL_exitlistlen = 0; 940 941 SvREFCNT_dec(PL_registered_mros); 942 943 /* jettison our possibly duplicated environment */ 944 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied 945 * so we certainly shouldn't free it here 946 */ 947 #ifndef PERL_MICRO 948 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV) 949 if (environ != PL_origenviron && !PL_use_safe_putenv 950 #ifdef USE_ITHREADS 951 /* only main thread can free environ[0] contents */ 952 && PL_curinterp == aTHX 953 #endif 954 ) 955 { 956 I32 i; 957 958 for (i = 0; environ[i]; i++) 959 safesysfree(environ[i]); 960 961 /* Must use safesysfree() when working with environ. */ 962 safesysfree(environ); 963 964 environ = PL_origenviron; 965 } 966 #endif 967 #endif /* !PERL_MICRO */ 968 969 if (destruct_level == 0) { 970 971 DEBUG_P(debprofdump()); 972 973 #if defined(PERLIO_LAYERS) 974 /* No more IO - including error messages ! */ 975 PerlIO_cleanup(aTHX); 976 #endif 977 978 CopFILE_free(&PL_compiling); 979 980 /* The exit() function will do everything that needs doing. */ 981 return STATUS_EXIT; 982 } 983 984 /* Below, do clean up for when PERL_DESTRUCT_LEVEL is not 0 */ 985 986 #ifdef USE_ITHREADS 987 /* the syntax tree is shared between clones 988 * so op_free(PL_main_root) only ReREFCNT_dec's 989 * REGEXPs in the parent interpreter 990 * we need to manually ReREFCNT_dec for the clones 991 */ 992 { 993 I32 i = AvFILLp(PL_regex_padav); 994 SV **ary = AvARRAY(PL_regex_padav); 995 996 for (; i; i--) { 997 SvREFCNT_dec(ary[i]); 998 ary[i] = &PL_sv_undef; 999 } 1000 } 1001 #endif 1002 1003 1004 SvREFCNT_dec(MUTABLE_SV(PL_stashcache)); 1005 PL_stashcache = NULL; 1006 1007 /* loosen bonds of global variables */ 1008 1009 /* XXX can PL_parser still be non-null here? */ 1010 if(PL_parser && PL_parser->rsfp) { 1011 (void)PerlIO_close(PL_parser->rsfp); 1012 PL_parser->rsfp = NULL; 1013 } 1014 1015 if (PL_minus_F) { 1016 Safefree(PL_splitstr); 1017 PL_splitstr = NULL; 1018 } 1019 1020 /* switches */ 1021 PL_minus_n = FALSE; 1022 PL_minus_p = FALSE; 1023 PL_minus_l = FALSE; 1024 PL_minus_a = FALSE; 1025 PL_minus_F = FALSE; 1026 PL_doswitches = FALSE; 1027 PL_dowarn = G_WARN_OFF; 1028 #ifdef PERL_SAWAMPERSAND 1029 PL_sawampersand = 0; /* must save all match strings */ 1030 #endif 1031 PL_unsafe = FALSE; 1032 1033 Safefree(PL_inplace); 1034 PL_inplace = NULL; 1035 SvREFCNT_dec(PL_patchlevel); 1036 1037 if (PL_e_script) { 1038 SvREFCNT_dec(PL_e_script); 1039 PL_e_script = NULL; 1040 } 1041 1042 PL_perldb = 0; 1043 1044 /* magical thingies */ 1045 1046 SvREFCNT_dec(PL_ofsgv); /* *, */ 1047 PL_ofsgv = NULL; 1048 1049 SvREFCNT_dec(PL_ors_sv); /* $\ */ 1050 PL_ors_sv = NULL; 1051 1052 SvREFCNT_dec(PL_rs); /* $/ */ 1053 PL_rs = NULL; 1054 1055 Safefree(PL_osname); /* $^O */ 1056 PL_osname = NULL; 1057 1058 SvREFCNT_dec(PL_statname); 1059 PL_statname = NULL; 1060 PL_statgv = NULL; 1061 1062 /* defgv, aka *_ should be taken care of elsewhere */ 1063 1064 /* float buffer */ 1065 Safefree(PL_efloatbuf); 1066 PL_efloatbuf = NULL; 1067 PL_efloatsize = 0; 1068 1069 /* startup and shutdown function lists */ 1070 SvREFCNT_dec(PL_beginav); 1071 SvREFCNT_dec(PL_beginav_save); 1072 SvREFCNT_dec(PL_endav); 1073 SvREFCNT_dec(PL_checkav); 1074 SvREFCNT_dec(PL_checkav_save); 1075 SvREFCNT_dec(PL_unitcheckav); 1076 SvREFCNT_dec(PL_unitcheckav_save); 1077 SvREFCNT_dec(PL_initav); 1078 PL_beginav = NULL; 1079 PL_beginav_save = NULL; 1080 PL_endav = NULL; 1081 PL_checkav = NULL; 1082 PL_checkav_save = NULL; 1083 PL_unitcheckav = NULL; 1084 PL_unitcheckav_save = NULL; 1085 PL_initav = NULL; 1086 1087 /* shortcuts just get cleared */ 1088 PL_hintgv = NULL; 1089 PL_errgv = NULL; 1090 PL_argvoutgv = NULL; 1091 PL_stdingv = NULL; 1092 PL_stderrgv = NULL; 1093 PL_last_in_gv = NULL; 1094 PL_DBsingle = NULL; 1095 PL_DBtrace = NULL; 1096 PL_DBsignal = NULL; 1097 PL_DBsingle_iv = 0; 1098 PL_DBtrace_iv = 0; 1099 PL_DBsignal_iv = 0; 1100 PL_DBcv = NULL; 1101 PL_dbargs = NULL; 1102 PL_debstash = NULL; 1103 1104 SvREFCNT_dec(PL_envgv); 1105 SvREFCNT_dec(PL_incgv); 1106 SvREFCNT_dec(PL_argvgv); 1107 SvREFCNT_dec(PL_replgv); 1108 SvREFCNT_dec(PL_DBgv); 1109 SvREFCNT_dec(PL_DBline); 1110 SvREFCNT_dec(PL_DBsub); 1111 PL_envgv = NULL; 1112 PL_incgv = NULL; 1113 PL_argvgv = NULL; 1114 PL_replgv = NULL; 1115 PL_DBgv = NULL; 1116 PL_DBline = NULL; 1117 PL_DBsub = NULL; 1118 1119 SvREFCNT_dec(PL_argvout_stack); 1120 PL_argvout_stack = NULL; 1121 1122 SvREFCNT_dec(PL_modglobal); 1123 PL_modglobal = NULL; 1124 SvREFCNT_dec(PL_preambleav); 1125 PL_preambleav = NULL; 1126 SvREFCNT_dec(PL_subname); 1127 PL_subname = NULL; 1128 #ifdef PERL_USES_PL_PIDSTATUS 1129 SvREFCNT_dec(PL_pidstatus); 1130 PL_pidstatus = NULL; 1131 #endif 1132 SvREFCNT_dec(PL_toptarget); 1133 PL_toptarget = NULL; 1134 SvREFCNT_dec(PL_bodytarget); 1135 PL_bodytarget = NULL; 1136 PL_formtarget = NULL; 1137 1138 /* free locale stuff */ 1139 #ifdef USE_LOCALE_COLLATE 1140 Safefree(PL_collation_name); 1141 PL_collation_name = NULL; 1142 #endif 1143 #if defined(USE_POSIX_2008_LOCALE) \ 1144 && defined(USE_THREAD_SAFE_LOCALE) \ 1145 && ! defined(HAS_QUERYLOCALE) 1146 for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) { 1147 Safefree(PL_curlocales[i]); 1148 PL_curlocales[i] = NULL; 1149 } 1150 #endif 1151 #ifdef HAS_POSIX_2008_LOCALE 1152 { 1153 /* This also makes sure we aren't using a locale object that gets freed 1154 * below */ 1155 const locale_t old_locale = uselocale(LC_GLOBAL_LOCALE); 1156 if ( old_locale != LC_GLOBAL_LOCALE 1157 # ifdef USE_POSIX_2008_LOCALE 1158 && old_locale != PL_C_locale_obj 1159 # endif 1160 ) { 1161 DEBUG_Lv(PerlIO_printf(Perl_debug_log, 1162 "%s:%d: Freeing %p\n", __FILE__, __LINE__, old_locale)); 1163 freelocale(old_locale); 1164 } 1165 } 1166 # ifdef USE_LOCALE_NUMERIC 1167 if (PL_underlying_numeric_obj) { 1168 DEBUG_Lv(PerlIO_printf(Perl_debug_log, 1169 "%s:%d: Freeing %p\n", __FILE__, __LINE__, 1170 PL_underlying_numeric_obj)); 1171 freelocale(PL_underlying_numeric_obj); 1172 PL_underlying_numeric_obj = (locale_t) NULL; 1173 } 1174 # endif 1175 #endif 1176 #ifdef USE_LOCALE_NUMERIC 1177 Safefree(PL_numeric_name); 1178 PL_numeric_name = NULL; 1179 SvREFCNT_dec(PL_numeric_radix_sv); 1180 PL_numeric_radix_sv = NULL; 1181 #endif 1182 1183 if (PL_setlocale_buf) { 1184 Safefree(PL_setlocale_buf); 1185 PL_setlocale_buf = NULL; 1186 } 1187 1188 if (PL_langinfo_buf) { 1189 Safefree(PL_langinfo_buf); 1190 PL_langinfo_buf = NULL; 1191 } 1192 1193 /* clear character classes */ 1194 #ifdef USE_LOCALE_CTYPE 1195 SvREFCNT_dec(PL_warn_locale); 1196 PL_warn_locale = NULL; 1197 #endif 1198 1199 if (!specialWARN(PL_compiling.cop_warnings)) 1200 PerlMemShared_free(PL_compiling.cop_warnings); 1201 PL_compiling.cop_warnings = NULL; 1202 cophh_free(CopHINTHASH_get(&PL_compiling)); 1203 CopHINTHASH_set(&PL_compiling, cophh_new_empty()); 1204 CopFILE_free(&PL_compiling); 1205 1206 /* Prepare to destruct main symbol table. */ 1207 1208 hv = PL_defstash; 1209 /* break ref loop *:: <=> %:: */ 1210 (void)hv_deletes(hv, "main::", G_DISCARD); 1211 PL_defstash = 0; 1212 SvREFCNT_dec(hv); 1213 SvREFCNT_dec(PL_curstname); 1214 PL_curstname = NULL; 1215 1216 /* clear queued errors */ 1217 SvREFCNT_dec(PL_errors); 1218 PL_errors = NULL; 1219 1220 SvREFCNT_dec(PL_isarev); 1221 1222 FREETMPS; 1223 if (destruct_level >= 2) { 1224 if (PL_scopestack_ix != 0) 1225 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), 1226 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n", 1227 (long)PL_scopestack_ix); 1228 if (PL_savestack_ix != 0) 1229 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), 1230 "Unbalanced saves: %ld more saves than restores\n", 1231 (long)PL_savestack_ix); 1232 if (PL_tmps_floor != -1) 1233 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n", 1234 (long)PL_tmps_floor + 1); 1235 if (cxstack_ix != -1) 1236 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n", 1237 (long)cxstack_ix + 1); 1238 } 1239 1240 #ifdef USE_ITHREADS 1241 SvREFCNT_dec(PL_regex_padav); 1242 PL_regex_padav = NULL; 1243 PL_regex_pad = NULL; 1244 #endif 1245 1246 #ifdef PERL_IMPLICIT_CONTEXT 1247 /* the entries in this list are allocated via SV PVX's, so get freed 1248 * in sv_clean_all */ 1249 Safefree(PL_my_cxt_list); 1250 #endif 1251 1252 /* Now absolutely destruct everything, somehow or other, loops or no. */ 1253 1254 /* the 2 is for PL_fdpid and PL_strtab */ 1255 while (sv_clean_all() > 2) 1256 ; 1257 1258 #ifdef USE_ITHREADS 1259 Safefree(PL_stashpad); /* must come after sv_clean_all */ 1260 #endif 1261 1262 AvREAL_off(PL_fdpid); /* no surviving entries */ 1263 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */ 1264 PL_fdpid = NULL; 1265 1266 #ifdef HAVE_INTERP_INTERN 1267 sys_intern_clear(); 1268 #endif 1269 1270 /* constant strings */ 1271 for (i = 0; i < SV_CONSTS_COUNT; i++) { 1272 SvREFCNT_dec(PL_sv_consts[i]); 1273 PL_sv_consts[i] = NULL; 1274 } 1275 1276 /* Destruct the global string table. */ 1277 { 1278 /* Yell and reset the HeVAL() slots that are still holding refcounts, 1279 * so that sv_free() won't fail on them. 1280 * Now that the global string table is using a single hunk of memory 1281 * for both HE and HEK, we either need to explicitly unshare it the 1282 * correct way, or actually free things here. 1283 */ 1284 I32 riter = 0; 1285 const I32 max = HvMAX(PL_strtab); 1286 HE * const * const array = HvARRAY(PL_strtab); 1287 HE *hent = array[0]; 1288 1289 for (;;) { 1290 if (hent && ckWARN_d(WARN_INTERNAL)) { 1291 HE * const next = HeNEXT(hent); 1292 Perl_warner(aTHX_ packWARN(WARN_INTERNAL), 1293 "Unbalanced string table refcount: (%ld) for \"%s\"", 1294 (long)hent->he_valu.hent_refcount, HeKEY(hent)); 1295 Safefree(hent); 1296 hent = next; 1297 } 1298 if (!hent) { 1299 if (++riter > max) 1300 break; 1301 hent = array[riter]; 1302 } 1303 } 1304 1305 Safefree(array); 1306 HvARRAY(PL_strtab) = 0; 1307 HvTOTALKEYS(PL_strtab) = 0; 1308 } 1309 SvREFCNT_dec(PL_strtab); 1310 1311 #ifdef USE_ITHREADS 1312 /* free the pointer tables used for cloning */ 1313 ptr_table_free(PL_ptr_table); 1314 PL_ptr_table = (PTR_TBL_t*)NULL; 1315 #endif 1316 1317 /* free special SVs */ 1318 1319 SvREFCNT(&PL_sv_yes) = 0; 1320 sv_clear(&PL_sv_yes); 1321 SvANY(&PL_sv_yes) = NULL; 1322 SvFLAGS(&PL_sv_yes) = 0; 1323 1324 SvREFCNT(&PL_sv_no) = 0; 1325 sv_clear(&PL_sv_no); 1326 SvANY(&PL_sv_no) = NULL; 1327 SvFLAGS(&PL_sv_no) = 0; 1328 1329 SvREFCNT(&PL_sv_zero) = 0; 1330 sv_clear(&PL_sv_zero); 1331 SvANY(&PL_sv_zero) = NULL; 1332 SvFLAGS(&PL_sv_zero) = 0; 1333 1334 { 1335 int i; 1336 for (i=0; i<=2; i++) { 1337 SvREFCNT(PERL_DEBUG_PAD(i)) = 0; 1338 sv_clear(PERL_DEBUG_PAD(i)); 1339 SvANY(PERL_DEBUG_PAD(i)) = NULL; 1340 SvFLAGS(PERL_DEBUG_PAD(i)) = 0; 1341 } 1342 } 1343 1344 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL)) 1345 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count); 1346 1347 #ifdef DEBUG_LEAKING_SCALARS 1348 if (PL_sv_count != 0) { 1349 SV* sva; 1350 SV* sv; 1351 SV* svend; 1352 1353 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) { 1354 svend = &sva[SvREFCNT(sva)]; 1355 for (sv = sva + 1; sv < svend; ++sv) { 1356 if (SvTYPE(sv) != (svtype)SVTYPEMASK) { 1357 PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p" 1358 " flags=0x%" UVxf 1359 " refcnt=%" UVuf pTHX__FORMAT "\n" 1360 "\tallocated at %s:%d %s %s (parent 0x%" UVxf ");" 1361 "serial %" UVuf "\n", 1362 (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt 1363 pTHX__VALUE, 1364 sv->sv_debug_file ? sv->sv_debug_file : "(unknown)", 1365 sv->sv_debug_line, 1366 sv->sv_debug_inpad ? "for" : "by", 1367 sv->sv_debug_optype ? 1368 PL_op_name[sv->sv_debug_optype]: "(none)", 1369 PTR2UV(sv->sv_debug_parent), 1370 sv->sv_debug_serial 1371 ); 1372 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 1373 Perl_dump_sv_child(aTHX_ sv); 1374 #endif 1375 } 1376 } 1377 } 1378 } 1379 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP 1380 { 1381 int status; 1382 fd_set rset; 1383 /* Wait for up to 4 seconds for child to terminate. 1384 This seems to be the least effort way of timing out on reaping 1385 its exit status. */ 1386 struct timeval waitfor = {4, 0}; 1387 int sock = PL_dumper_fd; 1388 1389 shutdown(sock, 1); 1390 FD_ZERO(&rset); 1391 FD_SET(sock, &rset); 1392 select(sock + 1, &rset, NULL, NULL, &waitfor); 1393 waitpid(child, &status, WNOHANG); 1394 close(sock); 1395 } 1396 #endif 1397 #endif 1398 #ifdef DEBUG_LEAKING_SCALARS_ABORT 1399 if (PL_sv_count) 1400 abort(); 1401 #endif 1402 PL_sv_count = 0; 1403 1404 #if defined(PERLIO_LAYERS) 1405 /* No more IO - including error messages ! */ 1406 PerlIO_cleanup(aTHX); 1407 #endif 1408 1409 /* sv_undef needs to stay immortal until after PerlIO_cleanup 1410 as currently layers use it rather than NULL as a marker 1411 for no arg - and will try and SvREFCNT_dec it. 1412 */ 1413 SvREFCNT(&PL_sv_undef) = 0; 1414 SvREADONLY_off(&PL_sv_undef); 1415 1416 Safefree(PL_origfilename); 1417 PL_origfilename = NULL; 1418 Safefree(PL_reg_curpm); 1419 free_tied_hv_pool(); 1420 Safefree(PL_op_mask); 1421 Safefree(PL_psig_name); 1422 PL_psig_name = (SV**)NULL; 1423 PL_psig_ptr = (SV**)NULL; 1424 { 1425 /* We need to NULL PL_psig_pend first, so that 1426 signal handlers know not to use it */ 1427 int *psig_save = PL_psig_pend; 1428 PL_psig_pend = (int*)NULL; 1429 Safefree(psig_save); 1430 } 1431 nuke_stacks(); 1432 TAINTING_set(FALSE); 1433 TAINT_WARN_set(FALSE); 1434 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */ 1435 1436 DEBUG_P(debprofdump()); 1437 1438 PL_debug = 0; 1439 1440 #ifdef USE_REENTRANT_API 1441 Perl_reentrant_free(aTHX); 1442 #endif 1443 1444 /* These all point to HVs that are about to be blown away. 1445 Code in core and on CPAN assumes that if the interpreter is re-started 1446 that they will be cleanly NULL or pointing to a valid HV. */ 1447 PL_custom_op_names = NULL; 1448 PL_custom_op_descs = NULL; 1449 PL_custom_ops = NULL; 1450 1451 sv_free_arenas(); 1452 1453 while (PL_regmatch_slab) { 1454 regmatch_slab *s = PL_regmatch_slab; 1455 PL_regmatch_slab = PL_regmatch_slab->next; 1456 Safefree(s); 1457 } 1458 1459 /* As the absolutely last thing, free the non-arena SV for mess() */ 1460 1461 if (PL_mess_sv) { 1462 /* we know that type == SVt_PVMG */ 1463 1464 /* it could have accumulated taint magic */ 1465 MAGIC* mg; 1466 MAGIC* moremagic; 1467 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) { 1468 moremagic = mg->mg_moremagic; 1469 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global 1470 && mg->mg_len >= 0) 1471 Safefree(mg->mg_ptr); 1472 Safefree(mg); 1473 } 1474 1475 /* we know that type >= SVt_PV */ 1476 SvPV_free(PL_mess_sv); 1477 Safefree(SvANY(PL_mess_sv)); 1478 Safefree(PL_mess_sv); 1479 PL_mess_sv = NULL; 1480 } 1481 return STATUS_EXIT; 1482 } 1483 1484 /* 1485 =for apidoc perl_free 1486 1487 Releases a Perl interpreter. See L<perlembed>. 1488 1489 =cut 1490 */ 1491 1492 void 1493 perl_free(pTHXx) 1494 { 1495 dVAR; 1496 1497 PERL_ARGS_ASSERT_PERL_FREE; 1498 1499 if (PL_veto_cleanup) 1500 return; 1501 1502 #ifdef PERL_TRACK_MEMPOOL 1503 { 1504 /* 1505 * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero 1506 * value as we're probably hunting memory leaks then 1507 */ 1508 if (PL_perl_destruct_level == 0) { 1509 const U32 old_debug = PL_debug; 1510 /* Emulate the PerlHost behaviour of free()ing all memory allocated in this 1511 thread at thread exit. */ 1512 if (DEBUG_m_TEST) { 1513 PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we " 1514 "free this thread's memory\n"); 1515 PL_debug &= ~ DEBUG_m_FLAG; 1516 } 1517 while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header)){ 1518 char * next = (char *)(aTHXx->Imemory_debug_header.next); 1519 Malloc_t ptr = PERL_MEMORY_DEBUG_HEADER_SIZE + next; 1520 safesysfree(ptr); 1521 } 1522 PL_debug = old_debug; 1523 } 1524 } 1525 #endif 1526 1527 #if defined(WIN32) || defined(NETWARE) 1528 # if defined(PERL_IMPLICIT_SYS) 1529 { 1530 # ifdef NETWARE 1531 void *host = nw_internal_host; 1532 PerlMem_free(aTHXx); 1533 nw_delete_internal_host(host); 1534 # else 1535 void *host = w32_internal_host; 1536 PerlMem_free(aTHXx); 1537 win32_delete_internal_host(host); 1538 # endif 1539 } 1540 # else 1541 PerlMem_free(aTHXx); 1542 # endif 1543 #else 1544 PerlMem_free(aTHXx); 1545 #endif 1546 } 1547 1548 #if defined(USE_ITHREADS) 1549 /* provide destructors to clean up the thread key when libperl is unloaded */ 1550 #ifndef WIN32 /* handled during DLL_PROCESS_DETACH in win32/perllib.c */ 1551 1552 #if defined(__hpux) && !(defined(__ux_version) && __ux_version <= 1020) && !defined(__GNUC__) 1553 #pragma fini "perl_fini" 1554 #elif defined(__sun) && !defined(__GNUC__) 1555 #pragma fini (perl_fini) 1556 #endif 1557 1558 static void 1559 #if defined(__GNUC__) 1560 __attribute__((destructor)) 1561 #endif 1562 perl_fini(void) 1563 { 1564 dVAR; 1565 if ( 1566 #ifdef PERL_GLOBAL_STRUCT_PRIVATE 1567 my_vars && 1568 #endif 1569 PL_curinterp && !PL_veto_cleanup) 1570 FREE_THREAD_KEY; 1571 } 1572 1573 #endif /* WIN32 */ 1574 #endif /* THREADS */ 1575 1576 void 1577 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr) 1578 { 1579 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry); 1580 PL_exitlist[PL_exitlistlen].fn = fn; 1581 PL_exitlist[PL_exitlistlen].ptr = ptr; 1582 ++PL_exitlistlen; 1583 } 1584 1585 /* 1586 =for apidoc Am|int|perl_parse|PerlInterpreter *my_perl|XSINIT_t xsinit|int argc|char **argv|char **env 1587 1588 Tells a Perl interpreter to parse a Perl script. This performs most 1589 of the initialisation of a Perl interpreter. See L<perlembed> for 1590 a tutorial. 1591 1592 C<my_perl> points to the Perl interpreter that is to parse the script. 1593 It must have been previously created through the use of L</perl_alloc> 1594 and L</perl_construct>. C<xsinit> points to a callback function that 1595 will be called to set up the ability for this Perl interpreter to load 1596 XS extensions, or may be null to perform no such setup. 1597 1598 C<argc> and C<argv> supply a set of command-line arguments to the Perl 1599 interpreter, as would normally be passed to the C<main> function of 1600 a C program. C<argv[argc]> must be null. These arguments are where 1601 the script to parse is specified, either by naming a script file or by 1602 providing a script in a C<-e> option. 1603 If L<C<$0>|perlvar/$0> will be written to in the Perl interpreter, then 1604 the argument strings must be in writable memory, and so mustn't just be 1605 string constants. 1606 1607 C<env> specifies a set of environment variables that will be used by 1608 this Perl interpreter. If non-null, it must point to a null-terminated 1609 array of environment strings. If null, the Perl interpreter will use 1610 the environment supplied by the C<environ> global variable. 1611 1612 This function initialises the interpreter, and parses and compiles the 1613 script specified by the command-line arguments. This includes executing 1614 code in C<BEGIN>, C<UNITCHECK>, and C<CHECK> blocks. It does not execute 1615 C<INIT> blocks or the main program. 1616 1617 Returns an integer of slightly tricky interpretation. The correct 1618 use of the return value is as a truth value indicating whether there 1619 was a failure in initialisation. If zero is returned, this indicates 1620 that initialisation was successful, and it is safe to proceed to call 1621 L</perl_run> and make other use of it. If a non-zero value is returned, 1622 this indicates some problem that means the interpreter wants to terminate. 1623 The interpreter should not be just abandoned upon such failure; the caller 1624 should proceed to shut the interpreter down cleanly with L</perl_destruct> 1625 and free it with L</perl_free>. 1626 1627 For historical reasons, the non-zero return value also attempts to 1628 be a suitable value to pass to the C library function C<exit> (or to 1629 return from C<main>), to serve as an exit code indicating the nature 1630 of the way initialisation terminated. However, this isn't portable, 1631 due to differing exit code conventions. A historical bug is preserved 1632 for the time being: if the Perl built-in C<exit> is called during this 1633 function's execution, with a type of exit entailing a zero exit code 1634 under the host operating system's conventions, then this function 1635 returns zero rather than a non-zero value. This bug, [perl #2754], 1636 leads to C<perl_run> being called (and therefore C<INIT> blocks and the 1637 main program running) despite a call to C<exit>. It has been preserved 1638 because a popular module-installing module has come to rely on it and 1639 needs time to be fixed. This issue is [perl #132577], and the original 1640 bug is due to be fixed in Perl 5.30. 1641 1642 =cut 1643 */ 1644 1645 #define SET_CURSTASH(newstash) \ 1646 if (PL_curstash != newstash) { \ 1647 SvREFCNT_dec(PL_curstash); \ 1648 PL_curstash = (HV *)SvREFCNT_inc(newstash); \ 1649 } 1650 1651 int 1652 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) 1653 { 1654 dVAR; 1655 I32 oldscope; 1656 int ret; 1657 dJMPENV; 1658 1659 PERL_ARGS_ASSERT_PERL_PARSE; 1660 #ifndef MULTIPLICITY 1661 PERL_UNUSED_ARG(my_perl); 1662 #endif 1663 #if (defined(USE_HASH_SEED) || defined(USE_HASH_SEED_DEBUG)) && !defined(NO_PERL_HASH_SEED_DEBUG) 1664 { 1665 const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG"); 1666 1667 if (s && strEQ(s, "1")) { 1668 const unsigned char *seed= PERL_HASH_SEED; 1669 const unsigned char *seed_end= PERL_HASH_SEED + PERL_HASH_SEED_BYTES; 1670 PerlIO_printf(Perl_debug_log, "HASH_FUNCTION = %s HASH_SEED = 0x", PERL_HASH_FUNC); 1671 while (seed < seed_end) { 1672 PerlIO_printf(Perl_debug_log, "%02x", *seed++); 1673 } 1674 #ifdef PERL_HASH_RANDOMIZE_KEYS 1675 PerlIO_printf(Perl_debug_log, " PERTURB_KEYS = %d (%s)", 1676 PL_HASH_RAND_BITS_ENABLED, 1677 PL_HASH_RAND_BITS_ENABLED == 0 ? "NO" : PL_HASH_RAND_BITS_ENABLED == 1 ? "RANDOM" : "DETERMINISTIC"); 1678 #endif 1679 PerlIO_printf(Perl_debug_log, "\n"); 1680 } 1681 } 1682 #endif /* #if (defined(USE_HASH_SEED) ... */ 1683 1684 #ifdef __amigaos4__ 1685 { 1686 struct NameTranslationInfo nti; 1687 __translate_amiga_to_unix_path_name(&argv[0],&nti); 1688 } 1689 #endif 1690 1691 { 1692 int i; 1693 assert(argc >= 0); 1694 for(i = 0; i != argc; i++) 1695 assert(argv[i]); 1696 assert(!argv[argc]); 1697 } 1698 PL_origargc = argc; 1699 PL_origargv = argv; 1700 1701 if (PL_origalen != 0) { 1702 PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */ 1703 } 1704 else { 1705 /* Set PL_origalen be the sum of the contiguous argv[] 1706 * elements plus the size of the env in case that it is 1707 * contiguous with the argv[]. This is used in mg.c:Perl_magic_set() 1708 * as the maximum modifiable length of $0. In the worst case 1709 * the area we are able to modify is limited to the size of 1710 * the original argv[0]. (See below for 'contiguous', though.) 1711 * --jhi */ 1712 const char *s = NULL; 1713 const UV mask = ~(UV)(PTRSIZE-1); 1714 /* Do the mask check only if the args seem like aligned. */ 1715 const UV aligned = 1716 (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0])); 1717 1718 /* See if all the arguments are contiguous in memory. Note 1719 * that 'contiguous' is a loose term because some platforms 1720 * align the argv[] and the envp[]. If the arguments look 1721 * like non-aligned, assume that they are 'strictly' or 1722 * 'traditionally' contiguous. If the arguments look like 1723 * aligned, we just check that they are within aligned 1724 * PTRSIZE bytes. As long as no system has something bizarre 1725 * like the argv[] interleaved with some other data, we are 1726 * fine. (Did I just evoke Murphy's Law?) --jhi */ 1727 if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) { 1728 int i; 1729 while (*s) s++; 1730 for (i = 1; i < PL_origargc; i++) { 1731 if ((PL_origargv[i] == s + 1 1732 #ifdef OS2 1733 || PL_origargv[i] == s + 2 1734 #endif 1735 ) 1736 || 1737 (aligned && 1738 (PL_origargv[i] > s && 1739 PL_origargv[i] <= 1740 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) 1741 ) 1742 { 1743 s = PL_origargv[i]; 1744 while (*s) s++; 1745 } 1746 else 1747 break; 1748 } 1749 } 1750 1751 #ifndef PERL_USE_SAFE_PUTENV 1752 /* Can we grab env area too to be used as the area for $0? */ 1753 if (s && PL_origenviron && !PL_use_safe_putenv) { 1754 if ((PL_origenviron[0] == s + 1) 1755 || 1756 (aligned && 1757 (PL_origenviron[0] > s && 1758 PL_origenviron[0] <= 1759 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) 1760 ) 1761 { 1762 int i; 1763 #ifndef OS2 /* ENVIRON is read by the kernel too. */ 1764 s = PL_origenviron[0]; 1765 while (*s) s++; 1766 #endif 1767 my_setenv("NoNe SuCh", NULL); 1768 /* Force copy of environment. */ 1769 for (i = 1; PL_origenviron[i]; i++) { 1770 if (PL_origenviron[i] == s + 1 1771 || 1772 (aligned && 1773 (PL_origenviron[i] > s && 1774 PL_origenviron[i] <= 1775 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) 1776 ) 1777 { 1778 s = PL_origenviron[i]; 1779 while (*s) s++; 1780 } 1781 else 1782 break; 1783 } 1784 } 1785 } 1786 #endif /* !defined(PERL_USE_SAFE_PUTENV) */ 1787 1788 PL_origalen = s ? s - PL_origargv[0] + 1 : 0; 1789 } 1790 1791 if (PL_do_undump) { 1792 1793 /* Come here if running an undumped a.out. */ 1794 1795 PL_origfilename = savepv(argv[0]); 1796 PL_do_undump = FALSE; 1797 cxstack_ix = -1; /* start label stack again */ 1798 init_ids(); 1799 assert (!TAINT_get); 1800 TAINT; 1801 set_caret_X(); 1802 TAINT_NOT; 1803 init_postdump_symbols(argc,argv,env); 1804 return 0; 1805 } 1806 1807 if (PL_main_root) { 1808 op_free(PL_main_root); 1809 PL_main_root = NULL; 1810 } 1811 PL_main_start = NULL; 1812 SvREFCNT_dec(PL_main_cv); 1813 PL_main_cv = NULL; 1814 1815 time(&PL_basetime); 1816 oldscope = PL_scopestack_ix; 1817 PL_dowarn = G_WARN_OFF; 1818 1819 JMPENV_PUSH(ret); 1820 switch (ret) { 1821 case 0: 1822 parse_body(env,xsinit); 1823 if (PL_unitcheckav) { 1824 call_list(oldscope, PL_unitcheckav); 1825 } 1826 if (PL_checkav) { 1827 PERL_SET_PHASE(PERL_PHASE_CHECK); 1828 call_list(oldscope, PL_checkav); 1829 } 1830 ret = 0; 1831 break; 1832 case 1: 1833 STATUS_ALL_FAILURE; 1834 /* FALLTHROUGH */ 1835 case 2: 1836 /* my_exit() was called */ 1837 while (PL_scopestack_ix > oldscope) 1838 LEAVE; 1839 FREETMPS; 1840 SET_CURSTASH(PL_defstash); 1841 if (PL_unitcheckav) { 1842 call_list(oldscope, PL_unitcheckav); 1843 } 1844 if (PL_checkav) { 1845 PERL_SET_PHASE(PERL_PHASE_CHECK); 1846 call_list(oldscope, PL_checkav); 1847 } 1848 ret = STATUS_EXIT; 1849 if (ret == 0) { 1850 /* 1851 * At this point we should do 1852 * ret = 0x100; 1853 * to avoid [perl #2754], but that bugfix has been postponed 1854 * because of the Module::Install breakage it causes 1855 * [perl #132577]. 1856 */ 1857 } 1858 break; 1859 case 3: 1860 PerlIO_printf(Perl_error_log, "panic: top_env\n"); 1861 ret = 1; 1862 break; 1863 } 1864 JMPENV_POP; 1865 return ret; 1866 } 1867 1868 /* This needs to stay in perl.c, as perl.c is compiled with different flags for 1869 miniperl, and we need to see those flags reflected in the values here. */ 1870 1871 /* What this returns is subject to change. Use the public interface in Config. 1872 */ 1873 static void 1874 S_Internals_V(pTHX_ CV *cv) 1875 { 1876 dXSARGS; 1877 #ifdef LOCAL_PATCH_COUNT 1878 const int local_patch_count = LOCAL_PATCH_COUNT; 1879 #else 1880 const int local_patch_count = 0; 1881 #endif 1882 const int entries = 3 + local_patch_count; 1883 int i; 1884 static const char non_bincompat_options[] = 1885 # ifdef DEBUGGING 1886 " DEBUGGING" 1887 # endif 1888 # ifdef NO_MATHOMS 1889 " NO_MATHOMS" 1890 # endif 1891 # ifdef NO_HASH_SEED 1892 " NO_HASH_SEED" 1893 # endif 1894 # ifdef NO_TAINT_SUPPORT 1895 " NO_TAINT_SUPPORT" 1896 # endif 1897 # ifdef PERL_BOOL_AS_CHAR 1898 " PERL_BOOL_AS_CHAR" 1899 # endif 1900 # ifdef PERL_COPY_ON_WRITE 1901 " PERL_COPY_ON_WRITE" 1902 # endif 1903 # ifdef PERL_DISABLE_PMC 1904 " PERL_DISABLE_PMC" 1905 # endif 1906 # ifdef PERL_DONT_CREATE_GVSV 1907 " PERL_DONT_CREATE_GVSV" 1908 # endif 1909 # ifdef PERL_EXTERNAL_GLOB 1910 " PERL_EXTERNAL_GLOB" 1911 # endif 1912 # ifdef PERL_HASH_FUNC_SIPHASH 1913 " PERL_HASH_FUNC_SIPHASH" 1914 # endif 1915 # ifdef PERL_HASH_FUNC_SDBM 1916 " PERL_HASH_FUNC_SDBM" 1917 # endif 1918 # ifdef PERL_HASH_FUNC_DJB2 1919 " PERL_HASH_FUNC_DJB2" 1920 # endif 1921 # ifdef PERL_HASH_FUNC_SUPERFAST 1922 " PERL_HASH_FUNC_SUPERFAST" 1923 # endif 1924 # ifdef PERL_HASH_FUNC_MURMUR3 1925 " PERL_HASH_FUNC_MURMUR3" 1926 # endif 1927 # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME 1928 " PERL_HASH_FUNC_ONE_AT_A_TIME" 1929 # endif 1930 # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_HARD 1931 " PERL_HASH_FUNC_ONE_AT_A_TIME_HARD" 1932 # endif 1933 # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_OLD 1934 " PERL_HASH_FUNC_ONE_AT_A_TIME_OLD" 1935 # endif 1936 # ifdef PERL_IS_MINIPERL 1937 " PERL_IS_MINIPERL" 1938 # endif 1939 # ifdef PERL_MALLOC_WRAP 1940 " PERL_MALLOC_WRAP" 1941 # endif 1942 # ifdef PERL_MEM_LOG 1943 " PERL_MEM_LOG" 1944 # endif 1945 # ifdef PERL_MEM_LOG_NOIMPL 1946 " PERL_MEM_LOG_NOIMPL" 1947 # endif 1948 # ifdef PERL_OP_PARENT 1949 " PERL_OP_PARENT" 1950 # endif 1951 # ifdef PERL_PERTURB_KEYS_DETERMINISTIC 1952 " PERL_PERTURB_KEYS_DETERMINISTIC" 1953 # endif 1954 # ifdef PERL_PERTURB_KEYS_DISABLED 1955 " PERL_PERTURB_KEYS_DISABLED" 1956 # endif 1957 # ifdef PERL_PERTURB_KEYS_RANDOM 1958 " PERL_PERTURB_KEYS_RANDOM" 1959 # endif 1960 # ifdef PERL_PRESERVE_IVUV 1961 " PERL_PRESERVE_IVUV" 1962 # endif 1963 # ifdef PERL_RELOCATABLE_INCPUSH 1964 " PERL_RELOCATABLE_INCPUSH" 1965 # endif 1966 # ifdef PERL_USE_DEVEL 1967 " PERL_USE_DEVEL" 1968 # endif 1969 # ifdef PERL_USE_SAFE_PUTENV 1970 " PERL_USE_SAFE_PUTENV" 1971 # endif 1972 # ifdef SILENT_NO_TAINT_SUPPORT 1973 " SILENT_NO_TAINT_SUPPORT" 1974 # endif 1975 # ifdef UNLINK_ALL_VERSIONS 1976 " UNLINK_ALL_VERSIONS" 1977 # endif 1978 # ifdef USE_ATTRIBUTES_FOR_PERLIO 1979 " USE_ATTRIBUTES_FOR_PERLIO" 1980 # endif 1981 # ifdef USE_FAST_STDIO 1982 " USE_FAST_STDIO" 1983 # endif 1984 # ifdef USE_LOCALE 1985 " USE_LOCALE" 1986 # endif 1987 # ifdef USE_LOCALE_CTYPE 1988 " USE_LOCALE_CTYPE" 1989 # endif 1990 # ifdef WIN32_NO_REGISTRY 1991 " USE_NO_REGISTRY" 1992 # endif 1993 # ifdef USE_PERL_ATOF 1994 " USE_PERL_ATOF" 1995 # endif 1996 # ifdef USE_SITECUSTOMIZE 1997 " USE_SITECUSTOMIZE" 1998 # endif 1999 # ifdef USE_THREAD_SAFE_LOCALE 2000 " USE_THREAD_SAFE_LOCALE" 2001 # endif 2002 ; 2003 PERL_UNUSED_ARG(cv); 2004 PERL_UNUSED_VAR(items); 2005 2006 EXTEND(SP, entries); 2007 2008 PUSHs(sv_2mortal(newSVpv(PL_bincompat_options, 0))); 2009 PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options, 2010 sizeof(non_bincompat_options) - 1, SVs_TEMP)); 2011 2012 #ifndef PERL_BUILD_DATE 2013 # ifdef __DATE__ 2014 # ifdef __TIME__ 2015 # define PERL_BUILD_DATE __DATE__ " " __TIME__ 2016 # else 2017 # define PERL_BUILD_DATE __DATE__ 2018 # endif 2019 # endif 2020 #endif 2021 2022 #ifdef PERL_BUILD_DATE 2023 PUSHs(Perl_newSVpvn_flags(aTHX_ 2024 STR_WITH_LEN("Compiled at " PERL_BUILD_DATE), 2025 SVs_TEMP)); 2026 #else 2027 PUSHs(&PL_sv_undef); 2028 #endif 2029 2030 for (i = 1; i <= local_patch_count; i++) { 2031 /* This will be an undef, if PL_localpatches[i] is NULL. */ 2032 PUSHs(sv_2mortal(newSVpv(PL_localpatches[i], 0))); 2033 } 2034 2035 XSRETURN(entries); 2036 } 2037 2038 #define INCPUSH_UNSHIFT 0x01 2039 #define INCPUSH_ADD_OLD_VERS 0x02 2040 #define INCPUSH_ADD_VERSIONED_SUB_DIRS 0x04 2041 #define INCPUSH_ADD_ARCHONLY_SUB_DIRS 0x08 2042 #define INCPUSH_NOT_BASEDIR 0x10 2043 #define INCPUSH_CAN_RELOCATE 0x20 2044 #define INCPUSH_ADD_SUB_DIRS \ 2045 (INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_ADD_ARCHONLY_SUB_DIRS) 2046 2047 STATIC void * 2048 S_parse_body(pTHX_ char **env, XSINIT_t xsinit) 2049 { 2050 dVAR; 2051 PerlIO *rsfp; 2052 int argc = PL_origargc; 2053 char **argv = PL_origargv; 2054 const char *scriptname = NULL; 2055 bool dosearch = FALSE; 2056 char c; 2057 bool doextract = FALSE; 2058 const char *cddir = NULL; 2059 #ifdef USE_SITECUSTOMIZE 2060 bool minus_f = FALSE; 2061 #endif 2062 SV *linestr_sv = NULL; 2063 bool add_read_e_script = FALSE; 2064 U32 lex_start_flags = 0; 2065 2066 PERL_SET_PHASE(PERL_PHASE_START); 2067 2068 init_main_stash(); 2069 2070 { 2071 const char *s; 2072 for (argc--,argv++; argc > 0; argc--,argv++) { 2073 if (argv[0][0] != '-' || !argv[0][1]) 2074 break; 2075 s = argv[0]+1; 2076 reswitch: 2077 switch ((c = *s)) { 2078 case 'C': 2079 #ifndef PERL_STRICT_CR 2080 case '\r': 2081 #endif 2082 case ' ': 2083 case '0': 2084 case 'F': 2085 case 'a': 2086 case 'c': 2087 case 'd': 2088 case 'D': 2089 case 'h': 2090 case 'i': 2091 case 'l': 2092 case 'M': 2093 case 'm': 2094 case 'n': 2095 case 'p': 2096 case 's': 2097 case 'u': 2098 case 'U': 2099 case 'v': 2100 case 'W': 2101 case 'X': 2102 case 'w': 2103 if ((s = moreswitches(s))) 2104 goto reswitch; 2105 break; 2106 2107 case 't': 2108 #if defined(SILENT_NO_TAINT_SUPPORT) 2109 /* silently ignore */ 2110 #elif defined(NO_TAINT_SUPPORT) 2111 Perl_croak_nocontext("This perl was compiled without taint support. " 2112 "Cowardly refusing to run with -t or -T flags"); 2113 #else 2114 CHECK_MALLOC_TOO_LATE_FOR('t'); 2115 if( !TAINTING_get ) { 2116 TAINT_WARN_set(TRUE); 2117 TAINTING_set(TRUE); 2118 } 2119 #endif 2120 s++; 2121 goto reswitch; 2122 case 'T': 2123 #if defined(SILENT_NO_TAINT_SUPPORT) 2124 /* silently ignore */ 2125 #elif defined(NO_TAINT_SUPPORT) 2126 Perl_croak_nocontext("This perl was compiled without taint support. " 2127 "Cowardly refusing to run with -t or -T flags"); 2128 #else 2129 CHECK_MALLOC_TOO_LATE_FOR('T'); 2130 TAINTING_set(TRUE); 2131 TAINT_WARN_set(FALSE); 2132 #endif 2133 s++; 2134 goto reswitch; 2135 2136 case 'E': 2137 PL_minus_E = TRUE; 2138 /* FALLTHROUGH */ 2139 case 'e': 2140 forbid_setid('e', FALSE); 2141 if (!PL_e_script) { 2142 PL_e_script = newSVpvs(""); 2143 add_read_e_script = TRUE; 2144 } 2145 if (*++s) 2146 sv_catpv(PL_e_script, s); 2147 else if (argv[1]) { 2148 sv_catpv(PL_e_script, argv[1]); 2149 argc--,argv++; 2150 } 2151 else 2152 Perl_croak(aTHX_ "No code specified for -%c", c); 2153 sv_catpvs(PL_e_script, "\n"); 2154 break; 2155 2156 case 'f': 2157 #ifdef USE_SITECUSTOMIZE 2158 minus_f = TRUE; 2159 #endif 2160 s++; 2161 goto reswitch; 2162 2163 case 'I': /* -I handled both here and in moreswitches() */ 2164 forbid_setid('I', FALSE); 2165 if (!*++s && (s=argv[1]) != NULL) { 2166 argc--,argv++; 2167 } 2168 if (s && *s) { 2169 STRLEN len = strlen(s); 2170 incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS); 2171 } 2172 else 2173 Perl_croak(aTHX_ "No directory specified for -I"); 2174 break; 2175 case 'S': 2176 forbid_setid('S', FALSE); 2177 dosearch = TRUE; 2178 s++; 2179 goto reswitch; 2180 case 'V': 2181 { 2182 SV *opts_prog; 2183 2184 if (*++s != ':') { 2185 opts_prog = newSVpvs("use Config; Config::_V()"); 2186 } 2187 else { 2188 ++s; 2189 opts_prog = Perl_newSVpvf(aTHX_ 2190 "use Config; Config::config_vars(qw%c%s%c)", 2191 0, s, 0); 2192 s += strlen(s); 2193 } 2194 Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog); 2195 /* don't look for script or read stdin */ 2196 scriptname = BIT_BUCKET; 2197 goto reswitch; 2198 } 2199 case 'x': 2200 doextract = TRUE; 2201 s++; 2202 if (*s) 2203 cddir = s; 2204 break; 2205 case 0: 2206 break; 2207 case '-': 2208 if (!*++s || isSPACE(*s)) { 2209 argc--,argv++; 2210 goto switch_end; 2211 } 2212 /* catch use of gnu style long options. 2213 Both of these exit immediately. */ 2214 if (strEQ(s, "version")) 2215 minus_v(); 2216 if (strEQ(s, "help")) 2217 usage(); 2218 s--; 2219 /* FALLTHROUGH */ 2220 default: 2221 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s); 2222 } 2223 } 2224 } 2225 2226 switch_end: 2227 2228 { 2229 char *s; 2230 2231 if ( 2232 #ifndef SECURE_INTERNAL_GETENV 2233 !TAINTING_get && 2234 #endif 2235 (s = PerlEnv_getenv("PERL5OPT"))) 2236 { 2237 /* s points to static memory in getenv(), which may be overwritten at 2238 * any time; use a mortal copy instead */ 2239 s = SvPVX(sv_2mortal(newSVpv(s, 0))); 2240 2241 while (isSPACE(*s)) 2242 s++; 2243 if (*s == '-' && *(s+1) == 'T') { 2244 #if defined(SILENT_NO_TAINT_SUPPORT) 2245 /* silently ignore */ 2246 #elif defined(NO_TAINT_SUPPORT) 2247 Perl_croak_nocontext("This perl was compiled without taint support. " 2248 "Cowardly refusing to run with -t or -T flags"); 2249 #else 2250 CHECK_MALLOC_TOO_LATE_FOR('T'); 2251 TAINTING_set(TRUE); 2252 TAINT_WARN_set(FALSE); 2253 #endif 2254 } 2255 else { 2256 char *popt_copy = NULL; 2257 while (s && *s) { 2258 const char *d; 2259 while (isSPACE(*s)) 2260 s++; 2261 if (*s == '-') { 2262 s++; 2263 if (isSPACE(*s)) 2264 continue; 2265 } 2266 d = s; 2267 if (!*s) 2268 break; 2269 if (!strchr("CDIMUdmtwW", *s)) 2270 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s); 2271 while (++s && *s) { 2272 if (isSPACE(*s)) { 2273 if (!popt_copy) { 2274 popt_copy = SvPVX(sv_2mortal(newSVpv(d,0))); 2275 s = popt_copy + (s - d); 2276 d = popt_copy; 2277 } 2278 *s++ = '\0'; 2279 break; 2280 } 2281 } 2282 if (*d == 't') { 2283 #if defined(SILENT_NO_TAINT_SUPPORT) 2284 /* silently ignore */ 2285 #elif defined(NO_TAINT_SUPPORT) 2286 Perl_croak_nocontext("This perl was compiled without taint support. " 2287 "Cowardly refusing to run with -t or -T flags"); 2288 #else 2289 if( !TAINTING_get) { 2290 TAINT_WARN_set(TRUE); 2291 TAINTING_set(TRUE); 2292 } 2293 #endif 2294 } else { 2295 moreswitches(d); 2296 } 2297 } 2298 } 2299 } 2300 } 2301 2302 #ifndef NO_PERL_INTERNAL_RAND_SEED 2303 /* If we're not set[ug]id, we might have honored 2304 PERL_INTERNAL_RAND_SEED in perl_construct(). 2305 At this point command-line options have been parsed, so if 2306 we're now tainting and not set[ug]id re-seed. 2307 This could possibly be wasteful if PERL_INTERNAL_RAND_SEED is invalid, 2308 but avoids duplicating the logic from perl_construct(). 2309 */ 2310 if (TAINT_get && 2311 PerlProc_getuid() == PerlProc_geteuid() && 2312 PerlProc_getgid() == PerlProc_getegid()) { 2313 Perl_drand48_init_r(&PL_internal_random_state, seed()); 2314 } 2315 #endif 2316 2317 /* Set $^X early so that it can be used for relocatable paths in @INC */ 2318 /* and for SITELIB_EXP in USE_SITECUSTOMIZE */ 2319 assert (!TAINT_get); 2320 TAINT; 2321 set_caret_X(); 2322 TAINT_NOT; 2323 2324 #if defined(USE_SITECUSTOMIZE) 2325 if (!minus_f) { 2326 /* The games with local $! are to avoid setting errno if there is no 2327 sitecustomize script. "q%c...%c", 0, ..., 0 becomes "q\0...\0", 2328 ie a q() operator with a NUL byte as a the delimiter. This avoids 2329 problems with pathnames containing (say) ' */ 2330 # ifdef PERL_IS_MINIPERL 2331 AV *const inc = GvAV(PL_incgv); 2332 SV **const inc0 = inc ? av_fetch(inc, 0, FALSE) : NULL; 2333 2334 if (inc0) { 2335 /* if lib/buildcustomize.pl exists, it should not fail. If it does, 2336 it should be reported immediately as a build failure. */ 2337 (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, 2338 Perl_newSVpvf(aTHX_ 2339 "BEGIN { my $f = q%c%s%" SVf "/buildcustomize.pl%c; " 2340 "do {local $!; -f $f }" 2341 " and do $f || die $@ || qq '$f: $!' }", 2342 0, (TAINTING_get ? "./" : ""), SVfARG(*inc0), 0)); 2343 } 2344 # else 2345 /* SITELIB_EXP is a function call on Win32. */ 2346 const char *const raw_sitelib = SITELIB_EXP; 2347 if (raw_sitelib) { 2348 /* process .../.. if PERL_RELOCATABLE_INC is defined */ 2349 SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib), 2350 INCPUSH_CAN_RELOCATE); 2351 const char *const sitelib = SvPVX(sitelib_sv); 2352 (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, 2353 Perl_newSVpvf(aTHX_ 2354 "BEGIN { do {local $!; -f q%c%s/sitecustomize.pl%c} && do q%c%s/sitecustomize.pl%c }", 2355 0, SVfARG(sitelib), 0, 2356 0, SVfARG(sitelib), 0)); 2357 assert (SvREFCNT(sitelib_sv) == 1); 2358 SvREFCNT_dec(sitelib_sv); 2359 } 2360 # endif 2361 } 2362 #endif 2363 2364 if (!scriptname) 2365 scriptname = argv[0]; 2366 if (PL_e_script) { 2367 argc++,argv--; 2368 scriptname = BIT_BUCKET; /* don't look for script or read stdin */ 2369 } 2370 else if (scriptname == NULL) { 2371 #ifdef MSDOS 2372 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) ) 2373 moreswitches("h"); 2374 #endif 2375 scriptname = "-"; 2376 } 2377 2378 assert (!TAINT_get); 2379 init_perllib(); 2380 2381 { 2382 bool suidscript = FALSE; 2383 2384 rsfp = open_script(scriptname, dosearch, &suidscript); 2385 if (!rsfp) { 2386 rsfp = PerlIO_stdin(); 2387 lex_start_flags = LEX_DONT_CLOSE_RSFP; 2388 } 2389 2390 validate_suid(rsfp); 2391 2392 #ifndef PERL_MICRO 2393 # if defined(SIGCHLD) || defined(SIGCLD) 2394 { 2395 # ifndef SIGCHLD 2396 # define SIGCHLD SIGCLD 2397 # endif 2398 Sighandler_t sigstate = rsignal_state(SIGCHLD); 2399 if (sigstate == (Sighandler_t) SIG_IGN) { 2400 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), 2401 "Can't ignore signal CHLD, forcing to default"); 2402 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL); 2403 } 2404 } 2405 # endif 2406 #endif 2407 2408 if (doextract) { 2409 2410 /* This will croak if suidscript is true, as -x cannot be used with 2411 setuid scripts. */ 2412 forbid_setid('x', suidscript); 2413 /* Hence you can't get here if suidscript is true */ 2414 2415 linestr_sv = newSV_type(SVt_PV); 2416 lex_start_flags |= LEX_START_COPIED; 2417 find_beginning(linestr_sv, rsfp); 2418 if (cddir && PerlDir_chdir( (char *)cddir ) < 0) 2419 Perl_croak(aTHX_ "Can't chdir to %s",cddir); 2420 } 2421 } 2422 2423 PL_main_cv = PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV)); 2424 CvUNIQUE_on(PL_compcv); 2425 2426 CvPADLIST_set(PL_compcv, pad_new(0)); 2427 2428 PL_isarev = newHV(); 2429 2430 boot_core_PerlIO(); 2431 boot_core_UNIVERSAL(); 2432 boot_core_mro(); 2433 newXS("Internals::V", S_Internals_V, __FILE__); 2434 2435 if (xsinit) 2436 (*xsinit)(aTHX); /* in case linked C routines want magical variables */ 2437 #ifndef PERL_MICRO 2438 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(SYMBIAN) 2439 init_os_extras(); 2440 #endif 2441 #endif 2442 2443 #ifdef USE_SOCKS 2444 # ifdef HAS_SOCKS5_INIT 2445 socks5_init(argv[0]); 2446 # else 2447 SOCKSinit(argv[0]); 2448 # endif 2449 #endif 2450 2451 init_predump_symbols(); 2452 /* init_postdump_symbols not currently designed to be called */ 2453 /* more than once (ENV isn't cleared first, for example) */ 2454 /* But running with -u leaves %ENV & @ARGV undefined! XXX */ 2455 if (!PL_do_undump) 2456 init_postdump_symbols(argc,argv,env); 2457 2458 /* PL_unicode is turned on by -C, or by $ENV{PERL_UNICODE}, 2459 * or explicitly in some platforms. 2460 * PL_utf8locale is conditionally turned on by 2461 * locale.c:Perl_init_i18nl10n() if the environment 2462 * look like the user wants to use UTF-8. */ 2463 #if defined(__SYMBIAN32__) 2464 PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */ 2465 #endif 2466 # ifndef PERL_IS_MINIPERL 2467 if (PL_unicode) { 2468 /* Requires init_predump_symbols(). */ 2469 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { 2470 IO* io; 2471 PerlIO* fp; 2472 SV* sv; 2473 2474 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR 2475 * and the default open disciplines. */ 2476 if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) && 2477 PL_stdingv && (io = GvIO(PL_stdingv)) && 2478 (fp = IoIFP(io))) 2479 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); 2480 if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) && 2481 PL_defoutgv && (io = GvIO(PL_defoutgv)) && 2482 (fp = IoOFP(io))) 2483 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); 2484 if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) && 2485 PL_stderrgv && (io = GvIO(PL_stderrgv)) && 2486 (fp = IoOFP(io))) 2487 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); 2488 if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) && 2489 (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL, 2490 SVt_PV)))) { 2491 U32 in = PL_unicode & PERL_UNICODE_IN_FLAG; 2492 U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG; 2493 if (in) { 2494 if (out) 2495 sv_setpvs(sv, ":utf8\0:utf8"); 2496 else 2497 sv_setpvs(sv, ":utf8\0"); 2498 } 2499 else if (out) 2500 sv_setpvs(sv, "\0:utf8"); 2501 SvSETMAGIC(sv); 2502 } 2503 } 2504 } 2505 #endif 2506 2507 { 2508 const char *s; 2509 if ((s = PerlEnv_getenv("PERL_SIGNALS"))) { 2510 if (strEQ(s, "unsafe")) 2511 PL_signals |= PERL_SIGNALS_UNSAFE_FLAG; 2512 else if (strEQ(s, "safe")) 2513 PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG; 2514 else 2515 Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s); 2516 } 2517 } 2518 2519 2520 lex_start(linestr_sv, rsfp, lex_start_flags); 2521 SvREFCNT_dec(linestr_sv); 2522 2523 PL_subname = newSVpvs("main"); 2524 2525 if (add_read_e_script) 2526 filter_add(read_e_script, NULL); 2527 2528 /* now parse the script */ 2529 2530 SETERRNO(0,SS_NORMAL); 2531 if (yyparse(GRAMPROG) || PL_parser->error_count) { 2532 abort_execution("", PL_origfilename); 2533 } 2534 CopLINE_set(PL_curcop, 0); 2535 SET_CURSTASH(PL_defstash); 2536 if (PL_e_script) { 2537 SvREFCNT_dec(PL_e_script); 2538 PL_e_script = NULL; 2539 } 2540 2541 if (PL_do_undump) 2542 my_unexec(); 2543 2544 if (isWARN_ONCE) { 2545 SAVECOPFILE(PL_curcop); 2546 SAVECOPLINE(PL_curcop); 2547 gv_check(PL_defstash); 2548 } 2549 2550 LEAVE; 2551 FREETMPS; 2552 2553 #ifdef MYMALLOC 2554 { 2555 const char *s; 2556 UV uv; 2557 s = PerlEnv_getenv("PERL_DEBUG_MSTATS"); 2558 if (s && grok_atoUV(s, &uv, NULL) && uv >= 2) 2559 dump_mstats("after compilation:"); 2560 } 2561 #endif 2562 2563 ENTER; 2564 PL_restartjmpenv = NULL; 2565 PL_restartop = 0; 2566 return NULL; 2567 } 2568 2569 /* 2570 =for apidoc Am|int|perl_run|PerlInterpreter *my_perl 2571 2572 Tells a Perl interpreter to run its main program. See L<perlembed> 2573 for a tutorial. 2574 2575 C<my_perl> points to the Perl interpreter. It must have been previously 2576 created through the use of L</perl_alloc> and L</perl_construct>, and 2577 initialised through L</perl_parse>. This function should not be called 2578 if L</perl_parse> returned a non-zero value, indicating a failure in 2579 initialisation or compilation. 2580 2581 This function executes code in C<INIT> blocks, and then executes the 2582 main program. The code to be executed is that established by the prior 2583 call to L</perl_parse>. If the interpreter's C<PL_exit_flags> word 2584 does not have the C<PERL_EXIT_DESTRUCT_END> flag set, then this function 2585 will also execute code in C<END> blocks. If it is desired to make any 2586 further use of the interpreter after calling this function, then C<END> 2587 blocks should be postponed to L</perl_destruct> time by setting that flag. 2588 2589 Returns an integer of slightly tricky interpretation. The correct use 2590 of the return value is as a truth value indicating whether the program 2591 terminated non-locally. If zero is returned, this indicates that 2592 the program ran to completion, and it is safe to make other use of the 2593 interpreter (provided that the C<PERL_EXIT_DESTRUCT_END> flag was set as 2594 described above). If a non-zero value is returned, this indicates that 2595 the interpreter wants to terminate early. The interpreter should not be 2596 just abandoned because of this desire to terminate; the caller should 2597 proceed to shut the interpreter down cleanly with L</perl_destruct> 2598 and free it with L</perl_free>. 2599 2600 For historical reasons, the non-zero return value also attempts to 2601 be a suitable value to pass to the C library function C<exit> (or to 2602 return from C<main>), to serve as an exit code indicating the nature of 2603 the way the program terminated. However, this isn't portable, due to 2604 differing exit code conventions. An attempt is made to return an exit 2605 code of the type required by the host operating system, but because 2606 it is constrained to be non-zero, it is not necessarily possible to 2607 indicate every type of exit. It is only reliable on Unix, where a zero 2608 exit code can be augmented with a set bit that will be ignored. In any 2609 case, this function is not the correct place to acquire an exit code: 2610 one should get that from L</perl_destruct>. 2611 2612 =cut 2613 */ 2614 2615 int 2616 perl_run(pTHXx) 2617 { 2618 I32 oldscope; 2619 int ret = 0; 2620 dJMPENV; 2621 2622 PERL_ARGS_ASSERT_PERL_RUN; 2623 #ifndef MULTIPLICITY 2624 PERL_UNUSED_ARG(my_perl); 2625 #endif 2626 2627 oldscope = PL_scopestack_ix; 2628 #ifdef VMS 2629 VMSISH_HUSHED = 0; 2630 #endif 2631 2632 JMPENV_PUSH(ret); 2633 switch (ret) { 2634 case 1: 2635 cxstack_ix = -1; /* start context stack again */ 2636 goto redo_body; 2637 case 0: /* normal completion */ 2638 redo_body: 2639 run_body(oldscope); 2640 /* FALLTHROUGH */ 2641 case 2: /* my_exit() */ 2642 while (PL_scopestack_ix > oldscope) 2643 LEAVE; 2644 FREETMPS; 2645 SET_CURSTASH(PL_defstash); 2646 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) && 2647 PL_endav && !PL_minus_c) { 2648 PERL_SET_PHASE(PERL_PHASE_END); 2649 call_list(oldscope, PL_endav); 2650 } 2651 #ifdef MYMALLOC 2652 if (PerlEnv_getenv("PERL_DEBUG_MSTATS")) 2653 dump_mstats("after execution: "); 2654 #endif 2655 ret = STATUS_EXIT; 2656 break; 2657 case 3: 2658 if (PL_restartop) { 2659 POPSTACK_TO(PL_mainstack); 2660 goto redo_body; 2661 } 2662 PerlIO_printf(Perl_error_log, "panic: restartop in perl_run\n"); 2663 FREETMPS; 2664 ret = 1; 2665 break; 2666 } 2667 2668 JMPENV_POP; 2669 return ret; 2670 } 2671 2672 STATIC void 2673 S_run_body(pTHX_ I32 oldscope) 2674 { 2675 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support (0x%x).\n", 2676 PL_sawampersand ? "Enabling" : "Omitting", 2677 (unsigned int)(PL_sawampersand))); 2678 2679 if (!PL_restartop) { 2680 #ifdef DEBUGGING 2681 if (DEBUG_x_TEST || DEBUG_B_TEST) 2682 dump_all_perl(!DEBUG_B_TEST); 2683 if (!DEBUG_q_TEST) 2684 PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n")); 2685 #endif 2686 2687 if (PL_minus_c) { 2688 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename); 2689 my_exit(0); 2690 } 2691 if (PERLDB_SINGLE && PL_DBsingle) 2692 PL_DBsingle_iv = 1; 2693 if (PL_initav) { 2694 PERL_SET_PHASE(PERL_PHASE_INIT); 2695 call_list(oldscope, PL_initav); 2696 } 2697 #ifdef PERL_DEBUG_READONLY_OPS 2698 if (PL_main_root && PL_main_root->op_slabbed) 2699 Slab_to_ro(OpSLAB(PL_main_root)); 2700 #endif 2701 } 2702 2703 /* do it */ 2704 2705 PERL_SET_PHASE(PERL_PHASE_RUN); 2706 2707 if (PL_restartop) { 2708 PL_restartjmpenv = NULL; 2709 PL_op = PL_restartop; 2710 PL_restartop = 0; 2711 CALLRUNOPS(aTHX); 2712 } 2713 else if (PL_main_start) { 2714 CvDEPTH(PL_main_cv) = 1; 2715 PL_op = PL_main_start; 2716 CALLRUNOPS(aTHX); 2717 } 2718 my_exit(0); 2719 NOT_REACHED; /* NOTREACHED */ 2720 } 2721 2722 /* 2723 =head1 SV Manipulation Functions 2724 2725 =for apidoc p||get_sv 2726 2727 Returns the SV of the specified Perl scalar. C<flags> are passed to 2728 C<gv_fetchpv>. If C<GV_ADD> is set and the 2729 Perl variable does not exist then it will be created. If C<flags> is zero 2730 and the variable does not exist then NULL is returned. 2731 2732 =cut 2733 */ 2734 2735 SV* 2736 Perl_get_sv(pTHX_ const char *name, I32 flags) 2737 { 2738 GV *gv; 2739 2740 PERL_ARGS_ASSERT_GET_SV; 2741 2742 gv = gv_fetchpv(name, flags, SVt_PV); 2743 if (gv) 2744 return GvSV(gv); 2745 return NULL; 2746 } 2747 2748 /* 2749 =head1 Array Manipulation Functions 2750 2751 =for apidoc p||get_av 2752 2753 Returns the AV of the specified Perl global or package array with the given 2754 name (so it won't work on lexical variables). C<flags> are passed 2755 to C<gv_fetchpv>. If C<GV_ADD> is set and the 2756 Perl variable does not exist then it will be created. If C<flags> is zero 2757 and the variable does not exist then NULL is returned. 2758 2759 Perl equivalent: C<@{"$name"}>. 2760 2761 =cut 2762 */ 2763 2764 AV* 2765 Perl_get_av(pTHX_ const char *name, I32 flags) 2766 { 2767 GV* const gv = gv_fetchpv(name, flags, SVt_PVAV); 2768 2769 PERL_ARGS_ASSERT_GET_AV; 2770 2771 if (flags) 2772 return GvAVn(gv); 2773 if (gv) 2774 return GvAV(gv); 2775 return NULL; 2776 } 2777 2778 /* 2779 =head1 Hash Manipulation Functions 2780 2781 =for apidoc p||get_hv 2782 2783 Returns the HV of the specified Perl hash. C<flags> are passed to 2784 C<gv_fetchpv>. If C<GV_ADD> is set and the 2785 Perl variable does not exist then it will be created. If C<flags> is zero 2786 and the variable does not exist then C<NULL> is returned. 2787 2788 =cut 2789 */ 2790 2791 HV* 2792 Perl_get_hv(pTHX_ const char *name, I32 flags) 2793 { 2794 GV* const gv = gv_fetchpv(name, flags, SVt_PVHV); 2795 2796 PERL_ARGS_ASSERT_GET_HV; 2797 2798 if (flags) 2799 return GvHVn(gv); 2800 if (gv) 2801 return GvHV(gv); 2802 return NULL; 2803 } 2804 2805 /* 2806 =head1 CV Manipulation Functions 2807 2808 =for apidoc p||get_cvn_flags 2809 2810 Returns the CV of the specified Perl subroutine. C<flags> are passed to 2811 C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not 2812 exist then it will be declared (which has the same effect as saying 2813 C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist 2814 then NULL is returned. 2815 2816 =for apidoc p||get_cv 2817 2818 Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>. 2819 2820 =cut 2821 */ 2822 2823 CV* 2824 Perl_get_cvn_flags(pTHX_ const char *name, STRLEN len, I32 flags) 2825 { 2826 GV* const gv = gv_fetchpvn_flags(name, len, flags, SVt_PVCV); 2827 2828 PERL_ARGS_ASSERT_GET_CVN_FLAGS; 2829 2830 if (gv && UNLIKELY(SvROK(gv)) && SvTYPE(SvRV((SV *)gv)) == SVt_PVCV) 2831 return (CV*)SvRV((SV *)gv); 2832 2833 /* XXX this is probably not what they think they're getting. 2834 * It has the same effect as "sub name;", i.e. just a forward 2835 * declaration! */ 2836 if ((flags & ~GV_NOADD_MASK) && !GvCVu(gv)) { 2837 return newSTUB(gv,0); 2838 } 2839 if (gv) 2840 return GvCVu(gv); 2841 return NULL; 2842 } 2843 2844 /* Nothing in core calls this now, but we can't replace it with a macro and 2845 move it to mathoms.c as a macro would evaluate name twice. */ 2846 CV* 2847 Perl_get_cv(pTHX_ const char *name, I32 flags) 2848 { 2849 PERL_ARGS_ASSERT_GET_CV; 2850 2851 return get_cvn_flags(name, strlen(name), flags); 2852 } 2853 2854 /* Be sure to refetch the stack pointer after calling these routines. */ 2855 2856 /* 2857 2858 =head1 Callback Functions 2859 2860 =for apidoc p||call_argv 2861 2862 Performs a callback to the specified named and package-scoped Perl subroutine 2863 with C<argv> (a C<NULL>-terminated array of strings) as arguments. See 2864 L<perlcall>. 2865 2866 Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>. 2867 2868 =cut 2869 */ 2870 2871 I32 2872 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, char **argv) 2873 2874 /* See G_* flags in cop.h */ 2875 /* null terminated arg list */ 2876 { 2877 dSP; 2878 2879 PERL_ARGS_ASSERT_CALL_ARGV; 2880 2881 PUSHMARK(SP); 2882 while (*argv) { 2883 mXPUSHs(newSVpv(*argv,0)); 2884 argv++; 2885 } 2886 PUTBACK; 2887 return call_pv(sub_name, flags); 2888 } 2889 2890 /* 2891 =for apidoc p||call_pv 2892 2893 Performs a callback to the specified Perl sub. See L<perlcall>. 2894 2895 =cut 2896 */ 2897 2898 I32 2899 Perl_call_pv(pTHX_ const char *sub_name, I32 flags) 2900 /* name of the subroutine */ 2901 /* See G_* flags in cop.h */ 2902 { 2903 PERL_ARGS_ASSERT_CALL_PV; 2904 2905 return call_sv(MUTABLE_SV(get_cv(sub_name, GV_ADD)), flags); 2906 } 2907 2908 /* 2909 =for apidoc p||call_method 2910 2911 Performs a callback to the specified Perl method. The blessed object must 2912 be on the stack. See L<perlcall>. 2913 2914 =cut 2915 */ 2916 2917 I32 2918 Perl_call_method(pTHX_ const char *methname, I32 flags) 2919 /* name of the subroutine */ 2920 /* See G_* flags in cop.h */ 2921 { 2922 STRLEN len; 2923 SV* sv; 2924 PERL_ARGS_ASSERT_CALL_METHOD; 2925 2926 len = strlen(methname); 2927 sv = flags & G_METHOD_NAMED 2928 ? sv_2mortal(newSVpvn_share(methname, len,0)) 2929 : newSVpvn_flags(methname, len, SVs_TEMP); 2930 2931 return call_sv(sv, flags | G_METHOD); 2932 } 2933 2934 /* May be called with any of a CV, a GV, or an SV containing the name. */ 2935 /* 2936 =for apidoc p||call_sv 2937 2938 Performs a callback to the Perl sub specified by the SV. 2939 2940 If neither the C<G_METHOD> nor C<G_METHOD_NAMED> flag is supplied, the 2941 SV may be any of a CV, a GV, a reference to a CV, a reference to a GV 2942 or C<SvPV(sv)> will be used as the name of the sub to call. 2943 2944 If the C<G_METHOD> flag is supplied, the SV may be a reference to a CV or 2945 C<SvPV(sv)> will be used as the name of the method to call. 2946 2947 If the C<G_METHOD_NAMED> flag is supplied, C<SvPV(sv)> will be used as 2948 the name of the method to call. 2949 2950 Some other values are treated specially for internal use and should 2951 not be depended on. 2952 2953 See L<perlcall>. 2954 2955 =cut 2956 */ 2957 2958 I32 2959 Perl_call_sv(pTHX_ SV *sv, volatile I32 flags) 2960 /* See G_* flags in cop.h */ 2961 { 2962 dVAR; 2963 LOGOP myop; /* fake syntax tree node */ 2964 METHOP method_op; 2965 I32 oldmark; 2966 volatile I32 retval = 0; 2967 bool oldcatch = CATCH_GET; 2968 int ret; 2969 OP* const oldop = PL_op; 2970 dJMPENV; 2971 2972 PERL_ARGS_ASSERT_CALL_SV; 2973 2974 if (flags & G_DISCARD) { 2975 ENTER; 2976 SAVETMPS; 2977 } 2978 if (!(flags & G_WANT)) { 2979 /* Backwards compatibility - as G_SCALAR was 0, it could be omitted. 2980 */ 2981 flags |= G_SCALAR; 2982 } 2983 2984 Zero(&myop, 1, LOGOP); 2985 if (!(flags & G_NOARGS)) 2986 myop.op_flags |= OPf_STACKED; 2987 myop.op_flags |= OP_GIMME_REVERSE(flags); 2988 SAVEOP(); 2989 PL_op = (OP*)&myop; 2990 2991 if (!(flags & G_METHOD_NAMED)) { 2992 dSP; 2993 EXTEND(SP, 1); 2994 PUSHs(sv); 2995 PUTBACK; 2996 } 2997 oldmark = TOPMARK; 2998 2999 if (PERLDB_SUB && PL_curstash != PL_debstash 3000 /* Handle first BEGIN of -d. */ 3001 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub))) 3002 /* Try harder, since this may have been a sighandler, thus 3003 * curstash may be meaningless. */ 3004 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash) 3005 && !(flags & G_NODEBUG)) 3006 myop.op_private |= OPpENTERSUB_DB; 3007 3008 if (flags & (G_METHOD|G_METHOD_NAMED)) { 3009 Zero(&method_op, 1, METHOP); 3010 method_op.op_next = (OP*)&myop; 3011 PL_op = (OP*)&method_op; 3012 if ( flags & G_METHOD_NAMED ) { 3013 method_op.op_ppaddr = PL_ppaddr[OP_METHOD_NAMED]; 3014 method_op.op_type = OP_METHOD_NAMED; 3015 method_op.op_u.op_meth_sv = sv; 3016 } else { 3017 method_op.op_ppaddr = PL_ppaddr[OP_METHOD]; 3018 method_op.op_type = OP_METHOD; 3019 } 3020 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB]; 3021 myop.op_type = OP_ENTERSUB; 3022 } 3023 3024 if (!(flags & G_EVAL)) { 3025 CATCH_SET(TRUE); 3026 CALL_BODY_SUB((OP*)&myop); 3027 retval = PL_stack_sp - (PL_stack_base + oldmark); 3028 CATCH_SET(oldcatch); 3029 } 3030 else { 3031 I32 old_cxix; 3032 myop.op_other = (OP*)&myop; 3033 (void)POPMARK; 3034 old_cxix = cxstack_ix; 3035 create_eval_scope(NULL, flags|G_FAKINGEVAL); 3036 INCMARK; 3037 3038 JMPENV_PUSH(ret); 3039 3040 switch (ret) { 3041 case 0: 3042 redo_body: 3043 CALL_BODY_SUB((OP*)&myop); 3044 retval = PL_stack_sp - (PL_stack_base + oldmark); 3045 if (!(flags & G_KEEPERR)) { 3046 CLEAR_ERRSV(); 3047 } 3048 break; 3049 case 1: 3050 STATUS_ALL_FAILURE; 3051 /* FALLTHROUGH */ 3052 case 2: 3053 /* my_exit() was called */ 3054 SET_CURSTASH(PL_defstash); 3055 FREETMPS; 3056 JMPENV_POP; 3057 my_exit_jump(); 3058 NOT_REACHED; /* NOTREACHED */ 3059 case 3: 3060 if (PL_restartop) { 3061 PL_restartjmpenv = NULL; 3062 PL_op = PL_restartop; 3063 PL_restartop = 0; 3064 goto redo_body; 3065 } 3066 PL_stack_sp = PL_stack_base + oldmark; 3067 if ((flags & G_WANT) == G_ARRAY) 3068 retval = 0; 3069 else { 3070 retval = 1; 3071 *++PL_stack_sp = &PL_sv_undef; 3072 } 3073 break; 3074 } 3075 3076 /* if we croaked, depending on how we croaked the eval scope 3077 * may or may not have already been popped */ 3078 if (cxstack_ix > old_cxix) { 3079 assert(cxstack_ix == old_cxix + 1); 3080 assert(CxTYPE(CX_CUR()) == CXt_EVAL); 3081 delete_eval_scope(); 3082 } 3083 JMPENV_POP; 3084 } 3085 3086 if (flags & G_DISCARD) { 3087 PL_stack_sp = PL_stack_base + oldmark; 3088 retval = 0; 3089 FREETMPS; 3090 LEAVE; 3091 } 3092 PL_op = oldop; 3093 return retval; 3094 } 3095 3096 /* Eval a string. The G_EVAL flag is always assumed. */ 3097 3098 /* 3099 =for apidoc p||eval_sv 3100 3101 Tells Perl to C<eval> the string in the SV. It supports the same flags 3102 as C<call_sv>, with the obvious exception of C<G_EVAL>. See L<perlcall>. 3103 3104 =cut 3105 */ 3106 3107 I32 3108 Perl_eval_sv(pTHX_ SV *sv, I32 flags) 3109 3110 /* See G_* flags in cop.h */ 3111 { 3112 dVAR; 3113 UNOP myop; /* fake syntax tree node */ 3114 volatile I32 oldmark; 3115 volatile I32 retval = 0; 3116 int ret; 3117 OP* const oldop = PL_op; 3118 dJMPENV; 3119 3120 PERL_ARGS_ASSERT_EVAL_SV; 3121 3122 if (flags & G_DISCARD) { 3123 ENTER; 3124 SAVETMPS; 3125 } 3126 3127 SAVEOP(); 3128 PL_op = (OP*)&myop; 3129 Zero(&myop, 1, UNOP); 3130 { 3131 dSP; 3132 oldmark = SP - PL_stack_base; 3133 EXTEND(SP, 1); 3134 PUSHs(sv); 3135 PUTBACK; 3136 } 3137 3138 if (!(flags & G_NOARGS)) 3139 myop.op_flags = OPf_STACKED; 3140 myop.op_type = OP_ENTEREVAL; 3141 myop.op_flags |= OP_GIMME_REVERSE(flags); 3142 if (flags & G_KEEPERR) 3143 myop.op_flags |= OPf_SPECIAL; 3144 3145 if (flags & G_RE_REPARSING) 3146 myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING); 3147 3148 /* fail now; otherwise we could fail after the JMPENV_PUSH but 3149 * before a cx_pusheval(), which corrupts the stack after a croak */ 3150 TAINT_PROPER("eval_sv()"); 3151 3152 JMPENV_PUSH(ret); 3153 switch (ret) { 3154 case 0: 3155 redo_body: 3156 if (PL_op == (OP*)(&myop)) { 3157 PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX); 3158 if (!PL_op) 3159 goto fail; /* failed in compilation */ 3160 } 3161 CALLRUNOPS(aTHX); 3162 retval = PL_stack_sp - (PL_stack_base + oldmark); 3163 if (!(flags & G_KEEPERR)) { 3164 CLEAR_ERRSV(); 3165 } 3166 break; 3167 case 1: 3168 STATUS_ALL_FAILURE; 3169 /* FALLTHROUGH */ 3170 case 2: 3171 /* my_exit() was called */ 3172 SET_CURSTASH(PL_defstash); 3173 FREETMPS; 3174 JMPENV_POP; 3175 my_exit_jump(); 3176 NOT_REACHED; /* NOTREACHED */ 3177 case 3: 3178 if (PL_restartop) { 3179 PL_restartjmpenv = NULL; 3180 PL_op = PL_restartop; 3181 PL_restartop = 0; 3182 goto redo_body; 3183 } 3184 fail: 3185 PL_stack_sp = PL_stack_base + oldmark; 3186 if ((flags & G_WANT) == G_ARRAY) 3187 retval = 0; 3188 else { 3189 retval = 1; 3190 *++PL_stack_sp = &PL_sv_undef; 3191 } 3192 break; 3193 } 3194 3195 JMPENV_POP; 3196 if (flags & G_DISCARD) { 3197 PL_stack_sp = PL_stack_base + oldmark; 3198 retval = 0; 3199 FREETMPS; 3200 LEAVE; 3201 } 3202 PL_op = oldop; 3203 return retval; 3204 } 3205 3206 /* 3207 =for apidoc p||eval_pv 3208 3209 Tells Perl to C<eval> the given string in scalar context and return an SV* result. 3210 3211 =cut 3212 */ 3213 3214 SV* 3215 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error) 3216 { 3217 SV* sv = newSVpv(p, 0); 3218 3219 PERL_ARGS_ASSERT_EVAL_PV; 3220 3221 eval_sv(sv, G_SCALAR); 3222 SvREFCNT_dec(sv); 3223 3224 { 3225 dSP; 3226 sv = POPs; 3227 PUTBACK; 3228 } 3229 3230 /* just check empty string or undef? */ 3231 if (croak_on_error) { 3232 SV * const errsv = ERRSV; 3233 if(SvTRUE_NN(errsv)) 3234 /* replace with croak_sv? */ 3235 Perl_croak_nocontext("%s", SvPV_nolen_const(errsv)); 3236 } 3237 3238 return sv; 3239 } 3240 3241 /* Require a module. */ 3242 3243 /* 3244 =head1 Embedding Functions 3245 3246 =for apidoc p||require_pv 3247 3248 Tells Perl to C<require> the file named by the string argument. It is 3249 analogous to the Perl code C<eval "require '$file'">. It's even 3250 implemented that way; consider using load_module instead. 3251 3252 =cut */ 3253 3254 void 3255 Perl_require_pv(pTHX_ const char *pv) 3256 { 3257 dSP; 3258 SV* sv; 3259 3260 PERL_ARGS_ASSERT_REQUIRE_PV; 3261 3262 PUSHSTACKi(PERLSI_REQUIRE); 3263 sv = Perl_newSVpvf(aTHX_ "require q%c%s%c", 0, pv, 0); 3264 eval_sv(sv_2mortal(sv), G_DISCARD); 3265 POPSTACK; 3266 } 3267 3268 STATIC void 3269 S_usage(pTHX) /* XXX move this out into a module ? */ 3270 { 3271 /* This message really ought to be max 23 lines. 3272 * Removed -h because the user already knows that option. Others? */ 3273 3274 /* Grouped as 6 lines per C string literal, to keep under the ANSI C 89 3275 minimum of 509 character string literals. */ 3276 static const char * const usage_msg[] = { 3277 " -0[octal] specify record separator (\\0, if no argument)\n" 3278 " -a autosplit mode with -n or -p (splits $_ into @F)\n" 3279 " -C[number/list] enables the listed Unicode features\n" 3280 " -c check syntax only (runs BEGIN and CHECK blocks)\n" 3281 " -d[:debugger] run program under debugger\n" 3282 " -D[number/list] set debugging flags (argument is a bit mask or alphabets)\n", 3283 " -e program one line of program (several -e's allowed, omit programfile)\n" 3284 " -E program like -e, but enables all optional features\n" 3285 " -f don't do $sitelib/sitecustomize.pl at startup\n" 3286 " -F/pattern/ split() pattern for -a switch (//'s are optional)\n" 3287 " -i[extension] edit <> files in place (makes backup if extension supplied)\n" 3288 " -Idirectory specify @INC/#include directory (several -I's allowed)\n", 3289 " -l[octal] enable line ending processing, specifies line terminator\n" 3290 " -[mM][-]module execute \"use/no module...\" before executing program\n" 3291 " -n assume \"while (<>) { ... }\" loop around program\n" 3292 " -p assume loop like -n but print line also, like sed\n" 3293 " -s enable rudimentary parsing for switches after programfile\n" 3294 " -S look for programfile using PATH environment variable\n", 3295 " -t enable tainting warnings\n" 3296 " -T enable tainting checks\n" 3297 " -u dump core after parsing program\n" 3298 " -U allow unsafe operations\n" 3299 " -v print version, patchlevel and license\n" 3300 " -V[:variable] print configuration summary (or a single Config.pm variable)\n", 3301 " -w enable many useful warnings\n" 3302 " -W enable all warnings\n" 3303 " -x[directory] ignore text before #!perl line (optionally cd to directory)\n" 3304 " -X disable all warnings\n" 3305 " \n" 3306 "Run 'perldoc perl' for more help with Perl.\n\n", 3307 NULL 3308 }; 3309 const char * const *p = usage_msg; 3310 PerlIO *out = PerlIO_stdout(); 3311 3312 PerlIO_printf(out, 3313 "\nUsage: %s [switches] [--] [programfile] [arguments]\n", 3314 PL_origargv[0]); 3315 while (*p) 3316 PerlIO_puts(out, *p++); 3317 my_exit(0); 3318 } 3319 3320 /* convert a string of -D options (or digits) into an int. 3321 * sets *s to point to the char after the options */ 3322 3323 #ifdef DEBUGGING 3324 int 3325 Perl_get_debug_opts(pTHX_ const char **s, bool givehelp) 3326 { 3327 static const char * const usage_msgd[] = { 3328 " Debugging flag values: (see also -d)\n" 3329 " p Tokenizing and parsing (with v, displays parse stack)\n" 3330 " s Stack snapshots (with v, displays all stacks)\n" 3331 " l Context (loop) stack processing\n" 3332 " t Trace execution\n" 3333 " o Method and overloading resolution\n", 3334 " c String/numeric conversions\n" 3335 " P Print profiling info, source file input state\n" 3336 " m Memory and SV allocation\n" 3337 " f Format processing\n" 3338 " r Regular expression parsing and execution\n" 3339 " x Syntax tree dump\n", 3340 " u Tainting checks\n" 3341 " H Hash dump -- usurps values()\n" 3342 " X Scratchpad allocation\n" 3343 " D Cleaning up\n" 3344 " S Op slab allocation\n" 3345 " T Tokenising\n" 3346 " R Include reference counts of dumped variables (eg when using -Ds)\n", 3347 " J Do not s,t,P-debug (Jump over) opcodes within package DB\n" 3348 " v Verbose: use in conjunction with other flags\n" 3349 " C Copy On Write\n" 3350 " A Consistency checks on internal structures\n" 3351 " q quiet - currently only suppresses the 'EXECUTING' message\n" 3352 " M trace smart match resolution\n" 3353 " B dump suBroutine definitions, including special Blocks like BEGIN\n", 3354 " L trace some locale setting information--for Perl core development\n", 3355 " i trace PerlIO layer processing\n", 3356 NULL 3357 }; 3358 UV uv = 0; 3359 3360 PERL_ARGS_ASSERT_GET_DEBUG_OPTS; 3361 3362 if (isALPHA(**s)) { 3363 /* if adding extra options, remember to update DEBUG_MASK */ 3364 static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMBLi"; 3365 3366 for (; isWORDCHAR(**s); (*s)++) { 3367 const char * const d = strchr(debopts,**s); 3368 if (d) 3369 uv |= 1 << (d - debopts); 3370 else if (ckWARN_d(WARN_DEBUGGING)) 3371 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), 3372 "invalid option -D%c, use -D'' to see choices\n", **s); 3373 } 3374 } 3375 else if (isDIGIT(**s)) { 3376 const char* e = *s + strlen(*s); 3377 if (grok_atoUV(*s, &uv, &e)) 3378 *s = e; 3379 for (; isWORDCHAR(**s); (*s)++) ; 3380 } 3381 else if (givehelp) { 3382 const char *const *p = usage_msgd; 3383 while (*p) PerlIO_puts(PerlIO_stdout(), *p++); 3384 } 3385 return (int)uv; /* ignore any UV->int conversion loss */ 3386 } 3387 #endif 3388 3389 /* This routine handles any switches that can be given during run */ 3390 3391 const char * 3392 Perl_moreswitches(pTHX_ const char *s) 3393 { 3394 dVAR; 3395 UV rschar; 3396 const char option = *s; /* used to remember option in -m/-M code */ 3397 3398 PERL_ARGS_ASSERT_MORESWITCHES; 3399 3400 switch (*s) { 3401 case '0': 3402 { 3403 I32 flags = 0; 3404 STRLEN numlen; 3405 3406 SvREFCNT_dec(PL_rs); 3407 if (s[1] == 'x' && s[2]) { 3408 const char *e = s+=2; 3409 U8 *tmps; 3410 3411 while (*e) 3412 e++; 3413 numlen = e - s; 3414 flags = PERL_SCAN_SILENT_ILLDIGIT; 3415 rschar = (U32)grok_hex(s, &numlen, &flags, NULL); 3416 if (s + numlen < e) { 3417 rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */ 3418 numlen = 0; 3419 s--; 3420 } 3421 PL_rs = newSVpvs(""); 3422 tmps = (U8*) SvGROW(PL_rs, (STRLEN)(UVCHR_SKIP(rschar) + 1)); 3423 uvchr_to_utf8(tmps, rschar); 3424 SvCUR_set(PL_rs, UVCHR_SKIP(rschar)); 3425 SvUTF8_on(PL_rs); 3426 } 3427 else { 3428 numlen = 4; 3429 rschar = (U32)grok_oct(s, &numlen, &flags, NULL); 3430 if (rschar & ~((U8)~0)) 3431 PL_rs = &PL_sv_undef; 3432 else if (!rschar && numlen >= 2) 3433 PL_rs = newSVpvs(""); 3434 else { 3435 char ch = (char)rschar; 3436 PL_rs = newSVpvn(&ch, 1); 3437 } 3438 } 3439 sv_setsv(get_sv("/", GV_ADD), PL_rs); 3440 return s + numlen; 3441 } 3442 case 'C': 3443 s++; 3444 PL_unicode = parse_unicode_opts( (const char **)&s ); 3445 if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG) 3446 PL_utf8cache = -1; 3447 return s; 3448 case 'F': 3449 PL_minus_a = TRUE; 3450 PL_minus_F = TRUE; 3451 PL_minus_n = TRUE; 3452 PL_splitstr = ++s; 3453 while (*s && !isSPACE(*s)) ++s; 3454 PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr); 3455 return s; 3456 case 'a': 3457 PL_minus_a = TRUE; 3458 PL_minus_n = TRUE; 3459 s++; 3460 return s; 3461 case 'c': 3462 PL_minus_c = TRUE; 3463 s++; 3464 return s; 3465 case 'd': 3466 forbid_setid('d', FALSE); 3467 s++; 3468 3469 /* -dt indicates to the debugger that threads will be used */ 3470 if (*s == 't' && !isWORDCHAR(s[1])) { 3471 ++s; 3472 my_setenv("PERL5DB_THREADED", "1"); 3473 } 3474 3475 /* The following permits -d:Mod to accepts arguments following an = 3476 in the fashion that -MSome::Mod does. */ 3477 if (*s == ':' || *s == '=') { 3478 const char *start; 3479 const char *end; 3480 SV *sv; 3481 3482 if (*++s == '-') { 3483 ++s; 3484 sv = newSVpvs("no Devel::"); 3485 } else { 3486 sv = newSVpvs("use Devel::"); 3487 } 3488 3489 start = s; 3490 end = s + strlen(s); 3491 3492 /* We now allow -d:Module=Foo,Bar and -d:-Module */ 3493 while(isWORDCHAR(*s) || *s==':') ++s; 3494 if (*s != '=') 3495 sv_catpvn(sv, start, end - start); 3496 else { 3497 sv_catpvn(sv, start, s-start); 3498 /* Don't use NUL as q// delimiter here, this string goes in the 3499 * environment. */ 3500 Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s); 3501 } 3502 s = end; 3503 my_setenv("PERL5DB", SvPV_nolen_const(sv)); 3504 SvREFCNT_dec(sv); 3505 } 3506 if (!PL_perldb) { 3507 PL_perldb = PERLDB_ALL; 3508 init_debugger(); 3509 } 3510 return s; 3511 case 'D': 3512 { 3513 #ifdef DEBUGGING 3514 forbid_setid('D', FALSE); 3515 s++; 3516 PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG; 3517 #else /* !DEBUGGING */ 3518 if (ckWARN_d(WARN_DEBUGGING)) 3519 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), 3520 "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n"); 3521 for (s++; isWORDCHAR(*s); s++) ; 3522 #endif 3523 return s; 3524 NOT_REACHED; /* NOTREACHED */ 3525 } 3526 case 'h': 3527 usage(); 3528 NOT_REACHED; /* NOTREACHED */ 3529 3530 case 'i': 3531 Safefree(PL_inplace); 3532 { 3533 const char * const start = ++s; 3534 while (*s && !isSPACE(*s)) 3535 ++s; 3536 3537 PL_inplace = savepvn(start, s - start); 3538 } 3539 return s; 3540 case 'I': /* -I handled both here and in parse_body() */ 3541 forbid_setid('I', FALSE); 3542 ++s; 3543 while (*s && isSPACE(*s)) 3544 ++s; 3545 if (*s) { 3546 const char *e, *p; 3547 p = s; 3548 /* ignore trailing spaces (possibly followed by other switches) */ 3549 do { 3550 for (e = p; *e && !isSPACE(*e); e++) ; 3551 p = e; 3552 while (isSPACE(*p)) 3553 p++; 3554 } while (*p && *p != '-'); 3555 incpush(s, e-s, 3556 INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT); 3557 s = p; 3558 if (*s == '-') 3559 s++; 3560 } 3561 else 3562 Perl_croak(aTHX_ "No directory specified for -I"); 3563 return s; 3564 case 'l': 3565 PL_minus_l = TRUE; 3566 s++; 3567 if (PL_ors_sv) { 3568 SvREFCNT_dec(PL_ors_sv); 3569 PL_ors_sv = NULL; 3570 } 3571 if (isDIGIT(*s)) { 3572 I32 flags = 0; 3573 STRLEN numlen; 3574 PL_ors_sv = newSVpvs("\n"); 3575 numlen = 3 + (*s == '0'); 3576 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL); 3577 s += numlen; 3578 } 3579 else { 3580 if (RsPARA(PL_rs)) { 3581 PL_ors_sv = newSVpvs("\n\n"); 3582 } 3583 else { 3584 PL_ors_sv = newSVsv(PL_rs); 3585 } 3586 } 3587 return s; 3588 case 'M': 3589 forbid_setid('M', FALSE); /* XXX ? */ 3590 /* FALLTHROUGH */ 3591 case 'm': 3592 forbid_setid('m', FALSE); /* XXX ? */ 3593 if (*++s) { 3594 const char *start; 3595 const char *end; 3596 SV *sv; 3597 const char *use = "use "; 3598 bool colon = FALSE; 3599 /* -M-foo == 'no foo' */ 3600 /* Leading space on " no " is deliberate, to make both 3601 possibilities the same length. */ 3602 if (*s == '-') { use = " no "; ++s; } 3603 sv = newSVpvn(use,4); 3604 start = s; 3605 /* We allow -M'Module qw(Foo Bar)' */ 3606 while(isWORDCHAR(*s) || *s==':') { 3607 if( *s++ == ':' ) { 3608 if( *s == ':' ) 3609 s++; 3610 else 3611 colon = TRUE; 3612 } 3613 } 3614 if (s == start) 3615 Perl_croak(aTHX_ "Module name required with -%c option", 3616 option); 3617 if (colon) 3618 Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: " 3619 "contains single ':'", 3620 (int)(s - start), start, option); 3621 end = s + strlen(s); 3622 if (*s != '=') { 3623 sv_catpvn(sv, start, end - start); 3624 if (option == 'm') { 3625 if (*s != '\0') 3626 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s); 3627 sv_catpvs( sv, " ()"); 3628 } 3629 } else { 3630 sv_catpvn(sv, start, s-start); 3631 /* Use NUL as q''-delimiter. */ 3632 sv_catpvs(sv, " split(/,/,q\0"); 3633 ++s; 3634 sv_catpvn(sv, s, end - s); 3635 sv_catpvs(sv, "\0)"); 3636 } 3637 s = end; 3638 Perl_av_create_and_push(aTHX_ &PL_preambleav, sv); 3639 } 3640 else 3641 Perl_croak(aTHX_ "Missing argument to -%c", option); 3642 return s; 3643 case 'n': 3644 PL_minus_n = TRUE; 3645 s++; 3646 return s; 3647 case 'p': 3648 PL_minus_p = TRUE; 3649 s++; 3650 return s; 3651 case 's': 3652 forbid_setid('s', FALSE); 3653 PL_doswitches = TRUE; 3654 s++; 3655 return s; 3656 case 't': 3657 case 'T': 3658 #if defined(SILENT_NO_TAINT_SUPPORT) 3659 /* silently ignore */ 3660 #elif defined(NO_TAINT_SUPPORT) 3661 Perl_croak_nocontext("This perl was compiled without taint support. " 3662 "Cowardly refusing to run with -t or -T flags"); 3663 #else 3664 if (!TAINTING_get) 3665 TOO_LATE_FOR(*s); 3666 #endif 3667 s++; 3668 return s; 3669 case 'u': 3670 PL_do_undump = TRUE; 3671 s++; 3672 return s; 3673 case 'U': 3674 PL_unsafe = TRUE; 3675 s++; 3676 return s; 3677 case 'v': 3678 minus_v(); 3679 case 'w': 3680 if (! (PL_dowarn & G_WARN_ALL_MASK)) { 3681 PL_dowarn |= G_WARN_ON; 3682 } 3683 s++; 3684 return s; 3685 case 'W': 3686 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON; 3687 if (!specialWARN(PL_compiling.cop_warnings)) 3688 PerlMemShared_free(PL_compiling.cop_warnings); 3689 PL_compiling.cop_warnings = pWARN_ALL ; 3690 s++; 3691 return s; 3692 case 'X': 3693 PL_dowarn = G_WARN_ALL_OFF; 3694 if (!specialWARN(PL_compiling.cop_warnings)) 3695 PerlMemShared_free(PL_compiling.cop_warnings); 3696 PL_compiling.cop_warnings = pWARN_NONE ; 3697 s++; 3698 return s; 3699 case '*': 3700 case ' ': 3701 while( *s == ' ' ) 3702 ++s; 3703 if (s[0] == '-') /* Additional switches on #! line. */ 3704 return s+1; 3705 break; 3706 case '-': 3707 case 0: 3708 #if defined(WIN32) || !defined(PERL_STRICT_CR) 3709 case '\r': 3710 #endif 3711 case '\n': 3712 case '\t': 3713 break; 3714 #ifdef ALTERNATE_SHEBANG 3715 case 'S': /* OS/2 needs -S on "extproc" line. */ 3716 break; 3717 #endif 3718 case 'e': case 'f': case 'x': case 'E': 3719 #ifndef ALTERNATE_SHEBANG 3720 case 'S': 3721 #endif 3722 case 'V': 3723 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s); 3724 default: 3725 Perl_croak(aTHX_ 3726 "Unrecognized switch: -%.1s (-h will show valid options)",s 3727 ); 3728 } 3729 return NULL; 3730 } 3731 3732 3733 STATIC void 3734 S_minus_v(pTHX) 3735 { 3736 PerlIO * PIO_stdout; 3737 { 3738 const char * const level_str = "v" PERL_VERSION_STRING; 3739 const STRLEN level_len = sizeof("v" PERL_VERSION_STRING)-1; 3740 #ifdef PERL_PATCHNUM 3741 SV* level; 3742 # ifdef PERL_GIT_UNCOMMITTED_CHANGES 3743 static const char num [] = PERL_PATCHNUM "*"; 3744 # else 3745 static const char num [] = PERL_PATCHNUM; 3746 # endif 3747 { 3748 const STRLEN num_len = sizeof(num)-1; 3749 /* A very advanced compiler would fold away the strnEQ 3750 and this whole conditional, but most (all?) won't do it. 3751 SV level could also be replaced by with preprocessor 3752 catenation. 3753 */ 3754 if (num_len >= level_len && strnEQ(num,level_str,level_len)) { 3755 /* per 46807d8e80, PERL_PATCHNUM is outside of the control 3756 of the interp so it might contain format characters 3757 */ 3758 level = newSVpvn(num, num_len); 3759 } else { 3760 level = Perl_newSVpvf_nocontext("%s (%s)", level_str, num); 3761 } 3762 } 3763 #else 3764 SV* level = newSVpvn(level_str, level_len); 3765 #endif /* #ifdef PERL_PATCHNUM */ 3766 PIO_stdout = PerlIO_stdout(); 3767 PerlIO_printf(PIO_stdout, 3768 "\nThis is perl " STRINGIFY(PERL_REVISION) 3769 ", version " STRINGIFY(PERL_VERSION) 3770 ", subversion " STRINGIFY(PERL_SUBVERSION) 3771 " (%" SVf ") built for " ARCHNAME, SVfARG(level) 3772 ); 3773 SvREFCNT_dec_NN(level); 3774 } 3775 #if defined(LOCAL_PATCH_COUNT) 3776 if (LOCAL_PATCH_COUNT > 0) 3777 PerlIO_printf(PIO_stdout, 3778 "\n(with %d registered patch%s, " 3779 "see perl -V for more detail)", 3780 LOCAL_PATCH_COUNT, 3781 (LOCAL_PATCH_COUNT!=1) ? "es" : ""); 3782 #endif 3783 3784 PerlIO_printf(PIO_stdout, 3785 "\n\nCopyright 1987-2019, Larry Wall\n"); 3786 #ifdef MSDOS 3787 PerlIO_printf(PIO_stdout, 3788 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n"); 3789 #endif 3790 #ifdef DJGPP 3791 PerlIO_printf(PIO_stdout, 3792 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n" 3793 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n"); 3794 #endif 3795 #ifdef OS2 3796 PerlIO_printf(PIO_stdout, 3797 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n" 3798 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n"); 3799 #endif 3800 #ifdef OEMVS 3801 PerlIO_printf(PIO_stdout, 3802 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n"); 3803 #endif 3804 #ifdef __VOS__ 3805 PerlIO_printf(PIO_stdout, 3806 "Stratus OpenVOS port by Paul.Green@stratus.com, 1997-2013\n"); 3807 #endif 3808 #ifdef POSIX_BC 3809 PerlIO_printf(PIO_stdout, 3810 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n"); 3811 #endif 3812 #ifdef UNDER_CE 3813 PerlIO_printf(PIO_stdout, 3814 "WINCE port by Rainer Keuchel, 2001-2002\n" 3815 "Built on " __DATE__ " " __TIME__ "\n\n"); 3816 wce_hitreturn(); 3817 #endif 3818 #ifdef __SYMBIAN32__ 3819 PerlIO_printf(PIO_stdout, 3820 "Symbian port by Nokia, 2004-2005\n"); 3821 #endif 3822 #ifdef BINARY_BUILD_NOTICE 3823 BINARY_BUILD_NOTICE; 3824 #endif 3825 PerlIO_printf(PIO_stdout, 3826 "\n\ 3827 Perl may be copied only under the terms of either the Artistic License or the\n\ 3828 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\ 3829 Complete documentation for Perl, including FAQ lists, should be found on\n\ 3830 this system using \"man perl\" or \"perldoc perl\". If you have access to the\n\ 3831 Internet, point your browser at http://www.perl.org/, the Perl Home Page.\n\n"); 3832 my_exit(0); 3833 } 3834 3835 /* compliments of Tom Christiansen */ 3836 3837 /* unexec() can be found in the Gnu emacs distribution */ 3838 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */ 3839 3840 #ifdef VMS 3841 #include <lib$routines.h> 3842 #endif 3843 3844 void 3845 Perl_my_unexec(pTHX) 3846 { 3847 #ifdef UNEXEC 3848 SV * prog = newSVpv(BIN_EXP, 0); 3849 SV * file = newSVpv(PL_origfilename, 0); 3850 int status = 1; 3851 extern int etext; 3852 3853 sv_catpvs(prog, "/perl"); 3854 sv_catpvs(file, ".perldump"); 3855 3856 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0); 3857 /* unexec prints msg to stderr in case of failure */ 3858 PerlProc_exit(status); 3859 #else 3860 PERL_UNUSED_CONTEXT; 3861 # ifdef VMS 3862 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */ 3863 # elif defined(WIN32) || defined(__CYGWIN__) 3864 Perl_croak_nocontext("dump is not supported"); 3865 # else 3866 ABORT(); /* for use with undump */ 3867 # endif 3868 #endif 3869 } 3870 3871 /* initialize curinterp */ 3872 STATIC void 3873 S_init_interp(pTHX) 3874 { 3875 #ifdef MULTIPLICITY 3876 # define PERLVAR(prefix,var,type) 3877 # define PERLVARA(prefix,var,n,type) 3878 # if defined(PERL_IMPLICIT_CONTEXT) 3879 # define PERLVARI(prefix,var,type,init) aTHX->prefix##var = init; 3880 # define PERLVARIC(prefix,var,type,init) aTHX->prefix##var = init; 3881 # else 3882 # define PERLVARI(prefix,var,type,init) PERL_GET_INTERP->var = init; 3883 # define PERLVARIC(prefix,var,type,init) PERL_GET_INTERP->var = init; 3884 # endif 3885 # include "intrpvar.h" 3886 # undef PERLVAR 3887 # undef PERLVARA 3888 # undef PERLVARI 3889 # undef PERLVARIC 3890 #else 3891 # define PERLVAR(prefix,var,type) 3892 # define PERLVARA(prefix,var,n,type) 3893 # define PERLVARI(prefix,var,type,init) PL_##var = init; 3894 # define PERLVARIC(prefix,var,type,init) PL_##var = init; 3895 # include "intrpvar.h" 3896 # undef PERLVAR 3897 # undef PERLVARA 3898 # undef PERLVARI 3899 # undef PERLVARIC 3900 #endif 3901 3902 } 3903 3904 STATIC void 3905 S_init_main_stash(pTHX) 3906 { 3907 GV *gv; 3908 HV *hv = newHV(); 3909 3910 PL_curstash = PL_defstash = (HV *)SvREFCNT_inc_simple_NN(hv); 3911 /* We know that the string "main" will be in the global shared string 3912 table, so it's a small saving to use it rather than allocate another 3913 8 bytes. */ 3914 PL_curstname = newSVpvs_share("main"); 3915 gv = gv_fetchpvs("main::", GV_ADD|GV_NOTQUAL, SVt_PVHV); 3916 /* If we hadn't caused another reference to "main" to be in the shared 3917 string table above, then it would be worth reordering these two, 3918 because otherwise all we do is delete "main" from it as a consequence 3919 of the SvREFCNT_dec, only to add it again with hv_name_set */ 3920 SvREFCNT_dec(GvHV(gv)); 3921 hv_name_sets(PL_defstash, "main", 0); 3922 GvHV(gv) = MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash)); 3923 SvREADONLY_on(gv); 3924 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL, 3925 SVt_PVAV))); 3926 SvREFCNT_inc_simple_void(PL_incgv); /* Don't allow it to be freed */ 3927 GvMULTI_on(PL_incgv); 3928 PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */ 3929 SvREFCNT_inc_simple_void(PL_hintgv); 3930 GvMULTI_on(PL_hintgv); 3931 PL_defgv = gv_fetchpvs("_", GV_ADD|GV_NOTQUAL, SVt_PVAV); 3932 SvREFCNT_inc_simple_void(PL_defgv); 3933 PL_errgv = gv_fetchpvs("@", GV_ADD|GV_NOTQUAL, SVt_PV); 3934 SvREFCNT_inc_simple_void(PL_errgv); 3935 GvMULTI_on(PL_errgv); 3936 PL_replgv = gv_fetchpvs("\022", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^R */ 3937 SvREFCNT_inc_simple_void(PL_replgv); 3938 GvMULTI_on(PL_replgv); 3939 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */ 3940 #ifdef PERL_DONT_CREATE_GVSV 3941 (void)gv_SVadd(PL_errgv); 3942 #endif 3943 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */ 3944 CLEAR_ERRSV(); 3945 CopSTASH_set(&PL_compiling, PL_defstash); 3946 PL_debstash = GvHV(gv_fetchpvs("DB::", GV_ADDMULTI, SVt_PVHV)); 3947 PL_globalstash = GvHV(gv_fetchpvs("CORE::GLOBAL::", GV_ADDMULTI, 3948 SVt_PVHV)); 3949 /* We must init $/ before switches are processed. */ 3950 sv_setpvs(get_sv("/", GV_ADD), "\n"); 3951 } 3952 3953 STATIC PerlIO * 3954 S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript) 3955 { 3956 int fdscript = -1; 3957 PerlIO *rsfp = NULL; 3958 Stat_t tmpstatbuf; 3959 int fd; 3960 3961 PERL_ARGS_ASSERT_OPEN_SCRIPT; 3962 3963 if (PL_e_script) { 3964 PL_origfilename = savepvs("-e"); 3965 } 3966 else { 3967 const char *s; 3968 UV uv; 3969 /* if find_script() returns, it returns a malloc()-ed value */ 3970 scriptname = PL_origfilename = find_script(scriptname, dosearch, NULL, 1); 3971 s = scriptname + strlen(scriptname); 3972 3973 if (strBEGINs(scriptname, "/dev/fd/") 3974 && isDIGIT(scriptname[8]) 3975 && grok_atoUV(scriptname + 8, &uv, &s) 3976 && uv <= PERL_INT_MAX 3977 ) { 3978 fdscript = (int)uv; 3979 if (*s) { 3980 /* PSz 18 Feb 04 3981 * Tell apart "normal" usage of fdscript, e.g. 3982 * with bash on FreeBSD: 3983 * perl <( echo '#!perl -DA'; echo 'print "$0\n"') 3984 * from usage in suidperl. 3985 * Does any "normal" usage leave garbage after the number??? 3986 * Is it a mistake to use a similar /dev/fd/ construct for 3987 * suidperl? 3988 */ 3989 *suidscript = TRUE; 3990 /* PSz 20 Feb 04 3991 * Be supersafe and do some sanity-checks. 3992 * Still, can we be sure we got the right thing? 3993 */ 3994 if (*s != '/') { 3995 Perl_croak(aTHX_ "Wrong syntax (suid) fd script name \"%s\"\n", s); 3996 } 3997 if (! *(s+1)) { 3998 Perl_croak(aTHX_ "Missing (suid) fd script name\n"); 3999 } 4000 scriptname = savepv(s + 1); 4001 Safefree(PL_origfilename); 4002 PL_origfilename = (char *)scriptname; 4003 } 4004 } 4005 } 4006 4007 CopFILE_free(PL_curcop); 4008 CopFILE_set(PL_curcop, PL_origfilename); 4009 if (*PL_origfilename == '-' && PL_origfilename[1] == '\0') 4010 scriptname = (char *)""; 4011 if (fdscript >= 0) { 4012 rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE); 4013 } 4014 else if (!*scriptname) { 4015 forbid_setid(0, *suidscript); 4016 return NULL; 4017 } 4018 else { 4019 #ifdef FAKE_BIT_BUCKET 4020 /* This hack allows one not to have /dev/null (or BIT_BUCKET as it 4021 * is called) and still have the "-e" work. (Believe it or not, 4022 * a /dev/null is required for the "-e" to work because source 4023 * filter magic is used to implement it. ) This is *not* a general 4024 * replacement for a /dev/null. What we do here is create a temp 4025 * file (an empty file), open up that as the script, and then 4026 * immediately close and unlink it. Close enough for jazz. */ 4027 #define FAKE_BIT_BUCKET_PREFIX "/tmp/perlnull-" 4028 #define FAKE_BIT_BUCKET_SUFFIX "XXXXXXXX" 4029 #define FAKE_BIT_BUCKET_TEMPLATE FAKE_BIT_BUCKET_PREFIX FAKE_BIT_BUCKET_SUFFIX 4030 char tmpname[sizeof(FAKE_BIT_BUCKET_TEMPLATE)] = { 4031 FAKE_BIT_BUCKET_TEMPLATE 4032 }; 4033 const char * const err = "Failed to create a fake bit bucket"; 4034 if (strEQ(scriptname, BIT_BUCKET)) { 4035 int tmpfd = Perl_my_mkstemp_cloexec(tmpname); 4036 if (tmpfd > -1) { 4037 scriptname = tmpname; 4038 close(tmpfd); 4039 } else 4040 Perl_croak(aTHX_ err); 4041 } 4042 #endif 4043 rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE); 4044 #ifdef FAKE_BIT_BUCKET 4045 if ( strBEGINs(scriptname, FAKE_BIT_BUCKET_PREFIX) 4046 && strlen(scriptname) == sizeof(tmpname) - 1) 4047 { 4048 unlink(scriptname); 4049 } 4050 scriptname = BIT_BUCKET; 4051 #endif 4052 } 4053 if (!rsfp) { 4054 /* PSz 16 Sep 03 Keep neat error message */ 4055 if (PL_e_script) 4056 Perl_croak(aTHX_ "Can't open " BIT_BUCKET ": %s\n", Strerror(errno)); 4057 else 4058 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n", 4059 CopFILE(PL_curcop), Strerror(errno)); 4060 } 4061 fd = PerlIO_fileno(rsfp); 4062 4063 if (fd < 0 || 4064 (PerlLIO_fstat(fd, &tmpstatbuf) >= 0 4065 && S_ISDIR(tmpstatbuf.st_mode))) 4066 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n", 4067 CopFILE(PL_curcop), 4068 Strerror(EISDIR)); 4069 4070 return rsfp; 4071 } 4072 4073 /* In the days of suidperl, we refused to execute a setuid script stored on 4074 * a filesystem mounted nosuid and/or noexec. This meant that we probed for the 4075 * existence of the appropriate filesystem-statting function, and behaved 4076 * accordingly. But even though suidperl is long gone, we must still include 4077 * those probes for the benefit of modules like Filesys::Df, which expect the 4078 * results of those probes to be stored in %Config; see RT#126368. So mention 4079 * the relevant cpp symbols here, to ensure that metaconfig will include their 4080 * probes in the generated Configure: 4081 * 4082 * I_SYSSTATVFS HAS_FSTATVFS 4083 * I_SYSMOUNT 4084 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT 4085 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT 4086 */ 4087 4088 4089 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW 4090 /* Don't even need this function. */ 4091 #else 4092 STATIC void 4093 S_validate_suid(pTHX_ PerlIO *rsfp) 4094 { 4095 const Uid_t my_uid = PerlProc_getuid(); 4096 const Uid_t my_euid = PerlProc_geteuid(); 4097 const Gid_t my_gid = PerlProc_getgid(); 4098 const Gid_t my_egid = PerlProc_getegid(); 4099 4100 PERL_ARGS_ASSERT_VALIDATE_SUID; 4101 4102 if (my_euid != my_uid || my_egid != my_gid) { /* (suidperl doesn't exist, in fact) */ 4103 dVAR; 4104 int fd = PerlIO_fileno(rsfp); 4105 Stat_t statbuf; 4106 if (fd < 0 || PerlLIO_fstat(fd, &statbuf) < 0) { /* may be either wrapped or real suid */ 4107 Perl_croak_nocontext( "Illegal suidscript"); 4108 } 4109 if ((my_euid != my_uid && my_euid == statbuf.st_uid && statbuf.st_mode & S_ISUID) 4110 || 4111 (my_egid != my_gid && my_egid == statbuf.st_gid && statbuf.st_mode & S_ISGID) 4112 ) 4113 if (!PL_do_undump) 4114 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\ 4115 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n"); 4116 /* not set-id, must be wrapped */ 4117 } 4118 } 4119 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */ 4120 4121 STATIC void 4122 S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp) 4123 { 4124 const char *s; 4125 const char *s2; 4126 4127 PERL_ARGS_ASSERT_FIND_BEGINNING; 4128 4129 /* skip forward in input to the real script? */ 4130 4131 do { 4132 if ((s = sv_gets(linestr_sv, rsfp, 0)) == NULL) 4133 Perl_croak(aTHX_ "No Perl script found in input\n"); 4134 s2 = s; 4135 } while (!(*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL"))))); 4136 PerlIO_ungetc(rsfp, '\n'); /* to keep line count right */ 4137 while (*s && !(isSPACE (*s) || *s == '#')) s++; 4138 s2 = s; 4139 while (*s == ' ' || *s == '\t') s++; 4140 if (*s++ == '-') { 4141 while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.' 4142 || s2[-1] == '_') s2--; 4143 if (strBEGINs(s2-4,"perl")) 4144 while ((s = moreswitches(s))) 4145 ; 4146 } 4147 } 4148 4149 4150 STATIC void 4151 S_init_ids(pTHX) 4152 { 4153 /* no need to do anything here any more if we don't 4154 * do tainting. */ 4155 #ifndef NO_TAINT_SUPPORT 4156 const Uid_t my_uid = PerlProc_getuid(); 4157 const Uid_t my_euid = PerlProc_geteuid(); 4158 const Gid_t my_gid = PerlProc_getgid(); 4159 const Gid_t my_egid = PerlProc_getegid(); 4160 4161 PERL_UNUSED_CONTEXT; 4162 4163 /* Should not happen: */ 4164 CHECK_MALLOC_TAINT(my_uid && (my_euid != my_uid || my_egid != my_gid)); 4165 TAINTING_set( TAINTING_get | (my_uid && (my_euid != my_uid || my_egid != my_gid)) ); 4166 #endif 4167 /* BUG */ 4168 /* PSz 27 Feb 04 4169 * Should go by suidscript, not uid!=euid: why disallow 4170 * system("ls") in scripts run from setuid things? 4171 * Or, is this run before we check arguments and set suidscript? 4172 * What about SETUID_SCRIPTS_ARE_SECURE_NOW: could we use fdscript then? 4173 * (We never have suidscript, can we be sure to have fdscript?) 4174 * Or must then go by UID checks? See comments in forbid_setid also. 4175 */ 4176 } 4177 4178 /* This is used very early in the lifetime of the program, 4179 * before even the options are parsed, so PL_tainting has 4180 * not been initialized properly. */ 4181 bool 4182 Perl_doing_taint(int argc, char *argv[], char *envp[]) 4183 { 4184 #ifndef PERL_IMPLICIT_SYS 4185 /* If we have PERL_IMPLICIT_SYS we can't call getuid() et alia 4186 * before we have an interpreter-- and the whole point of this 4187 * function is to be called at such an early stage. If you are on 4188 * a system with PERL_IMPLICIT_SYS but you do have a concept of 4189 * "tainted because running with altered effective ids', you'll 4190 * have to add your own checks somewhere in here. The two most 4191 * known samples of 'implicitness' are Win32 and NetWare, neither 4192 * of which has much of concept of 'uids'. */ 4193 Uid_t uid = PerlProc_getuid(); 4194 Uid_t euid = PerlProc_geteuid(); 4195 Gid_t gid = PerlProc_getgid(); 4196 Gid_t egid = PerlProc_getegid(); 4197 (void)envp; 4198 4199 #ifdef VMS 4200 uid |= gid << 16; 4201 euid |= egid << 16; 4202 #endif 4203 if (uid && (euid != uid || egid != gid)) 4204 return 1; 4205 #endif /* !PERL_IMPLICIT_SYS */ 4206 /* This is a really primitive check; environment gets ignored only 4207 * if -T are the first chars together; otherwise one gets 4208 * "Too late" message. */ 4209 if ( argc > 1 && argv[1][0] == '-' 4210 && isALPHA_FOLD_EQ(argv[1][1], 't')) 4211 return 1; 4212 return 0; 4213 } 4214 4215 /* Passing the flag as a single char rather than a string is a slight space 4216 optimisation. The only message that isn't /^-.$/ is 4217 "program input from stdin", which is substituted in place of '\0', which 4218 could never be a command line flag. */ 4219 STATIC void 4220 S_forbid_setid(pTHX_ const char flag, const bool suidscript) /* g */ 4221 { 4222 char string[3] = "-x"; 4223 const char *message = "program input from stdin"; 4224 4225 PERL_UNUSED_CONTEXT; 4226 if (flag) { 4227 string[1] = flag; 4228 message = string; 4229 } 4230 4231 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW 4232 if (PerlProc_getuid() != PerlProc_geteuid()) 4233 Perl_croak(aTHX_ "No %s allowed while running setuid", message); 4234 if (PerlProc_getgid() != PerlProc_getegid()) 4235 Perl_croak(aTHX_ "No %s allowed while running setgid", message); 4236 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */ 4237 if (suidscript) 4238 Perl_croak(aTHX_ "No %s allowed with (suid) fdscript", message); 4239 } 4240 4241 void 4242 Perl_init_dbargs(pTHX) 4243 { 4244 AV *const args = PL_dbargs = GvAV(gv_AVadd((gv_fetchpvs("DB::args", 4245 GV_ADDMULTI, 4246 SVt_PVAV)))); 4247 4248 if (AvREAL(args)) { 4249 /* Someone has already created it. 4250 It might have entries, and if we just turn off AvREAL(), they will 4251 "leak" until global destruction. */ 4252 av_clear(args); 4253 if (SvTIED_mg((const SV *)args, PERL_MAGIC_tied)) 4254 Perl_croak(aTHX_ "Cannot set tied @DB::args"); 4255 } 4256 AvREIFY_only(PL_dbargs); 4257 } 4258 4259 void 4260 Perl_init_debugger(pTHX) 4261 { 4262 HV * const ostash = PL_curstash; 4263 MAGIC *mg; 4264 4265 PL_curstash = (HV *)SvREFCNT_inc_simple(PL_debstash); 4266 4267 Perl_init_dbargs(aTHX); 4268 PL_DBgv = MUTABLE_GV( 4269 SvREFCNT_inc(gv_fetchpvs("DB::DB", GV_ADDMULTI, SVt_PVGV)) 4270 ); 4271 PL_DBline = MUTABLE_GV( 4272 SvREFCNT_inc(gv_fetchpvs("DB::dbline", GV_ADDMULTI, SVt_PVAV)) 4273 ); 4274 PL_DBsub = MUTABLE_GV(SvREFCNT_inc( 4275 gv_HVadd(gv_fetchpvs("DB::sub", GV_ADDMULTI, SVt_PVHV)) 4276 )); 4277 PL_DBsingle = GvSV((gv_fetchpvs("DB::single", GV_ADDMULTI, SVt_PV))); 4278 if (!SvIOK(PL_DBsingle)) 4279 sv_setiv(PL_DBsingle, 0); 4280 mg = sv_magicext(PL_DBsingle, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); 4281 mg->mg_private = DBVARMG_SINGLE; 4282 SvSETMAGIC(PL_DBsingle); 4283 4284 PL_DBtrace = GvSV((gv_fetchpvs("DB::trace", GV_ADDMULTI, SVt_PV))); 4285 if (!SvIOK(PL_DBtrace)) 4286 sv_setiv(PL_DBtrace, 0); 4287 mg = sv_magicext(PL_DBtrace, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); 4288 mg->mg_private = DBVARMG_TRACE; 4289 SvSETMAGIC(PL_DBtrace); 4290 4291 PL_DBsignal = GvSV((gv_fetchpvs("DB::signal", GV_ADDMULTI, SVt_PV))); 4292 if (!SvIOK(PL_DBsignal)) 4293 sv_setiv(PL_DBsignal, 0); 4294 mg = sv_magicext(PL_DBsignal, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); 4295 mg->mg_private = DBVARMG_SIGNAL; 4296 SvSETMAGIC(PL_DBsignal); 4297 4298 SvREFCNT_dec(PL_curstash); 4299 PL_curstash = ostash; 4300 } 4301 4302 #ifndef STRESS_REALLOC 4303 #define REASONABLE(size) (size) 4304 #define REASONABLE_but_at_least(size,min) (size) 4305 #else 4306 #define REASONABLE(size) (1) /* unreasonable */ 4307 #define REASONABLE_but_at_least(size,min) (min) 4308 #endif 4309 4310 void 4311 Perl_init_stacks(pTHX) 4312 { 4313 SSize_t size; 4314 4315 /* start with 128-item stack and 8K cxstack */ 4316 PL_curstackinfo = new_stackinfo(REASONABLE(128), 4317 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1)); 4318 PL_curstackinfo->si_type = PERLSI_MAIN; 4319 #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY 4320 PL_curstackinfo->si_stack_hwm = 0; 4321 #endif 4322 PL_curstack = PL_curstackinfo->si_stack; 4323 PL_mainstack = PL_curstack; /* remember in case we switch stacks */ 4324 4325 PL_stack_base = AvARRAY(PL_curstack); 4326 PL_stack_sp = PL_stack_base; 4327 PL_stack_max = PL_stack_base + AvMAX(PL_curstack); 4328 4329 Newx(PL_tmps_stack,REASONABLE(128),SV*); 4330 PL_tmps_floor = -1; 4331 PL_tmps_ix = -1; 4332 PL_tmps_max = REASONABLE(128); 4333 4334 Newx(PL_markstack,REASONABLE(32),I32); 4335 PL_markstack_ptr = PL_markstack; 4336 PL_markstack_max = PL_markstack + REASONABLE(32); 4337 4338 SET_MARK_OFFSET; 4339 4340 Newx(PL_scopestack,REASONABLE(32),I32); 4341 #ifdef DEBUGGING 4342 Newx(PL_scopestack_name,REASONABLE(32),const char*); 4343 #endif 4344 PL_scopestack_ix = 0; 4345 PL_scopestack_max = REASONABLE(32); 4346 4347 size = REASONABLE_but_at_least(128,SS_MAXPUSH); 4348 Newx(PL_savestack, size, ANY); 4349 PL_savestack_ix = 0; 4350 /*PL_savestack_max lies: it always has SS_MAXPUSH more than it claims */ 4351 PL_savestack_max = size - SS_MAXPUSH; 4352 } 4353 4354 #undef REASONABLE 4355 4356 STATIC void 4357 S_nuke_stacks(pTHX) 4358 { 4359 while (PL_curstackinfo->si_next) 4360 PL_curstackinfo = PL_curstackinfo->si_next; 4361 while (PL_curstackinfo) { 4362 PERL_SI *p = PL_curstackinfo->si_prev; 4363 /* curstackinfo->si_stack got nuked by sv_free_arenas() */ 4364 Safefree(PL_curstackinfo->si_cxstack); 4365 Safefree(PL_curstackinfo); 4366 PL_curstackinfo = p; 4367 } 4368 Safefree(PL_tmps_stack); 4369 Safefree(PL_markstack); 4370 Safefree(PL_scopestack); 4371 #ifdef DEBUGGING 4372 Safefree(PL_scopestack_name); 4373 #endif 4374 Safefree(PL_savestack); 4375 } 4376 4377 void 4378 Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...) 4379 { 4380 GV *const gv = gv_fetchpvn(name, len, GV_ADD | GV_ADDMULTI, SVt_PVAV); 4381 AV *const isa = GvAVn(gv); 4382 va_list args; 4383 4384 PERL_ARGS_ASSERT_POPULATE_ISA; 4385 4386 if(AvFILLp(isa) != -1) 4387 return; 4388 4389 /* NOTE: No support for tied ISA */ 4390 4391 va_start(args, len); 4392 do { 4393 const char *const parent = va_arg(args, const char*); 4394 size_t parent_len; 4395 4396 if (!parent) 4397 break; 4398 parent_len = va_arg(args, size_t); 4399 4400 /* Arguments are supplied with a trailing :: */ 4401 assert(parent_len > 2); 4402 assert(parent[parent_len - 1] == ':'); 4403 assert(parent[parent_len - 2] == ':'); 4404 av_push(isa, newSVpvn(parent, parent_len - 2)); 4405 (void) gv_fetchpvn(parent, parent_len, GV_ADD, SVt_PVGV); 4406 } while (1); 4407 va_end(args); 4408 } 4409 4410 4411 STATIC void 4412 S_init_predump_symbols(pTHX) 4413 { 4414 GV *tmpgv; 4415 IO *io; 4416 4417 sv_setpvs(get_sv("\"", GV_ADD), " "); 4418 PL_ofsgv = (GV*)SvREFCNT_inc(gv_fetchpvs(",", GV_ADD|GV_NOTQUAL, SVt_PV)); 4419 4420 4421 /* Historically, PVIOs were blessed into IO::Handle, unless 4422 FileHandle was loaded, in which case they were blessed into 4423 that. Action at a distance. 4424 However, if we simply bless into IO::Handle, we break code 4425 that assumes that PVIOs will have (among others) a seek 4426 method. IO::File inherits from IO::Handle and IO::Seekable, 4427 and provides the needed methods. But if we simply bless into 4428 it, then we break code that assumed that by loading 4429 IO::Handle, *it* would work. 4430 So a compromise is to set up the correct @IO::File::ISA, 4431 so that code that does C<use IO::Handle>; will still work. 4432 */ 4433 4434 Perl_populate_isa(aTHX_ STR_WITH_LEN("IO::File::ISA"), 4435 STR_WITH_LEN("IO::Handle::"), 4436 STR_WITH_LEN("IO::Seekable::"), 4437 STR_WITH_LEN("Exporter::"), 4438 NULL); 4439 4440 PL_stdingv = gv_fetchpvs("STDIN", GV_ADD|GV_NOTQUAL, SVt_PVIO); 4441 GvMULTI_on(PL_stdingv); 4442 io = GvIOp(PL_stdingv); 4443 IoTYPE(io) = IoTYPE_RDONLY; 4444 IoIFP(io) = PerlIO_stdin(); 4445 tmpgv = gv_fetchpvs("stdin", GV_ADD|GV_NOTQUAL, SVt_PV); 4446 GvMULTI_on(tmpgv); 4447 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io)); 4448 4449 tmpgv = gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO); 4450 GvMULTI_on(tmpgv); 4451 io = GvIOp(tmpgv); 4452 IoTYPE(io) = IoTYPE_WRONLY; 4453 IoOFP(io) = IoIFP(io) = PerlIO_stdout(); 4454 setdefout(tmpgv); 4455 tmpgv = gv_fetchpvs("stdout", GV_ADD|GV_NOTQUAL, SVt_PV); 4456 GvMULTI_on(tmpgv); 4457 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io)); 4458 4459 PL_stderrgv = gv_fetchpvs("STDERR", GV_ADD|GV_NOTQUAL, SVt_PVIO); 4460 GvMULTI_on(PL_stderrgv); 4461 io = GvIOp(PL_stderrgv); 4462 IoTYPE(io) = IoTYPE_WRONLY; 4463 IoOFP(io) = IoIFP(io) = PerlIO_stderr(); 4464 tmpgv = gv_fetchpvs("stderr", GV_ADD|GV_NOTQUAL, SVt_PV); 4465 GvMULTI_on(tmpgv); 4466 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io)); 4467 4468 PL_statname = newSVpvs(""); /* last filename we did stat on */ 4469 } 4470 4471 void 4472 Perl_init_argv_symbols(pTHX_ int argc, char **argv) 4473 { 4474 PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS; 4475 4476 argc--,argv++; /* skip name of script */ 4477 if (PL_doswitches) { 4478 for (; argc > 0 && **argv == '-'; argc--,argv++) { 4479 char *s; 4480 if (!argv[0][1]) 4481 break; 4482 if (argv[0][1] == '-' && !argv[0][2]) { 4483 argc--,argv++; 4484 break; 4485 } 4486 if ((s = strchr(argv[0], '='))) { 4487 const char *const start_name = argv[0] + 1; 4488 sv_setpv(GvSV(gv_fetchpvn_flags(start_name, s - start_name, 4489 TRUE, SVt_PV)), s + 1); 4490 } 4491 else 4492 sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1); 4493 } 4494 } 4495 if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD|GV_NOTQUAL, SVt_PVAV))) { 4496 SvREFCNT_inc_simple_void_NN(PL_argvgv); 4497 GvMULTI_on(PL_argvgv); 4498 av_clear(GvAVn(PL_argvgv)); 4499 for (; argc > 0; argc--,argv++) { 4500 SV * const sv = newSVpv(argv[0],0); 4501 av_push(GvAV(PL_argvgv),sv); 4502 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { 4503 if (PL_unicode & PERL_UNICODE_ARGV_FLAG) 4504 SvUTF8_on(sv); 4505 } 4506 if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */ 4507 (void)sv_utf8_decode(sv); 4508 } 4509 } 4510 4511 if (PL_inplace && (!PL_argvgv || AvFILL(GvAV(PL_argvgv)) == -1)) 4512 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE), 4513 "-i used with no filenames on the command line, " 4514 "reading from STDIN"); 4515 } 4516 4517 STATIC void 4518 S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env) 4519 { 4520 #ifdef USE_ITHREADS 4521 dVAR; 4522 #endif 4523 GV* tmpgv; 4524 4525 PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS; 4526 4527 PL_toptarget = newSV_type(SVt_PVIV); 4528 SvPVCLEAR(PL_toptarget); 4529 PL_bodytarget = newSV_type(SVt_PVIV); 4530 SvPVCLEAR(PL_bodytarget); 4531 PL_formtarget = PL_bodytarget; 4532 4533 TAINT; 4534 4535 init_argv_symbols(argc,argv); 4536 4537 if ((tmpgv = gv_fetchpvs("0", GV_ADD|GV_NOTQUAL, SVt_PV))) { 4538 sv_setpv(GvSV(tmpgv),PL_origfilename); 4539 } 4540 if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV))) { 4541 HV *hv; 4542 bool env_is_not_environ; 4543 SvREFCNT_inc_simple_void_NN(PL_envgv); 4544 GvMULTI_on(PL_envgv); 4545 hv = GvHVn(PL_envgv); 4546 hv_magic(hv, NULL, PERL_MAGIC_env); 4547 #ifndef PERL_MICRO 4548 #ifdef USE_ENVIRON_ARRAY 4549 /* Note that if the supplied env parameter is actually a copy 4550 of the global environ then it may now point to free'd memory 4551 if the environment has been modified since. To avoid this 4552 problem we treat env==NULL as meaning 'use the default' 4553 */ 4554 if (!env) 4555 env = environ; 4556 env_is_not_environ = env != environ; 4557 if (env_is_not_environ 4558 # ifdef USE_ITHREADS 4559 && PL_curinterp == aTHX 4560 # endif 4561 ) 4562 { 4563 environ[0] = NULL; 4564 } 4565 if (env) { 4566 char *s, *old_var; 4567 STRLEN nlen; 4568 SV *sv; 4569 HV *dups = newHV(); 4570 4571 for (; *env; env++) { 4572 old_var = *env; 4573 4574 if (!(s = strchr(old_var,'=')) || s == old_var) 4575 continue; 4576 nlen = s - old_var; 4577 4578 #if defined(MSDOS) && !defined(DJGPP) 4579 *s = '\0'; 4580 (void)strupr(old_var); 4581 *s = '='; 4582 #endif 4583 if (hv_exists(hv, old_var, nlen)) { 4584 const char *name = savepvn(old_var, nlen); 4585 4586 /* make sure we use the same value as getenv(), otherwise code that 4587 uses getenv() (like setlocale()) might see a different value to %ENV 4588 */ 4589 sv = newSVpv(PerlEnv_getenv(name), 0); 4590 4591 /* keep a count of the dups of this name so we can de-dup environ later */ 4592 if (hv_exists(dups, name, nlen)) 4593 ++SvIVX(*hv_fetch(dups, name, nlen, 0)); 4594 else 4595 (void)hv_store(dups, name, nlen, newSViv(1), 0); 4596 4597 Safefree(name); 4598 } 4599 else { 4600 sv = newSVpv(s+1, 0); 4601 } 4602 (void)hv_store(hv, old_var, nlen, sv, 0); 4603 if (env_is_not_environ) 4604 mg_set(sv); 4605 } 4606 if (HvKEYS(dups)) { 4607 /* environ has some duplicate definitions, remove them */ 4608 HE *entry; 4609 hv_iterinit(dups); 4610 while ((entry = hv_iternext_flags(dups, 0))) { 4611 STRLEN nlen; 4612 const char *name = HePV(entry, nlen); 4613 IV count = SvIV(HeVAL(entry)); 4614 IV i; 4615 SV **valp = hv_fetch(hv, name, nlen, 0); 4616 4617 assert(valp); 4618 4619 /* try to remove any duplicate names, depending on the 4620 * implementation used in my_setenv() the iteration might 4621 * not be necessary, but let's be safe. 4622 */ 4623 for (i = 0; i < count; ++i) 4624 my_setenv(name, 0); 4625 4626 /* and set it back to the value we set $ENV{name} to */ 4627 my_setenv(name, SvPV_nolen(*valp)); 4628 } 4629 } 4630 SvREFCNT_dec_NN(dups); 4631 } 4632 #endif /* USE_ENVIRON_ARRAY */ 4633 #endif /* !PERL_MICRO */ 4634 } 4635 TAINT_NOT; 4636 4637 /* touch @F array to prevent spurious warnings 20020415 MJD */ 4638 if (PL_minus_a) { 4639 (void) get_av("main::F", GV_ADD | GV_ADDMULTI); 4640 } 4641 } 4642 4643 STATIC void 4644 S_init_perllib(pTHX) 4645 { 4646 #ifndef VMS 4647 const char *perl5lib = NULL; 4648 #endif 4649 const char *s; 4650 #if defined(WIN32) && !defined(PERL_IS_MINIPERL) 4651 STRLEN len; 4652 #endif 4653 4654 if (!TAINTING_get) { 4655 #ifndef VMS 4656 perl5lib = PerlEnv_getenv("PERL5LIB"); 4657 /* 4658 * It isn't possible to delete an environment variable with 4659 * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that 4660 * case we treat PERL5LIB as undefined if it has a zero-length value. 4661 */ 4662 #if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV) 4663 if (perl5lib && *perl5lib != '\0') 4664 #else 4665 if (perl5lib) 4666 #endif 4667 incpush_use_sep(perl5lib, 0, INCPUSH_ADD_SUB_DIRS); 4668 else { 4669 s = PerlEnv_getenv("PERLLIB"); 4670 if (s) 4671 incpush_use_sep(s, 0, 0); 4672 } 4673 #else /* VMS */ 4674 /* Treat PERL5?LIB as a possible search list logical name -- the 4675 * "natural" VMS idiom for a Unix path string. We allow each 4676 * element to be a set of |-separated directories for compatibility. 4677 */ 4678 char buf[256]; 4679 int idx = 0; 4680 if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) 4681 do { 4682 incpush_use_sep(buf, 0, INCPUSH_ADD_SUB_DIRS); 4683 } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0)); 4684 else { 4685 while (vmstrnenv("PERLLIB",buf,idx++,NULL,0)) 4686 incpush_use_sep(buf, 0, 0); 4687 } 4688 #endif /* VMS */ 4689 } 4690 4691 #ifndef PERL_IS_MINIPERL 4692 /* miniperl gets just -I..., the split of $ENV{PERL5LIB}, and "." in @INC 4693 (and not the architecture specific directories from $ENV{PERL5LIB}) */ 4694 4695 #include "perl_inc_macro.h" 4696 /* Use the ~-expanded versions of APPLLIB (undocumented), 4697 SITEARCH, SITELIB, VENDORARCH, VENDORLIB, ARCHLIB and PRIVLIB 4698 */ 4699 INCPUSH_APPLLIB_EXP 4700 INCPUSH_SITEARCH_EXP 4701 INCPUSH_SITELIB_EXP 4702 INCPUSH_PERL_VENDORARCH_EXP 4703 INCPUSH_PERL_VENDORLIB_EXP 4704 INCPUSH_ARCHLIB_EXP 4705 INCPUSH_PRIVLIB_EXP 4706 INCPUSH_PERL_OTHERLIBDIRS 4707 INCPUSH_PERL5LIB 4708 INCPUSH_APPLLIB_OLD_EXP 4709 INCPUSH_SITELIB_STEM 4710 INCPUSH_PERL_VENDORLIB_STEM 4711 INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY 4712 4713 #endif /* !PERL_IS_MINIPERL */ 4714 4715 if (!TAINTING_get) { 4716 #if !defined(PERL_IS_MINIPERL) && defined(DEFAULT_INC_EXCLUDES_DOT) 4717 const char * const unsafe = PerlEnv_getenv("PERL_USE_UNSAFE_INC"); 4718 if (unsafe && strEQ(unsafe, "1")) 4719 #endif 4720 S_incpush(aTHX_ STR_WITH_LEN("."), 0); 4721 } 4722 } 4723 4724 #if defined(DOSISH) || defined(__SYMBIAN32__) 4725 # define PERLLIB_SEP ';' 4726 #elif defined(__VMS) 4727 # define PERLLIB_SEP PL_perllib_sep 4728 #else 4729 # define PERLLIB_SEP ':' 4730 #endif 4731 #ifndef PERLLIB_MANGLE 4732 # define PERLLIB_MANGLE(s,n) (s) 4733 #endif 4734 4735 #ifndef PERL_IS_MINIPERL 4736 /* Push a directory onto @INC if it exists. 4737 Generate a new SV if we do this, to save needing to copy the SV we push 4738 onto @INC */ 4739 STATIC SV * 4740 S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem) 4741 { 4742 Stat_t tmpstatbuf; 4743 4744 PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS; 4745 4746 if (PerlLIO_stat(SvPVX_const(dir), &tmpstatbuf) >= 0 && 4747 S_ISDIR(tmpstatbuf.st_mode)) { 4748 av_push(av, dir); 4749 dir = newSVsv(stem); 4750 } else { 4751 /* Truncate dir back to stem. */ 4752 SvCUR_set(dir, SvCUR(stem)); 4753 } 4754 return dir; 4755 } 4756 #endif 4757 4758 STATIC SV * 4759 S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags) 4760 { 4761 const U8 canrelocate = (U8)flags & INCPUSH_CAN_RELOCATE; 4762 SV *libdir; 4763 4764 PERL_ARGS_ASSERT_MAYBERELOCATE; 4765 assert(len > 0); 4766 4767 /* I am not convinced that this is valid when PERLLIB_MANGLE is 4768 defined to so something (in os2/os2.c), but the code has been 4769 this way, ignoring any possible changed of length, since 4770 760ac839baf413929cd31cc32ffd6dba6b781a81 (5.003_02) so I'll leave 4771 it be. */ 4772 libdir = newSVpvn(PERLLIB_MANGLE(dir, len), len); 4773 4774 #ifdef VMS 4775 { 4776 char *unix; 4777 4778 if ((unix = tounixspec_ts(SvPV(libdir,len),NULL)) != NULL) { 4779 len = strlen(unix); 4780 while (len > 1 && unix[len-1] == '/') len--; /* Cosmetic */ 4781 sv_usepvn(libdir,unix,len); 4782 } 4783 else 4784 PerlIO_printf(Perl_error_log, 4785 "Failed to unixify @INC element \"%s\"\n", 4786 SvPV_nolen_const(libdir)); 4787 } 4788 #endif 4789 4790 /* Do the if() outside the #ifdef to avoid warnings about an unused 4791 parameter. */ 4792 if (canrelocate) { 4793 #ifdef PERL_RELOCATABLE_INC 4794 /* 4795 * Relocatable include entries are marked with a leading .../ 4796 * 4797 * The algorithm is 4798 * 0: Remove that leading ".../" 4799 * 1: Remove trailing executable name (anything after the last '/') 4800 * from the perl path to give a perl prefix 4801 * Then 4802 * While the @INC element starts "../" and the prefix ends with a real 4803 * directory (ie not . or ..) chop that real directory off the prefix 4804 * and the leading "../" from the @INC element. ie a logical "../" 4805 * cleanup 4806 * Finally concatenate the prefix and the remainder of the @INC element 4807 * The intent is that /usr/local/bin/perl and .../../lib/perl5 4808 * generates /usr/local/lib/perl5 4809 */ 4810 const char *libpath = SvPVX(libdir); 4811 STRLEN libpath_len = SvCUR(libdir); 4812 if (memBEGINs(libpath, libpath_len, ".../")) { 4813 /* Game on! */ 4814 SV * const caret_X = get_sv("\030", 0); 4815 /* Going to use the SV just as a scratch buffer holding a C 4816 string: */ 4817 SV *prefix_sv; 4818 char *prefix; 4819 char *lastslash; 4820 4821 /* $^X is *the* source of taint if tainting is on, hence 4822 SvPOK() won't be true. */ 4823 assert(caret_X); 4824 assert(SvPOKp(caret_X)); 4825 prefix_sv = newSVpvn_flags(SvPVX(caret_X), SvCUR(caret_X), 4826 SvUTF8(caret_X)); 4827 /* Firstly take off the leading .../ 4828 If all else fail we'll do the paths relative to the current 4829 directory. */ 4830 sv_chop(libdir, libpath + 4); 4831 /* Don't use SvPV as we're intentionally bypassing taining, 4832 mortal copies that the mg_get of tainting creates, and 4833 corruption that seems to come via the save stack. 4834 I guess that the save stack isn't correctly set up yet. */ 4835 libpath = SvPVX(libdir); 4836 libpath_len = SvCUR(libdir); 4837 4838 prefix = SvPVX(prefix_sv); 4839 lastslash = (char *) my_memrchr(prefix, '/', 4840 SvEND(prefix_sv) - prefix); 4841 4842 /* First time in with the *lastslash = '\0' we just wipe off 4843 the trailing /perl from (say) /usr/foo/bin/perl 4844 */ 4845 if (lastslash) { 4846 SV *tempsv; 4847 while ((*lastslash = '\0'), /* Do that, come what may. */ 4848 ( memBEGINs(libpath, libpath_len, "../") 4849 && (lastslash = 4850 (char *) my_memrchr(prefix, '/', 4851 SvEND(prefix_sv) - prefix)))) 4852 { 4853 if (lastslash[1] == '\0' 4854 || (lastslash[1] == '.' 4855 && (lastslash[2] == '/' /* ends "/." */ 4856 || (lastslash[2] == '/' 4857 && lastslash[3] == '/' /* or "/.." */ 4858 )))) { 4859 /* Prefix ends "/" or "/." or "/..", any of which 4860 are fishy, so don't do any more logical cleanup. 4861 */ 4862 break; 4863 } 4864 /* Remove leading "../" from path */ 4865 libpath += 3; 4866 libpath_len -= 3; 4867 /* Next iteration round the loop removes the last 4868 directory name from prefix by writing a '\0' in 4869 the while clause. */ 4870 } 4871 /* prefix has been terminated with a '\0' to the correct 4872 length. libpath points somewhere into the libdir SV. 4873 We need to join the 2 with '/' and drop the result into 4874 libdir. */ 4875 tempsv = Perl_newSVpvf(aTHX_ "%s/%s", prefix, libpath); 4876 SvREFCNT_dec(libdir); 4877 /* And this is the new libdir. */ 4878 libdir = tempsv; 4879 if (TAINTING_get && 4880 (PerlProc_getuid() != PerlProc_geteuid() || 4881 PerlProc_getgid() != PerlProc_getegid())) { 4882 /* Need to taint relocated paths if running set ID */ 4883 SvTAINTED_on(libdir); 4884 } 4885 } 4886 SvREFCNT_dec(prefix_sv); 4887 } 4888 #endif 4889 } 4890 return libdir; 4891 } 4892 4893 STATIC void 4894 S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags) 4895 { 4896 #ifndef PERL_IS_MINIPERL 4897 const U8 using_sub_dirs 4898 = (U8)flags & (INCPUSH_ADD_VERSIONED_SUB_DIRS 4899 |INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_ADD_OLD_VERS); 4900 const U8 add_versioned_sub_dirs 4901 = (U8)flags & INCPUSH_ADD_VERSIONED_SUB_DIRS; 4902 const U8 add_archonly_sub_dirs 4903 = (U8)flags & INCPUSH_ADD_ARCHONLY_SUB_DIRS; 4904 #ifdef PERL_INC_VERSION_LIST 4905 const U8 addoldvers = (U8)flags & INCPUSH_ADD_OLD_VERS; 4906 #endif 4907 #endif 4908 const U8 unshift = (U8)flags & INCPUSH_UNSHIFT; 4909 const U8 push_basedir = (flags & INCPUSH_NOT_BASEDIR) ? 0 : 1; 4910 AV *const inc = GvAVn(PL_incgv); 4911 4912 PERL_ARGS_ASSERT_INCPUSH; 4913 assert(len > 0); 4914 4915 /* Could remove this vestigial extra block, if we don't mind a lot of 4916 re-indenting diff noise. */ 4917 { 4918 SV *const libdir = mayberelocate(dir, len, flags); 4919 /* Change 20189146be79a0596543441fa369c6bf7f85103f, to fix RT#6665, 4920 arranged to unshift #! line -I onto the front of @INC. However, 4921 -I can add version and architecture specific libraries, and they 4922 need to go first. The old code assumed that it was always 4923 pushing. Hence to make it work, need to push the architecture 4924 (etc) libraries onto a temporary array, then "unshift" that onto 4925 the front of @INC. */ 4926 #ifndef PERL_IS_MINIPERL 4927 AV *const av = (using_sub_dirs) ? (unshift ? newAV() : inc) : NULL; 4928 4929 /* 4930 * BEFORE pushing libdir onto @INC we may first push version- and 4931 * archname-specific sub-directories. 4932 */ 4933 if (using_sub_dirs) { 4934 SV *subdir = newSVsv(libdir); 4935 #ifdef PERL_INC_VERSION_LIST 4936 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */ 4937 const char * const incverlist[] = { PERL_INC_VERSION_LIST }; 4938 const char * const *incver; 4939 #endif 4940 4941 if (add_versioned_sub_dirs) { 4942 /* .../version/archname if -d .../version/archname */ 4943 sv_catpvs(subdir, "/" PERL_FS_VERSION "/" ARCHNAME); 4944 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); 4945 4946 /* .../version if -d .../version */ 4947 sv_catpvs(subdir, "/" PERL_FS_VERSION); 4948 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); 4949 } 4950 4951 #ifdef PERL_INC_VERSION_LIST 4952 if (addoldvers) { 4953 for (incver = incverlist; *incver; incver++) { 4954 /* .../xxx if -d .../xxx */ 4955 Perl_sv_catpvf(aTHX_ subdir, "/%s", *incver); 4956 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); 4957 } 4958 } 4959 #endif 4960 4961 if (add_archonly_sub_dirs) { 4962 /* .../archname if -d .../archname */ 4963 sv_catpvs(subdir, "/" ARCHNAME); 4964 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); 4965 4966 } 4967 4968 assert (SvREFCNT(subdir) == 1); 4969 SvREFCNT_dec(subdir); 4970 } 4971 #endif /* !PERL_IS_MINIPERL */ 4972 /* finally add this lib directory at the end of @INC */ 4973 if (unshift) { 4974 #ifdef PERL_IS_MINIPERL 4975 const Size_t extra = 0; 4976 #else 4977 Size_t extra = av_tindex(av) + 1; 4978 #endif 4979 av_unshift(inc, extra + push_basedir); 4980 if (push_basedir) 4981 av_store(inc, extra, libdir); 4982 #ifndef PERL_IS_MINIPERL 4983 while (extra--) { 4984 /* av owns a reference, av_store() expects to be donated a 4985 reference, and av expects to be sane when it's cleared. 4986 If I wanted to be naughty and wrong, I could peek inside the 4987 implementation of av_clear(), realise that it uses 4988 SvREFCNT_dec() too, so av's array could be a run of NULLs, 4989 and so directly steal from it (with a memcpy() to inc, and 4990 then memset() to NULL them out. But people copy code from the 4991 core expecting it to be best practise, so let's use the API. 4992 Although studious readers will note that I'm not checking any 4993 return codes. */ 4994 av_store(inc, extra, SvREFCNT_inc(*av_fetch(av, extra, FALSE))); 4995 } 4996 SvREFCNT_dec(av); 4997 #endif 4998 } 4999 else if (push_basedir) { 5000 av_push(inc, libdir); 5001 } 5002 5003 if (!push_basedir) { 5004 assert (SvREFCNT(libdir) == 1); 5005 SvREFCNT_dec(libdir); 5006 } 5007 } 5008 } 5009 5010 STATIC void 5011 S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags) 5012 { 5013 const char *s; 5014 const char *end; 5015 /* This logic has been broken out from S_incpush(). It may be possible to 5016 simplify it. */ 5017 5018 PERL_ARGS_ASSERT_INCPUSH_USE_SEP; 5019 5020 /* perl compiled with -DPERL_RELOCATABLE_INCPUSH will ignore the len 5021 * argument to incpush_use_sep. This allows creation of relocatable 5022 * Perl distributions that patch the binary at install time. Those 5023 * distributions will have to provide their own relocation tools; this 5024 * is not a feature otherwise supported by core Perl. 5025 */ 5026 #ifndef PERL_RELOCATABLE_INCPUSH 5027 if (!len) 5028 #endif 5029 len = strlen(p); 5030 5031 end = p + len; 5032 5033 /* Break at all separators */ 5034 while ((s = (const char*)memchr(p, PERLLIB_SEP, end - p))) { 5035 if (s == p) { 5036 /* skip any consecutive separators */ 5037 5038 /* Uncomment the next line for PATH semantics */ 5039 /* But you'll need to write tests */ 5040 /* av_push(GvAVn(PL_incgv), newSVpvs(".")); */ 5041 } else { 5042 incpush(p, (STRLEN)(s - p), flags); 5043 } 5044 p = s + 1; 5045 } 5046 if (p != end) 5047 incpush(p, (STRLEN)(end - p), flags); 5048 5049 } 5050 5051 void 5052 Perl_call_list(pTHX_ I32 oldscope, AV *paramList) 5053 { 5054 SV *atsv; 5055 volatile const line_t oldline = PL_curcop ? CopLINE(PL_curcop) : 0; 5056 CV *cv; 5057 STRLEN len; 5058 int ret; 5059 dJMPENV; 5060 5061 PERL_ARGS_ASSERT_CALL_LIST; 5062 5063 while (av_tindex(paramList) >= 0) { 5064 cv = MUTABLE_CV(av_shift(paramList)); 5065 if (PL_savebegin) { 5066 if (paramList == PL_beginav) { 5067 /* save PL_beginav for compiler */ 5068 Perl_av_create_and_push(aTHX_ &PL_beginav_save, MUTABLE_SV(cv)); 5069 } 5070 else if (paramList == PL_checkav) { 5071 /* save PL_checkav for compiler */ 5072 Perl_av_create_and_push(aTHX_ &PL_checkav_save, MUTABLE_SV(cv)); 5073 } 5074 else if (paramList == PL_unitcheckav) { 5075 /* save PL_unitcheckav for compiler */ 5076 Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv)); 5077 } 5078 } else { 5079 SAVEFREESV(cv); 5080 } 5081 JMPENV_PUSH(ret); 5082 switch (ret) { 5083 case 0: 5084 CALL_LIST_BODY(cv); 5085 atsv = ERRSV; 5086 (void)SvPV_const(atsv, len); 5087 if (len) { 5088 PL_curcop = &PL_compiling; 5089 CopLINE_set(PL_curcop, oldline); 5090 if (paramList == PL_beginav) 5091 sv_catpvs(atsv, "BEGIN failed--compilation aborted"); 5092 else 5093 Perl_sv_catpvf(aTHX_ atsv, 5094 "%s failed--call queue aborted", 5095 paramList == PL_checkav ? "CHECK" 5096 : paramList == PL_initav ? "INIT" 5097 : paramList == PL_unitcheckav ? "UNITCHECK" 5098 : "END"); 5099 while (PL_scopestack_ix > oldscope) 5100 LEAVE; 5101 JMPENV_POP; 5102 Perl_croak(aTHX_ "%" SVf, SVfARG(atsv)); 5103 } 5104 break; 5105 case 1: 5106 STATUS_ALL_FAILURE; 5107 /* FALLTHROUGH */ 5108 case 2: 5109 /* my_exit() was called */ 5110 while (PL_scopestack_ix > oldscope) 5111 LEAVE; 5112 FREETMPS; 5113 SET_CURSTASH(PL_defstash); 5114 PL_curcop = &PL_compiling; 5115 CopLINE_set(PL_curcop, oldline); 5116 JMPENV_POP; 5117 my_exit_jump(); 5118 NOT_REACHED; /* NOTREACHED */ 5119 case 3: 5120 if (PL_restartop) { 5121 PL_curcop = &PL_compiling; 5122 CopLINE_set(PL_curcop, oldline); 5123 JMPENV_JUMP(3); 5124 } 5125 PerlIO_printf(Perl_error_log, "panic: restartop in call_list\n"); 5126 FREETMPS; 5127 break; 5128 } 5129 JMPENV_POP; 5130 } 5131 } 5132 5133 void 5134 Perl_my_exit(pTHX_ U32 status) 5135 { 5136 if (PL_exit_flags & PERL_EXIT_ABORT) { 5137 abort(); 5138 } 5139 if (PL_exit_flags & PERL_EXIT_WARN) { 5140 PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ 5141 Perl_warn(aTHX_ "Unexpected exit %lu", (unsigned long)status); 5142 PL_exit_flags &= ~PERL_EXIT_ABORT; 5143 } 5144 switch (status) { 5145 case 0: 5146 STATUS_ALL_SUCCESS; 5147 break; 5148 case 1: 5149 STATUS_ALL_FAILURE; 5150 break; 5151 default: 5152 STATUS_EXIT_SET(status); 5153 break; 5154 } 5155 my_exit_jump(); 5156 } 5157 5158 void 5159 Perl_my_failure_exit(pTHX) 5160 { 5161 #ifdef VMS 5162 /* We have been called to fall on our sword. The desired exit code 5163 * should be already set in STATUS_UNIX, but could be shifted over 5164 * by 8 bits. STATUS_UNIX_EXIT_SET will handle the cases where a 5165 * that code is set. 5166 * 5167 * If an error code has not been set, then force the issue. 5168 */ 5169 if (MY_POSIX_EXIT) { 5170 5171 /* According to the die_exit.t tests, if errno is non-zero */ 5172 /* It should be used for the error status. */ 5173 5174 if (errno == EVMSERR) { 5175 STATUS_NATIVE = vaxc$errno; 5176 } else { 5177 5178 /* According to die_exit.t tests, if the child_exit code is */ 5179 /* also zero, then we need to exit with a code of 255 */ 5180 if ((errno != 0) && (errno < 256)) 5181 STATUS_UNIX_EXIT_SET(errno); 5182 else if (STATUS_UNIX < 255) { 5183 STATUS_UNIX_EXIT_SET(255); 5184 } 5185 5186 } 5187 5188 /* The exit code could have been set by $? or vmsish which 5189 * means that it may not have fatal set. So convert 5190 * success/warning codes to fatal with out changing 5191 * the POSIX status code. The severity makes VMS native 5192 * status handling work, while UNIX mode programs use the 5193 * the POSIX exit codes. 5194 */ 5195 if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) { 5196 STATUS_NATIVE &= STS$M_COND_ID; 5197 STATUS_NATIVE |= STS$K_ERROR | STS$M_INHIB_MSG; 5198 } 5199 } 5200 else { 5201 /* Traditionally Perl on VMS always expects a Fatal Error. */ 5202 if (vaxc$errno & 1) { 5203 5204 /* So force success status to failure */ 5205 if (STATUS_NATIVE & 1) 5206 STATUS_ALL_FAILURE; 5207 } 5208 else { 5209 if (!vaxc$errno) { 5210 STATUS_UNIX = EINTR; /* In case something cares */ 5211 STATUS_ALL_FAILURE; 5212 } 5213 else { 5214 int severity; 5215 STATUS_NATIVE = vaxc$errno; /* Should already be this */ 5216 5217 /* Encode the severity code */ 5218 severity = STATUS_NATIVE & STS$M_SEVERITY; 5219 STATUS_UNIX = (severity ? severity : 1) << 8; 5220 5221 /* Perl expects this to be a fatal error */ 5222 if (severity != STS$K_SEVERE) 5223 STATUS_ALL_FAILURE; 5224 } 5225 } 5226 } 5227 5228 #else 5229 int exitstatus; 5230 int eno = errno; 5231 if (eno & 255) 5232 STATUS_UNIX_SET(eno); 5233 else { 5234 exitstatus = STATUS_UNIX >> 8; 5235 if (exitstatus & 255) 5236 STATUS_UNIX_SET(exitstatus); 5237 else 5238 STATUS_UNIX_SET(255); 5239 } 5240 #endif 5241 if (PL_exit_flags & PERL_EXIT_ABORT) { 5242 abort(); 5243 } 5244 if (PL_exit_flags & PERL_EXIT_WARN) { 5245 PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ 5246 Perl_warn(aTHX_ "Unexpected exit failure %ld", (long)PL_statusvalue); 5247 PL_exit_flags &= ~PERL_EXIT_ABORT; 5248 } 5249 my_exit_jump(); 5250 } 5251 5252 STATIC void 5253 S_my_exit_jump(pTHX) 5254 { 5255 if (PL_e_script) { 5256 SvREFCNT_dec(PL_e_script); 5257 PL_e_script = NULL; 5258 } 5259 5260 POPSTACK_TO(PL_mainstack); 5261 if (cxstack_ix >= 0) { 5262 dounwind(-1); 5263 cx_popblock(cxstack); 5264 } 5265 LEAVE_SCOPE(0); 5266 5267 JMPENV_JUMP(2); 5268 } 5269 5270 static I32 5271 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen) 5272 { 5273 const char * const p = SvPVX_const(PL_e_script); 5274 const char * const e = SvEND(PL_e_script); 5275 const char *nl = (char *) memchr(p, '\n', e - p); 5276 5277 PERL_UNUSED_ARG(idx); 5278 PERL_UNUSED_ARG(maxlen); 5279 5280 nl = (nl) ? nl+1 : e; 5281 if (nl-p == 0) { 5282 filter_del(read_e_script); 5283 return 0; 5284 } 5285 sv_catpvn(buf_sv, p, nl-p); 5286 sv_chop(PL_e_script, nl); 5287 return 1; 5288 } 5289 5290 /* removes boilerplate code at the end of each boot_Module xsub */ 5291 void 5292 Perl_xs_boot_epilog(pTHX_ const I32 ax) 5293 { 5294 if (PL_unitcheckav) 5295 call_list(PL_scopestack_ix, PL_unitcheckav); 5296 XSRETURN_YES; 5297 } 5298 5299 /* 5300 * ex: set ts=8 sts=4 sw=4 et: 5301 */ 5302