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