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