This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Avoid downgrading GVs during global destruction
[perl5.git] / perl.c
CommitLineData
4b88f280 1#line 2 "perl.c"
a0d0e21e
LW
2/* perl.c
3 *
737f4459 4 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
32709fdf
A
5 * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 by Larry Wall
6 * and others
a687059c 7 *
352d5a3a
LW
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.
a687059c 10 *
8d063cd8
LW
11 */
12
a0d0e21e 13/*
4ac71550
TC
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"]
a0d0e21e 19 */
45d8adaa 20
166f8a29
DM
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()
ddfa107c 24 * function of the interpreter; that can be found in perlmain.c
166f8a29
DM
25 */
26
378cc40b 27#include "EXTERN.h"
864dbfa3 28#define PERL_IN_PERL_C
378cc40b 29#include "perl.h"
e3321bb0 30#include "patchlevel.h" /* for local_patches */
4a5df386 31#include "XSUB.h"
378cc40b 32
011f1a1a
JH
33#ifdef NETWARE
34#include "nwutil.h"
011f1a1a
JH
35#endif
36
df5cef82 37/* XXX If this causes problems, set i_unistd=undef in the hint file. */
a0d0e21e
LW
38#ifdef I_UNISTD
39#include <unistd.h>
40#endif
a0d0e21e 41
2aa47728
NC
42#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
43# ifdef I_SYS_WAIT
44# include <sys/wait.h>
45# endif
bf357333
NC
46# ifdef I_SYSUIO
47# include <sys/uio.h>
48# endif
49
50union control_un {
51 struct cmsghdr cm;
52 char control[CMSG_SPACE(sizeof(int))];
53};
54
2aa47728
NC
55#endif
56
5311654c
JH
57#ifdef __BEOS__
58# define HZ 1000000
59#endif
60
61#ifndef HZ
62# ifdef CLK_TCK
63# define HZ CLK_TCK
64# else
65# define HZ 60
66# endif
67#endif
68
7114a2d2 69#if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
20ce7b12 70char *getenv (char *); /* Usually in <stdlib.h> */
54310121 71#endif
72
acfe0abc 73static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
0cb96387 74
cc69b689 75#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
ec2019ad 76/* Drop everything. Heck, don't even try to call it */
cc69b689
NC
77# define validate_suid(validarg, scriptname, fdscript, suidscript, linestr_sv, rsfp) NOOP
78#else
ec2019ad 79/* Drop almost everything */
cc69b689 80# define validate_suid(validarg, scriptname, fdscript, suidscript, linestr_sv, rsfp) S_validate_suid(aTHX_ rsfp)
a687059c 81#endif
8d063cd8 82
d6f07c05
AL
83#define CALL_BODY_EVAL(myop) \
84 if (PL_op == (myop)) \
139d0ce6 85 PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX); \
d6f07c05
AL
86 if (PL_op) \
87 CALLRUNOPS(aTHX);
88
89#define CALL_BODY_SUB(myop) \
90 if (PL_op == (myop)) \
139d0ce6 91 PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \
d6f07c05
AL
92 if (PL_op) \
93 CALLRUNOPS(aTHX);
94
95#define CALL_LIST_BODY(cv) \
96 PUSHMARK(PL_stack_sp); \
ad64d0ec 97 call_sv(MUTABLE_SV((cv)), G_EVAL|G_DISCARD);
d6f07c05 98
e6827a76 99static void
daa7d858 100S_init_tls_and_interp(PerlInterpreter *my_perl)
e6827a76 101{
27da23d5 102 dVAR;
e6827a76
NC
103 if (!PL_curinterp) {
104 PERL_SET_INTERP(my_perl);
3db8f154 105#if defined(USE_ITHREADS)
e6827a76
NC
106 INIT_THREADS;
107 ALLOC_THREAD_KEY;
108 PERL_SET_THX(my_perl);
109 OP_REFCNT_INIT;
71ad1b0c 110 HINTS_REFCNT_INIT;
e6827a76 111 MUTEX_INIT(&PL_dollarzero_mutex);
016af4f1
DM
112 MUTEX_INIT(&PL_my_ctx_mutex);
113# endif
e6827a76 114 }
c0bce9aa
NC
115#if defined(USE_ITHREADS)
116 else
117#else
118 /* This always happens for non-ithreads */
119#endif
120 {
e6827a76
NC
121 PERL_SET_THX(my_perl);
122 }
123}
06d86050 124
cbec8ebe
DM
125
126/* these implement the PERL_SYS_INIT, PERL_SYS_INIT3, PERL_SYS_TERM macros */
127
128void
129Perl_sys_init(int* argc, char*** argv)
130{
4fc0badb 131 dVAR;
7918f24d
NC
132
133 PERL_ARGS_ASSERT_SYS_INIT;
134
cbec8ebe
DM
135 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
136 PERL_UNUSED_ARG(argv);
137 PERL_SYS_INIT_BODY(argc, argv);
138}
139
140void
141Perl_sys_init3(int* argc, char*** argv, char*** env)
142{
4fc0badb 143 dVAR;
7918f24d
NC
144
145 PERL_ARGS_ASSERT_SYS_INIT3;
146
cbec8ebe
DM
147 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
148 PERL_UNUSED_ARG(argv);
149 PERL_UNUSED_ARG(env);
150 PERL_SYS_INIT3_BODY(argc, argv, env);
151}
152
153void
d0820ef1 154Perl_sys_term()
cbec8ebe 155{
4fc0badb 156 dVAR;
bf81751b
DM
157 if (!PL_veto_cleanup) {
158 PERL_SYS_TERM_BODY();
159 }
cbec8ebe
DM
160}
161
162
32e30700
GS
163#ifdef PERL_IMPLICIT_SYS
164PerlInterpreter *
7766f137
GS
165perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
166 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
32e30700
GS
167 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
168 struct IPerlDir* ipD, struct IPerlSock* ipS,
169 struct IPerlProc* ipP)
170{
171 PerlInterpreter *my_perl;
7918f24d
NC
172
173 PERL_ARGS_ASSERT_PERL_ALLOC_USING;
174
9f653bb5 175 /* Newx() needs interpreter, so call malloc() instead */
32e30700 176 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
e6827a76 177 S_init_tls_and_interp(my_perl);
32e30700
GS
178 Zero(my_perl, 1, PerlInterpreter);
179 PL_Mem = ipM;
7766f137
GS
180 PL_MemShared = ipMS;
181 PL_MemParse = ipMP;
32e30700
GS
182 PL_Env = ipE;
183 PL_StdIO = ipStd;
184 PL_LIO = ipLIO;
185 PL_Dir = ipD;
186 PL_Sock = ipS;
187 PL_Proc = ipP;
7cb608b5 188 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
7766f137 189
32e30700
GS
190 return my_perl;
191}
192#else
954c1994
GS
193
194/*
ccfc67b7
JH
195=head1 Embedding Functions
196
954c1994
GS
197=for apidoc perl_alloc
198
199Allocates a new Perl interpreter. See L<perlembed>.
200
201=cut
202*/
203
93a17b20 204PerlInterpreter *
cea2e8a9 205perl_alloc(void)
79072805 206{
cea2e8a9 207 PerlInterpreter *my_perl;
79072805 208
9f653bb5 209 /* Newx() needs interpreter, so call malloc() instead */
e8ee3774 210 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
ba869deb 211
e6827a76 212 S_init_tls_and_interp(my_perl);
7cb608b5 213#ifndef PERL_TRACK_MEMPOOL
07409e01 214 return (PerlInterpreter *) ZeroD(my_perl, 1, PerlInterpreter);
7cb608b5
NC
215#else
216 Zero(my_perl, 1, PerlInterpreter);
217 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
218 return my_perl;
219#endif
79072805 220}
32e30700 221#endif /* PERL_IMPLICIT_SYS */
79072805 222
954c1994
GS
223/*
224=for apidoc perl_construct
225
226Initializes a new Perl interpreter. See L<perlembed>.
227
228=cut
229*/
230
79072805 231void
0cb96387 232perl_construct(pTHXx)
79072805 233{
27da23d5 234 dVAR;
7918f24d
NC
235
236 PERL_ARGS_ASSERT_PERL_CONSTRUCT;
237
8990e307 238#ifdef MULTIPLICITY
54aff467 239 init_interp();
ac27b0f5 240 PL_perl_destruct_level = 1;
54aff467 241#else
7918f24d 242 PERL_UNUSED_ARG(my_perl);
54aff467
GS
243 if (PL_perl_destruct_level > 0)
244 init_interp();
245#endif
34caed6d
DM
246 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
247
34caed6d
DM
248 /* set read-only and try to insure than we wont see REFCNT==0
249 very often */
250
251 SvREADONLY_on(&PL_sv_undef);
252 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
253
254 sv_setpv(&PL_sv_no,PL_No);
255 /* value lookup in void context - happens to have the side effect
a43d94f2
NC
256 of caching the numeric forms. However, as &PL_sv_no doesn't contain
257 a string that is a valid numer, we have to turn the public flags by
258 hand: */
34caed6d 259 SvNV(&PL_sv_no);
c1939273 260 SvIV(&PL_sv_no);
a43d94f2
NC
261 SvIOK_on(&PL_sv_no);
262 SvNOK_on(&PL_sv_no);
34caed6d
DM
263 SvREADONLY_on(&PL_sv_no);
264 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
265
266 sv_setpv(&PL_sv_yes,PL_Yes);
34caed6d 267 SvNV(&PL_sv_yes);
c1939273 268 SvIV(&PL_sv_yes);
34caed6d
DM
269 SvREADONLY_on(&PL_sv_yes);
270 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
271
272 SvREADONLY_on(&PL_sv_placeholder);
273 SvREFCNT(&PL_sv_placeholder) = (~(U32)0)/2;
274
275 PL_sighandlerp = (Sighandler_t) Perl_sighandler;
ca0c25f6 276#ifdef PERL_USES_PL_PIDSTATUS
34caed6d 277 PL_pidstatus = newHV();
ca0c25f6 278#endif
79072805 279
396482e1 280 PL_rs = newSVpvs("\n");
dc92893f 281
cea2e8a9 282 init_stacks();
79072805 283
748a9306 284 init_ids();
a5f75d66 285
312caa8e 286 JMPENV_BOOTSTRAP;
f86702cc 287 STATUS_ALL_SUCCESS;
288
0672f40e 289 init_i18nl10n(1);
36477c24 290 SET_NUMERIC_STANDARD();
0b5b802d 291
ab821d7f 292#if defined(LOCAL_PATCH_COUNT)
3280af22 293 PL_localpatches = local_patches; /* For possible -v */
ab821d7f 294#endif
295
52853b95
GS
296#ifdef HAVE_INTERP_INTERN
297 sys_intern_init();
298#endif
299
3a1ee7e8 300 PerlIO_init(aTHX); /* Hook to IO system */
760ac839 301
3280af22
NIS
302 PL_fdpid = newAV(); /* for remembering popen pids by fd */
303 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
396482e1 304 PL_errors = newSVpvs("");
76f68e9b
MHM
305 sv_setpvs(PERL_DEBUG_PAD(0), ""); /* For regex debugging. */
306 sv_setpvs(PERL_DEBUG_PAD(1), ""); /* ext/re needs these */
307 sv_setpvs(PERL_DEBUG_PAD(2), ""); /* even without DEBUGGING. */
1fcf4c12 308#ifdef USE_ITHREADS
402d2eb1
NC
309 /* First entry is a list of empty elements. It needs to be initialised
310 else all hell breaks loose in S_find_uninit_var(). */
311 Perl_av_create_and_push(aTHX_ &PL_regex_padav, newSVpvs(""));
13137afc 312 PL_regex_pad = AvARRAY(PL_regex_padav);
1fcf4c12 313#endif
e5dd39fc 314#ifdef USE_REENTRANT_API
59bd0823 315 Perl_reentrant_init(aTHX);
e5dd39fc 316#endif
3d47000e
AB
317
318 /* Note that strtab is a rather special HV. Assumptions are made
319 about not iterating on it, and not adding tie magic to it.
320 It is properly deallocated in perl_destruct() */
321 PL_strtab = newHV();
322
3d47000e
AB
323 HvSHAREKEYS_off(PL_strtab); /* mandatory */
324 hv_ksplit(PL_strtab, 512);
325
0631ea03
AB
326#if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
327 _dyld_lookup_and_bind
328 ("__environ", (unsigned long *) &environ_pointer, NULL);
329#endif /* environ */
330
2f42fcb0
JH
331#ifndef PERL_MICRO
332# ifdef USE_ENVIRON_ARRAY
0631ea03 333 PL_origenviron = environ;
2f42fcb0 334# endif
0631ea03
AB
335#endif
336
5311654c 337 /* Use sysconf(_SC_CLK_TCK) if available, if not
dbc1d986 338 * available or if the sysconf() fails, use the HZ.
27da23d5
JH
339 * BeOS has those, but returns the wrong value.
340 * The HZ if not originally defined has been by now
341 * been defined as CLK_TCK, if available. */
dbc1d986 342#if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK) && !defined(__BEOS__)
5311654c
JH
343 PL_clocktick = sysconf(_SC_CLK_TCK);
344 if (PL_clocktick <= 0)
345#endif
346 PL_clocktick = HZ;
347
081fc587
AB
348 PL_stashcache = newHV();
349
e8e3635e 350 PL_patchlevel = newSVpvs("v" PERL_VERSION_STRING);
1e8125c6 351 PL_apiversion = newSVpvs("v" PERL_API_VERSION_STRING);
d7aa5382 352
27da23d5
JH
353#ifdef HAS_MMAP
354 if (!PL_mmap_page_size) {
355#if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_MMAP_PAGE_SIZE))
356 {
357 SETERRNO(0, SS_NORMAL);
358# ifdef _SC_PAGESIZE
359 PL_mmap_page_size = sysconf(_SC_PAGESIZE);
360# else
361 PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE);
362# endif
363 if ((long) PL_mmap_page_size < 0) {
364 if (errno) {
44f8325f 365 SV * const error = ERRSV;
d4c19fe8 366 SvUPGRADE(error, SVt_PV);
0510663f 367 Perl_croak(aTHX_ "panic: sysconf: %s", SvPV_nolen_const(error));
27da23d5
JH
368 }
369 else
370 Perl_croak(aTHX_ "panic: sysconf: pagesize unknown");
371 }
372 }
373#else
374# ifdef HAS_GETPAGESIZE
375 PL_mmap_page_size = getpagesize();
376# else
377# if defined(I_SYS_PARAM) && defined(PAGESIZE)
378 PL_mmap_page_size = PAGESIZE; /* compiletime, bad */
379# endif
380# endif
381#endif
382 if (PL_mmap_page_size <= 0)
383 Perl_croak(aTHX_ "panic: bad pagesize %" IVdf,
384 (IV) PL_mmap_page_size);
385 }
386#endif /* HAS_MMAP */
387
388#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
389 PL_timesbase.tms_utime = 0;
390 PL_timesbase.tms_stime = 0;
391 PL_timesbase.tms_cutime = 0;
392 PL_timesbase.tms_cstime = 0;
393#endif
394
7d113631
NC
395 PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME));
396
a3e6e81e 397 PL_registered_mros = newHV();
9e169432
NC
398 /* Start with 1 bucket, for DFS. It's unlikely we'll need more. */
399 HvMAX(PL_registered_mros) = 0;
a3e6e81e 400
8990e307 401 ENTER;
79072805
LW
402}
403
954c1994 404/*
62375a60
NIS
405=for apidoc nothreadhook
406
407Stub that provides thread hook for perl_destruct when there are
408no threads.
409
410=cut
411*/
412
413int
4e9e3734 414Perl_nothreadhook(pTHX)
62375a60 415{
96a5add6 416 PERL_UNUSED_CONTEXT;
62375a60
NIS
417 return 0;
418}
419
41e4abd8
NC
420#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
421void
422Perl_dump_sv_child(pTHX_ SV *sv)
423{
424 ssize_t got;
bf357333
NC
425 const int sock = PL_dumper_fd;
426 const int debug_fd = PerlIO_fileno(Perl_debug_log);
bf357333
NC
427 union control_un control;
428 struct msghdr msg;
808ad2d0 429 struct iovec vec[2];
bf357333 430 struct cmsghdr *cmptr;
808ad2d0
NC
431 int returned_errno;
432 unsigned char buffer[256];
41e4abd8 433
7918f24d
NC
434 PERL_ARGS_ASSERT_DUMP_SV_CHILD;
435
bf357333 436 if(sock == -1 || debug_fd == -1)
41e4abd8
NC
437 return;
438
439 PerlIO_flush(Perl_debug_log);
440
bf357333
NC
441 /* All these shenanigans are to pass a file descriptor over to our child for
442 it to dump out to. We can't let it hold open the file descriptor when it
443 forks, as the file descriptor it will dump to can turn out to be one end
444 of pipe that some other process will wait on for EOF. (So as it would
b293a5f8 445 be open, the wait would be forever.) */
bf357333
NC
446
447 msg.msg_control = control.control;
448 msg.msg_controllen = sizeof(control.control);
449 /* We're a connected socket so we don't need a destination */
450 msg.msg_name = NULL;
451 msg.msg_namelen = 0;
452 msg.msg_iov = vec;
808ad2d0 453 msg.msg_iovlen = 1;
bf357333
NC
454
455 cmptr = CMSG_FIRSTHDR(&msg);
456 cmptr->cmsg_len = CMSG_LEN(sizeof(int));
457 cmptr->cmsg_level = SOL_SOCKET;
458 cmptr->cmsg_type = SCM_RIGHTS;
459 *((int *)CMSG_DATA(cmptr)) = 1;
460
461 vec[0].iov_base = (void*)&sv;
462 vec[0].iov_len = sizeof(sv);
463 got = sendmsg(sock, &msg, 0);
41e4abd8
NC
464
465 if(got < 0) {
bf357333 466 perror("Debug leaking scalars parent sendmsg failed");
41e4abd8
NC
467 abort();
468 }
bf357333
NC
469 if(got < sizeof(sv)) {
470 perror("Debug leaking scalars parent short sendmsg");
41e4abd8
NC
471 abort();
472 }
473
808ad2d0
NC
474 /* Return protocol is
475 int: errno value
476 unsigned char: length of location string (0 for empty)
477 unsigned char*: string (not terminated)
478 */
479 vec[0].iov_base = (void*)&returned_errno;
480 vec[0].iov_len = sizeof(returned_errno);
481 vec[1].iov_base = buffer;
482 vec[1].iov_len = 1;
483
484 got = readv(sock, vec, 2);
41e4abd8
NC
485
486 if(got < 0) {
487 perror("Debug leaking scalars parent read failed");
808ad2d0 488 PerlIO_flush(PerlIO_stderr());
41e4abd8
NC
489 abort();
490 }
808ad2d0 491 if(got < sizeof(returned_errno) + 1) {
41e4abd8 492 perror("Debug leaking scalars parent short read");
808ad2d0 493 PerlIO_flush(PerlIO_stderr());
41e4abd8
NC
494 abort();
495 }
496
808ad2d0
NC
497 if (*buffer) {
498 got = read(sock, buffer + 1, *buffer);
499 if(got < 0) {
500 perror("Debug leaking scalars parent read 2 failed");
501 PerlIO_flush(PerlIO_stderr());
502 abort();
503 }
504
505 if(got < *buffer) {
506 perror("Debug leaking scalars parent short read 2");
507 PerlIO_flush(PerlIO_stderr());
508 abort();
509 }
510 }
511
512 if (returned_errno || *buffer) {
513 Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno"
514 " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1,
515 returned_errno, strerror(returned_errno));
41e4abd8
NC
516 }
517}
518#endif
519
62375a60 520/*
954c1994
GS
521=for apidoc perl_destruct
522
523Shuts down a Perl interpreter. See L<perlembed>.
524
525=cut
526*/
527
31d77e54 528int
0cb96387 529perl_destruct(pTHXx)
79072805 530{
27da23d5 531 dVAR;
be2ea8ed 532 VOL signed char destruct_level; /* see possible values in intrpvar.h */
a0d0e21e 533 HV *hv;
2aa47728 534#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
2aa47728
NC
535 pid_t child;
536#endif
8990e307 537
7918f24d
NC
538 PERL_ARGS_ASSERT_PERL_DESTRUCT;
539#ifndef MULTIPLICITY
ed6c66dd 540 PERL_UNUSED_ARG(my_perl);
7918f24d 541#endif
9d4ba2ae 542
3d22c4f0
GG
543 assert(PL_scopestack_ix == 1);
544
7766f137
GS
545 /* wait for all pseudo-forked children to finish */
546 PERL_WAIT_FOR_CHILDREN;
547
3280af22 548 destruct_level = PL_perl_destruct_level;
4633a7c4
LW
549#ifdef DEBUGGING
550 {
9d4ba2ae
AL
551 const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
552 if (s) {
e1ec3a88 553 const int i = atoi(s);
5f05dabc 554 if (destruct_level < i)
555 destruct_level = i;
556 }
4633a7c4
LW
557 }
558#endif
559
27da23d5 560 if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
f3faeb53
AB
561 dJMPENV;
562 int x = 0;
563
564 JMPENV_PUSH(x);
1b6737cc 565 PERL_UNUSED_VAR(x);
f3faeb53
AB
566 if (PL_endav && !PL_minus_c)
567 call_list(PL_scopestack_ix, PL_endav);
568 JMPENV_POP;
26f423df 569 }
f3faeb53 570 LEAVE;
a0d0e21e 571 FREETMPS;
3d22c4f0 572 assert(PL_scopestack_ix == 0);
a0d0e21e 573
e00b64d4 574 /* Need to flush since END blocks can produce output */
f13a2bc0 575 my_fflush_all();
e00b64d4 576
16c91539 577 if (PL_threadhook(aTHX)) {
62375a60 578 /* Threads hook has vetoed further cleanup */
c301d606 579 PL_veto_cleanup = TRUE;
37038d91 580 return STATUS_EXIT;
62375a60
NIS
581 }
582
2aa47728
NC
583#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
584 if (destruct_level != 0) {
585 /* Fork here to create a child. Our child's job is to preserve the
586 state of scalars prior to destruction, so that we can instruct it
587 to dump any scalars that we later find have leaked.
588 There's no subtlety in this code - it assumes POSIX, and it doesn't
589 fail gracefully */
590 int fd[2];
591
592 if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
593 perror("Debug leaking scalars socketpair failed");
594 abort();
595 }
596
597 child = fork();
598 if(child == -1) {
599 perror("Debug leaking scalars fork failed");
600 abort();
601 }
602 if (!child) {
603 /* We are the child */
3125a5a4
NC
604 const int sock = fd[1];
605 const int debug_fd = PerlIO_fileno(Perl_debug_log);
606 int f;
808ad2d0
NC
607 const char *where;
608 /* Our success message is an integer 0, and a char 0 */
b61433a9 609 static const char success[sizeof(int) + 1] = {0};
3125a5a4 610
2aa47728 611 close(fd[0]);
2aa47728 612
3125a5a4
NC
613 /* We need to close all other file descriptors otherwise we end up
614 with interesting hangs, where the parent closes its end of a
615 pipe, and sits waiting for (another) child to terminate. Only
616 that child never terminates, because it never gets EOF, because
bf357333
NC
617 we also have the far end of the pipe open. We even need to
618 close the debugging fd, because sometimes it happens to be one
619 end of a pipe, and a process is waiting on the other end for
620 EOF. Normally it would be closed at some point earlier in
621 destruction, but if we happen to cause the pipe to remain open,
622 EOF never occurs, and we get an infinite hang. Hence all the
623 games to pass in a file descriptor if it's actually needed. */
3125a5a4
NC
624
625 f = sysconf(_SC_OPEN_MAX);
626 if(f < 0) {
808ad2d0
NC
627 where = "sysconf failed";
628 goto abort;
3125a5a4
NC
629 }
630 while (f--) {
631 if (f == sock)
632 continue;
3125a5a4
NC
633 close(f);
634 }
635
2aa47728
NC
636 while (1) {
637 SV *target;
bf357333
NC
638 union control_un control;
639 struct msghdr msg;
640 struct iovec vec[1];
641 struct cmsghdr *cmptr;
642 ssize_t got;
643 int got_fd;
644
645 msg.msg_control = control.control;
646 msg.msg_controllen = sizeof(control.control);
647 /* We're a connected socket so we don't need a source */
648 msg.msg_name = NULL;
649 msg.msg_namelen = 0;
650 msg.msg_iov = vec;
651 msg.msg_iovlen = sizeof(vec)/sizeof(vec[0]);
652
653 vec[0].iov_base = (void*)&target;
654 vec[0].iov_len = sizeof(target);
655
656 got = recvmsg(sock, &msg, 0);
2aa47728
NC
657
658 if(got == 0)
659 break;
660 if(got < 0) {
808ad2d0
NC
661 where = "recv failed";
662 goto abort;
2aa47728
NC
663 }
664 if(got < sizeof(target)) {
808ad2d0
NC
665 where = "short recv";
666 goto abort;
2aa47728 667 }
bf357333 668
808ad2d0
NC
669 if(!(cmptr = CMSG_FIRSTHDR(&msg))) {
670 where = "no cmsg";
671 goto abort;
672 }
673 if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) {
674 where = "wrong cmsg_len";
675 goto abort;
676 }
677 if(cmptr->cmsg_level != SOL_SOCKET) {
678 where = "wrong cmsg_level";
679 goto abort;
680 }
681 if(cmptr->cmsg_type != SCM_RIGHTS) {
682 where = "wrong cmsg_type";
683 goto abort;
684 }
bf357333
NC
685
686 got_fd = *(int*)CMSG_DATA(cmptr);
687 /* For our last little bit of trickery, put the file descriptor
688 back into Perl_debug_log, as if we never actually closed it
689 */
808ad2d0
NC
690 if(got_fd != debug_fd) {
691 if (dup2(got_fd, debug_fd) == -1) {
692 where = "dup2";
693 goto abort;
694 }
695 }
2aa47728 696 sv_dump(target);
bf357333 697
2aa47728
NC
698 PerlIO_flush(Perl_debug_log);
699
808ad2d0 700 got = write(sock, &success, sizeof(success));
2aa47728
NC
701
702 if(got < 0) {
808ad2d0
NC
703 where = "write failed";
704 goto abort;
2aa47728 705 }
808ad2d0
NC
706 if(got < sizeof(success)) {
707 where = "short write";
708 goto abort;
2aa47728
NC
709 }
710 }
711 _exit(0);
808ad2d0
NC
712 abort:
713 {
714 int send_errno = errno;
715 unsigned char length = (unsigned char) strlen(where);
716 struct iovec failure[3] = {
717 {(void*)&send_errno, sizeof(send_errno)},
718 {&length, 1},
719 {(void*)where, length}
720 };
721 int got = writev(sock, failure, 3);
722 /* Bad news travels fast. Faster than data. We'll get a SIGPIPE
723 in the parent if we try to read from the socketpair after the
724 child has exited, even if there was data to read.
725 So sleep a bit to give the parent a fighting chance of
726 reading the data. */
727 sleep(2);
728 _exit((got == -1) ? errno : 0);
729 }
bf357333 730 /* End of child. */
2aa47728 731 }
41e4abd8 732 PL_dumper_fd = fd[0];
2aa47728
NC
733 close(fd[1]);
734 }
735#endif
736
ff0cee69 737 /* We must account for everything. */
738
739 /* Destroy the main CV and syntax tree */
17fbfdf6
NC
740 /* Do this now, because destroying ops can cause new SVs to be generated
741 in Perl_pad_swipe, and when running with -DDEBUG_LEAKING_SCALARS they
742 PL_curcop to point to a valid op from which the filename structure
743 member is copied. */
744 PL_curcop = &PL_compiling;
3280af22 745 if (PL_main_root) {
4e380990
DM
746 /* ensure comppad/curpad to refer to main's pad */
747 if (CvPADLIST(PL_main_cv)) {
748 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1);
749 }
3280af22 750 op_free(PL_main_root);
5f66b61c 751 PL_main_root = NULL;
a0d0e21e 752 }
5f66b61c 753 PL_main_start = NULL;
aac9d523
DM
754 /* note that PL_main_cv isn't usually actually freed at this point,
755 * due to the CvOUTSIDE refs from subs compiled within it. It will
756 * get freed once all the subs are freed in sv_clean_all(), for
757 * destruct_level > 0 */
3280af22 758 SvREFCNT_dec(PL_main_cv);
601f1833 759 PL_main_cv = NULL;
24d3c518 760 PL_dirty = TRUE;
ff0cee69 761
13621cfb
NIS
762 /* Tell PerlIO we are about to tear things apart in case
763 we have layers which are using resources that should
764 be cleaned up now.
765 */
766
767 PerlIO_destruct(aTHX);
768
3280af22 769 if (PL_sv_objcount) {
a0d0e21e
LW
770 /*
771 * Try to destruct global references. We do this first so that the
772 * destructors and destructees still exist. Some sv's might remain.
773 * Non-referenced objects are on their own.
774 */
a0d0e21e 775 sv_clean_objs();
bf9cdc68 776 PL_sv_objcount = 0;
8990e307
LW
777 }
778
5cd24f17 779 /* unhook hooks which will soon be, or use, destroyed data */
3280af22 780 SvREFCNT_dec(PL_warnhook);
a0714e2c 781 PL_warnhook = NULL;
3280af22 782 SvREFCNT_dec(PL_diehook);
a0714e2c 783 PL_diehook = NULL;
5cd24f17 784
4b556e6c 785 /* call exit list functions */
3280af22 786 while (PL_exitlistlen-- > 0)
acfe0abc 787 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
4b556e6c 788
3280af22 789 Safefree(PL_exitlist);
4b556e6c 790
1c4916e5
CB
791 PL_exitlist = NULL;
792 PL_exitlistlen = 0;
793
a3e6e81e
NC
794 SvREFCNT_dec(PL_registered_mros);
795
551a8b83 796 /* jettison our possibly duplicated environment */
4b647fb0
DM
797 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
798 * so we certainly shouldn't free it here
799 */
2f42fcb0 800#ifndef PERL_MICRO
4b647fb0 801#if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
50acdf95 802 if (environ != PL_origenviron && !PL_use_safe_putenv
4efc5df6
GS
803#ifdef USE_ITHREADS
804 /* only main thread can free environ[0] contents */
805 && PL_curinterp == aTHX
806#endif
807 )
808 {
551a8b83
JH
809 I32 i;
810
811 for (i = 0; environ[i]; i++)
4b420006 812 safesysfree(environ[i]);
0631ea03 813
4b420006
JH
814 /* Must use safesysfree() when working with environ. */
815 safesysfree(environ);
551a8b83
JH
816
817 environ = PL_origenviron;
818 }
819#endif
2f42fcb0 820#endif /* !PERL_MICRO */
551a8b83 821
30985c42
JH
822 if (destruct_level == 0) {
823
824 DEBUG_P(debprofdump());
825
826#if defined(PERLIO_LAYERS)
827 /* No more IO - including error messages ! */
828 PerlIO_cleanup(aTHX);
829#endif
830
831 CopFILE_free(&PL_compiling);
832 CopSTASH_free(&PL_compiling);
833
834 /* The exit() function will do everything that needs doing. */
835 return STATUS_EXIT;
836 }
837
5f8cb046
DM
838#ifdef USE_ITHREADS
839 /* the syntax tree is shared between clones
840 * so op_free(PL_main_root) only ReREFCNT_dec's
841 * REGEXPs in the parent interpreter
842 * we need to manually ReREFCNT_dec for the clones
843 */
5f8cb046 844 SvREFCNT_dec(PL_regex_padav);
7d49f689 845 PL_regex_padav = NULL;
5f8cb046
DM
846 PL_regex_pad = NULL;
847#endif
848
ad64d0ec 849 SvREFCNT_dec(MUTABLE_SV(PL_stashcache));
081fc587
AB
850 PL_stashcache = NULL;
851
5f05dabc 852 /* loosen bonds of global variables */
853
2f9285f8
DM
854 /* XXX can PL_parser still be non-null here? */
855 if(PL_parser && PL_parser->rsfp) {
856 (void)PerlIO_close(PL_parser->rsfp);
857 PL_parser->rsfp = NULL;
8ebc5c01 858 }
859
84386e14
RGS
860 if (PL_minus_F) {
861 Safefree(PL_splitstr);
862 PL_splitstr = NULL;
863 }
864
8ebc5c01 865 /* switches */
3280af22
NIS
866 PL_minus_n = FALSE;
867 PL_minus_p = FALSE;
868 PL_minus_l = FALSE;
869 PL_minus_a = FALSE;
870 PL_minus_F = FALSE;
871 PL_doswitches = FALSE;
599cee73 872 PL_dowarn = G_WARN_OFF;
3280af22
NIS
873 PL_doextract = FALSE;
874 PL_sawampersand = FALSE; /* must save all match strings */
3280af22
NIS
875 PL_unsafe = FALSE;
876
877 Safefree(PL_inplace);
bd61b366 878 PL_inplace = NULL;
a7cb1f99 879 SvREFCNT_dec(PL_patchlevel);
1e8125c6 880 SvREFCNT_dec(PL_apiversion);
3280af22
NIS
881
882 if (PL_e_script) {
883 SvREFCNT_dec(PL_e_script);
a0714e2c 884 PL_e_script = NULL;
8ebc5c01 885 }
886
bf9cdc68
RG
887 PL_perldb = 0;
888
8ebc5c01 889 /* magical thingies */
890
e23d9e2f
CS
891 SvREFCNT_dec(PL_ofsgv); /* *, */
892 PL_ofsgv = NULL;
5f05dabc 893
7889fe52 894 SvREFCNT_dec(PL_ors_sv); /* $\ */
a0714e2c 895 PL_ors_sv = NULL;
8ebc5c01 896
3280af22 897 SvREFCNT_dec(PL_rs); /* $/ */
a0714e2c 898 PL_rs = NULL;
dc92893f 899
d33b2eba 900 Safefree(PL_osname); /* $^O */
bd61b366 901 PL_osname = NULL;
5f05dabc 902
3280af22 903 SvREFCNT_dec(PL_statname);
a0714e2c
SS
904 PL_statname = NULL;
905 PL_statgv = NULL;
5f05dabc 906
8ebc5c01 907 /* defgv, aka *_ should be taken care of elsewhere */
908
8ebc5c01 909 /* clean up after study() */
3280af22 910 SvREFCNT_dec(PL_lastscream);
a0714e2c 911 PL_lastscream = NULL;
3280af22
NIS
912 Safefree(PL_screamfirst);
913 PL_screamfirst = 0;
914 Safefree(PL_screamnext);
915 PL_screamnext = 0;
8ebc5c01 916
7d5ea4e7
GS
917 /* float buffer */
918 Safefree(PL_efloatbuf);
bd61b366 919 PL_efloatbuf = NULL;
7d5ea4e7
GS
920 PL_efloatsize = 0;
921
8ebc5c01 922 /* startup and shutdown function lists */
3280af22 923 SvREFCNT_dec(PL_beginav);
5a837c8f 924 SvREFCNT_dec(PL_beginav_save);
3280af22 925 SvREFCNT_dec(PL_endav);
7d30b5c4 926 SvREFCNT_dec(PL_checkav);
ece599bd 927 SvREFCNT_dec(PL_checkav_save);
3c10abe3
AG
928 SvREFCNT_dec(PL_unitcheckav);
929 SvREFCNT_dec(PL_unitcheckav_save);
3280af22 930 SvREFCNT_dec(PL_initav);
7d49f689
NC
931 PL_beginav = NULL;
932 PL_beginav_save = NULL;
933 PL_endav = NULL;
934 PL_checkav = NULL;
935 PL_checkav_save = NULL;
3c10abe3
AG
936 PL_unitcheckav = NULL;
937 PL_unitcheckav_save = NULL;
7d49f689 938 PL_initav = NULL;
5618dfe8 939
8ebc5c01 940 /* shortcuts just get cleared */
a0714e2c
SS
941 PL_envgv = NULL;
942 PL_incgv = NULL;
943 PL_hintgv = NULL;
944 PL_errgv = NULL;
945 PL_argvgv = NULL;
946 PL_argvoutgv = NULL;
947 PL_stdingv = NULL;
948 PL_stderrgv = NULL;
949 PL_last_in_gv = NULL;
950 PL_replgv = NULL;
951 PL_DBgv = NULL;
952 PL_DBline = NULL;
953 PL_DBsub = NULL;
954 PL_DBsingle = NULL;
955 PL_DBtrace = NULL;
956 PL_DBsignal = NULL;
601f1833 957 PL_DBcv = NULL;
7d49f689 958 PL_dbargs = NULL;
5c284bb0 959 PL_debstash = NULL;
8ebc5c01 960
7a1c5554 961 SvREFCNT_dec(PL_argvout_stack);
7d49f689 962 PL_argvout_stack = NULL;
8ebc5c01 963
5c831c24 964 SvREFCNT_dec(PL_modglobal);
5c284bb0 965 PL_modglobal = NULL;
5c831c24 966 SvREFCNT_dec(PL_preambleav);
7d49f689 967 PL_preambleav = NULL;
5c831c24 968 SvREFCNT_dec(PL_subname);
a0714e2c 969 PL_subname = NULL;
ca0c25f6 970#ifdef PERL_USES_PL_PIDSTATUS
5c831c24 971 SvREFCNT_dec(PL_pidstatus);
5c284bb0 972 PL_pidstatus = NULL;
ca0c25f6 973#endif
5c831c24 974 SvREFCNT_dec(PL_toptarget);
a0714e2c 975 PL_toptarget = NULL;
5c831c24 976 SvREFCNT_dec(PL_bodytarget);
a0714e2c
SS
977 PL_bodytarget = NULL;
978 PL_formtarget = NULL;
5c831c24 979
d33b2eba 980 /* free locale stuff */
b9582b6a 981#ifdef USE_LOCALE_COLLATE
d33b2eba 982 Safefree(PL_collation_name);
bd61b366 983 PL_collation_name = NULL;
b9582b6a 984#endif
d33b2eba 985
b9582b6a 986#ifdef USE_LOCALE_NUMERIC
d33b2eba 987 Safefree(PL_numeric_name);
bd61b366 988 PL_numeric_name = NULL;
a453c169 989 SvREFCNT_dec(PL_numeric_radix_sv);
a0714e2c 990 PL_numeric_radix_sv = NULL;
b9582b6a 991#endif
d33b2eba 992
5c831c24
GS
993 /* clear utf8 character classes */
994 SvREFCNT_dec(PL_utf8_alnum);
5c831c24
GS
995 SvREFCNT_dec(PL_utf8_ascii);
996 SvREFCNT_dec(PL_utf8_alpha);
997 SvREFCNT_dec(PL_utf8_space);
998 SvREFCNT_dec(PL_utf8_cntrl);
999 SvREFCNT_dec(PL_utf8_graph);
1000 SvREFCNT_dec(PL_utf8_digit);
1001 SvREFCNT_dec(PL_utf8_upper);
1002 SvREFCNT_dec(PL_utf8_lower);
1003 SvREFCNT_dec(PL_utf8_print);
1004 SvREFCNT_dec(PL_utf8_punct);
1005 SvREFCNT_dec(PL_utf8_xdigit);
1006 SvREFCNT_dec(PL_utf8_mark);
1007 SvREFCNT_dec(PL_utf8_toupper);
4dbdbdc2 1008 SvREFCNT_dec(PL_utf8_totitle);
5c831c24 1009 SvREFCNT_dec(PL_utf8_tolower);
b4e400f9 1010 SvREFCNT_dec(PL_utf8_tofold);
82686b01
JH
1011 SvREFCNT_dec(PL_utf8_idstart);
1012 SvREFCNT_dec(PL_utf8_idcont);
a0714e2c 1013 PL_utf8_alnum = NULL;
a0714e2c
SS
1014 PL_utf8_ascii = NULL;
1015 PL_utf8_alpha = NULL;
1016 PL_utf8_space = NULL;
1017 PL_utf8_cntrl = NULL;
1018 PL_utf8_graph = NULL;
1019 PL_utf8_digit = NULL;
1020 PL_utf8_upper = NULL;
1021 PL_utf8_lower = NULL;
1022 PL_utf8_print = NULL;
1023 PL_utf8_punct = NULL;
1024 PL_utf8_xdigit = NULL;
1025 PL_utf8_mark = NULL;
1026 PL_utf8_toupper = NULL;
1027 PL_utf8_totitle = NULL;
1028 PL_utf8_tolower = NULL;
1029 PL_utf8_tofold = NULL;
1030 PL_utf8_idstart = NULL;
1031 PL_utf8_idcont = NULL;
5c831c24 1032
971a9dd3 1033 if (!specialWARN(PL_compiling.cop_warnings))
72dc9ed5 1034 PerlMemShared_free(PL_compiling.cop_warnings);
a0714e2c 1035 PL_compiling.cop_warnings = NULL;
c28fe1ec
NC
1036 Perl_refcounted_he_free(aTHX_ PL_compiling.cop_hints_hash);
1037 PL_compiling.cop_hints_hash = NULL;
05ec9bb3
NIS
1038 CopFILE_free(&PL_compiling);
1039 CopSTASH_free(&PL_compiling);
5c831c24 1040
a0d0e21e 1041 /* Prepare to destruct main symbol table. */
5f05dabc 1042
3280af22 1043 hv = PL_defstash;
ca556bcd
DM
1044 /* break ref loop *:: <=> %:: */
1045 (void)hv_delete(hv, "main::", 6, G_DISCARD);
3280af22 1046 PL_defstash = 0;
a0d0e21e 1047 SvREFCNT_dec(hv);
5c831c24 1048 SvREFCNT_dec(PL_curstname);
a0714e2c 1049 PL_curstname = NULL;
a0d0e21e 1050
5a844595
GS
1051 /* clear queued errors */
1052 SvREFCNT_dec(PL_errors);
a0714e2c 1053 PL_errors = NULL;
5a844595 1054
dd69841b
BB
1055 SvREFCNT_dec(PL_isarev);
1056
a0d0e21e 1057 FREETMPS;
9b387841 1058 if (destruct_level >= 2) {
3280af22 1059 if (PL_scopestack_ix != 0)
9b387841
NC
1060 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1061 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
1062 (long)PL_scopestack_ix);
3280af22 1063 if (PL_savestack_ix != 0)
9b387841
NC
1064 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1065 "Unbalanced saves: %ld more saves than restores\n",
1066 (long)PL_savestack_ix);
3280af22 1067 if (PL_tmps_floor != -1)
9b387841
NC
1068 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
1069 (long)PL_tmps_floor + 1);
a0d0e21e 1070 if (cxstack_ix != -1)
9b387841
NC
1071 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
1072 (long)cxstack_ix + 1);
a0d0e21e 1073 }
8990e307 1074
776df701 1075#ifdef PERL_IMPLICIT_CONTEXT
57bb2458
JH
1076 /* the entries in this list are allocated via SV PVX's, so get freed
1077 * in sv_clean_all */
1078 Safefree(PL_my_cxt_list);
776df701 1079#endif
57bb2458 1080
8990e307 1081 /* Now absolutely destruct everything, somehow or other, loops or no. */
5226ed68
JH
1082
1083 /* the 2 is for PL_fdpid and PL_strtab */
d17ea597 1084 while (sv_clean_all() > 2)
5226ed68
JH
1085 ;
1086
d4777f27
GS
1087 AvREAL_off(PL_fdpid); /* no surviving entries */
1088 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
7d49f689 1089 PL_fdpid = NULL;
d33b2eba 1090
6c644e78
GS
1091#ifdef HAVE_INTERP_INTERN
1092 sys_intern_clear();
1093#endif
1094
6e72f9df 1095 /* Destruct the global string table. */
1096 {
1097 /* Yell and reset the HeVAL() slots that are still holding refcounts,
1098 * so that sv_free() won't fail on them.
80459961
NC
1099 * Now that the global string table is using a single hunk of memory
1100 * for both HE and HEK, we either need to explicitly unshare it the
1101 * correct way, or actually free things here.
6e72f9df 1102 */
80459961
NC
1103 I32 riter = 0;
1104 const I32 max = HvMAX(PL_strtab);
c4420975 1105 HE * const * const array = HvARRAY(PL_strtab);
80459961
NC
1106 HE *hent = array[0];
1107
6e72f9df 1108 for (;;) {
0453d815 1109 if (hent && ckWARN_d(WARN_INTERNAL)) {
44f8325f 1110 HE * const next = HeNEXT(hent);
9014280d 1111 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
44f8325f 1112 "Unbalanced string table refcount: (%ld) for \"%s\"",
de616631 1113 (long)hent->he_valu.hent_refcount, HeKEY(hent));
80459961
NC
1114 Safefree(hent);
1115 hent = next;
6e72f9df 1116 }
1117 if (!hent) {
1118 if (++riter > max)
1119 break;
1120 hent = array[riter];
1121 }
1122 }
80459961
NC
1123
1124 Safefree(array);
1125 HvARRAY(PL_strtab) = 0;
1126 HvTOTALKEYS(PL_strtab) = 0;
6e72f9df 1127 }
3280af22 1128 SvREFCNT_dec(PL_strtab);
6e72f9df 1129
e652bb2f 1130#ifdef USE_ITHREADS
c21d1a0f 1131 /* free the pointer tables used for cloning */
a0739874 1132 ptr_table_free(PL_ptr_table);
bf9cdc68 1133 PL_ptr_table = (PTR_TBL_t*)NULL;
53186e96 1134#endif
a0739874 1135
d33b2eba
GS
1136 /* free special SVs */
1137
1138 SvREFCNT(&PL_sv_yes) = 0;
1139 sv_clear(&PL_sv_yes);
1140 SvANY(&PL_sv_yes) = NULL;
4c5e2b0d 1141 SvFLAGS(&PL_sv_yes) = 0;
d33b2eba
GS
1142
1143 SvREFCNT(&PL_sv_no) = 0;
1144 sv_clear(&PL_sv_no);
1145 SvANY(&PL_sv_no) = NULL;
4c5e2b0d 1146 SvFLAGS(&PL_sv_no) = 0;
01724ea0 1147
9f375a43
DM
1148 {
1149 int i;
1150 for (i=0; i<=2; i++) {
1151 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
1152 sv_clear(PERL_DEBUG_PAD(i));
1153 SvANY(PERL_DEBUG_PAD(i)) = NULL;
1154 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
1155 }
1156 }
1157
0453d815 1158 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
9014280d 1159 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
6e72f9df 1160
eba0f806
DM
1161#ifdef DEBUG_LEAKING_SCALARS
1162 if (PL_sv_count != 0) {
1163 SV* sva;
1164 SV* sv;
1165 register SV* svend;
1166
ad64d0ec 1167 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
eba0f806
DM
1168 svend = &sva[SvREFCNT(sva)];
1169 for (sv = sva + 1; sv < svend; ++sv) {
1170 if (SvTYPE(sv) != SVTYPEMASK) {
a548cda8 1171 PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p"
61b61456 1172 " flags=0x%"UVxf
fd0854ff 1173 " refcnt=%"UVuf pTHX__FORMAT "\n"
cd676548
DM
1174 "\tallocated at %s:%d %s %s (parent 0x%"UVxf");"
1175 "serial %"UVuf"\n",
574b8821
NC
1176 (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt
1177 pTHX__VALUE,
fd0854ff
DM
1178 sv->sv_debug_file ? sv->sv_debug_file : "(unknown)",
1179 sv->sv_debug_line,
1180 sv->sv_debug_inpad ? "for" : "by",
1181 sv->sv_debug_optype ?
1182 PL_op_name[sv->sv_debug_optype]: "(none)",
cd676548 1183 PTR2UV(sv->sv_debug_parent),
cbe56f1d 1184 sv->sv_debug_serial
fd0854ff 1185 );
2aa47728 1186#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
41e4abd8 1187 Perl_dump_sv_child(aTHX_ sv);
2aa47728 1188#endif
eba0f806
DM
1189 }
1190 }
1191 }
1192 }
2aa47728
NC
1193#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
1194 {
1195 int status;
1196 fd_set rset;
1197 /* Wait for up to 4 seconds for child to terminate.
1198 This seems to be the least effort way of timing out on reaping
1199 its exit status. */
1200 struct timeval waitfor = {4, 0};
41e4abd8 1201 int sock = PL_dumper_fd;
2aa47728
NC
1202
1203 shutdown(sock, 1);
1204 FD_ZERO(&rset);
1205 FD_SET(sock, &rset);
1206 select(sock + 1, &rset, NULL, NULL, &waitfor);
1207 waitpid(child, &status, WNOHANG);
1208 close(sock);
1209 }
1210#endif
eba0f806 1211#endif
77abb4c6
NC
1212#ifdef DEBUG_LEAKING_SCALARS_ABORT
1213 if (PL_sv_count)
1214 abort();
1215#endif
bf9cdc68 1216 PL_sv_count = 0;
eba0f806 1217
f1fac472
NC
1218#ifdef PERL_DEBUG_READONLY_OPS
1219 free(PL_slabs);
1220 PL_slabs = NULL;
1221 PL_slab_count = 0;
1222#endif
eba0f806 1223
56a2bab7 1224#if defined(PERLIO_LAYERS)
3a1ee7e8
NIS
1225 /* No more IO - including error messages ! */
1226 PerlIO_cleanup(aTHX);
1227#endif
1228
9f4bd222 1229 /* sv_undef needs to stay immortal until after PerlIO_cleanup
a0714e2c 1230 as currently layers use it rather than NULL as a marker
9f4bd222
NIS
1231 for no arg - and will try and SvREFCNT_dec it.
1232 */
1233 SvREFCNT(&PL_sv_undef) = 0;
1234 SvREADONLY_off(&PL_sv_undef);
1235
3280af22 1236 Safefree(PL_origfilename);
bd61b366 1237 PL_origfilename = NULL;
3280af22 1238 Safefree(PL_reg_start_tmp);
bf9cdc68
RG
1239 PL_reg_start_tmp = (char**)NULL;
1240 PL_reg_start_tmpl = 0;
43c5f42d 1241 Safefree(PL_reg_curpm);
82ba1be6 1242 Safefree(PL_reg_poscache);
dd28f7bb 1243 free_tied_hv_pool();
3280af22 1244 Safefree(PL_op_mask);
cf36064f 1245 Safefree(PL_psig_name);
bf9cdc68 1246 PL_psig_name = (SV**)NULL;
d525a7b2 1247 PL_psig_ptr = (SV**)NULL;
31c91b43
LR
1248 {
1249 /* We need to NULL PL_psig_pend first, so that
1250 signal handlers know not to use it */
1251 int *psig_save = PL_psig_pend;
1252 PL_psig_pend = (int*)NULL;
1253 Safefree(psig_save);
1254 }
a0714e2c 1255 PL_formfeed = NULL;
6e72f9df 1256 nuke_stacks();
bf9cdc68
RG
1257 PL_tainting = FALSE;
1258 PL_taint_warn = FALSE;
3280af22 1259 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
bf9cdc68 1260 PL_debug = 0;
ac27b0f5 1261
a0d0e21e 1262 DEBUG_P(debprofdump());
d33b2eba 1263
e5dd39fc 1264#ifdef USE_REENTRANT_API
10bc17b6 1265 Perl_reentrant_free(aTHX);
e5dd39fc
AB
1266#endif
1267
612f20c3
GS
1268 sv_free_arenas();
1269
5d9a96ca
DM
1270 while (PL_regmatch_slab) {
1271 regmatch_slab *s = PL_regmatch_slab;
1272 PL_regmatch_slab = PL_regmatch_slab->next;
1273 Safefree(s);
1274 }
1275
fc36a67e 1276 /* As the absolutely last thing, free the non-arena SV for mess() */
1277
3280af22 1278 if (PL_mess_sv) {
f350b448
NC
1279 /* we know that type == SVt_PVMG */
1280
9c63abab 1281 /* it could have accumulated taint magic */
f350b448
NC
1282 MAGIC* mg;
1283 MAGIC* moremagic;
1284 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
1285 moremagic = mg->mg_moremagic;
1286 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
1287 && mg->mg_len >= 0)
1288 Safefree(mg->mg_ptr);
1289 Safefree(mg);
9c63abab 1290 }
f350b448 1291
fc36a67e 1292 /* we know that type >= SVt_PV */
8bd4d4c5 1293 SvPV_free(PL_mess_sv);
3280af22
NIS
1294 Safefree(SvANY(PL_mess_sv));
1295 Safefree(PL_mess_sv);
a0714e2c 1296 PL_mess_sv = NULL;
fc36a67e 1297 }
37038d91 1298 return STATUS_EXIT;
79072805
LW
1299}
1300
954c1994
GS
1301/*
1302=for apidoc perl_free
1303
1304Releases a Perl interpreter. See L<perlembed>.
1305
1306=cut
1307*/
1308
79072805 1309void
0cb96387 1310perl_free(pTHXx)
79072805 1311{
5174512c
NC
1312 dVAR;
1313
7918f24d
NC
1314 PERL_ARGS_ASSERT_PERL_FREE;
1315
c301d606
DM
1316 if (PL_veto_cleanup)
1317 return;
1318
7cb608b5 1319#ifdef PERL_TRACK_MEMPOOL
55ef9aae
MHM
1320 {
1321 /*
1322 * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero
1323 * value as we're probably hunting memory leaks then
1324 */
1325 const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
1326 if (!s || atoi(s) == 0) {
4fd0a9b8 1327 const U32 old_debug = PL_debug;
55ef9aae
MHM
1328 /* Emulate the PerlHost behaviour of free()ing all memory allocated in this
1329 thread at thread exit. */
4fd0a9b8
NC
1330 if (DEBUG_m_TEST) {
1331 PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we "
1332 "free this thread's memory\n");
1333 PL_debug &= ~ DEBUG_m_FLAG;
1334 }
55ef9aae
MHM
1335 while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header))
1336 safesysfree(sTHX + (char *)(aTHXx->Imemory_debug_header.next));
4fd0a9b8 1337 PL_debug = old_debug;
55ef9aae
MHM
1338 }
1339 }
7cb608b5
NC
1340#endif
1341
acfe0abc 1342#if defined(WIN32) || defined(NETWARE)
ce3e5b80 1343# if defined(PERL_IMPLICIT_SYS)
b36c9a52 1344 {
acfe0abc 1345# ifdef NETWARE
7af12a34 1346 void *host = nw_internal_host;
acfe0abc 1347# else
7af12a34 1348 void *host = w32_internal_host;
acfe0abc 1349# endif
7af12a34 1350 PerlMem_free(aTHXx);
acfe0abc 1351# ifdef NETWARE
7af12a34 1352 nw_delete_internal_host(host);
acfe0abc 1353# else
7af12a34 1354 win32_delete_internal_host(host);
acfe0abc 1355# endif
7af12a34 1356 }
1c0ca838
GS
1357# else
1358 PerlMem_free(aTHXx);
1359# endif
acfe0abc
GS
1360#else
1361 PerlMem_free(aTHXx);
76e3520e 1362#endif
79072805
LW
1363}
1364
b7f7fff6 1365#if defined(USE_ITHREADS)
aebd1ac7
GA
1366/* provide destructors to clean up the thread key when libperl is unloaded */
1367#ifndef WIN32 /* handled during DLL_PROCESS_DETACH in win32/perllib.c */
1368
826955bd 1369#if defined(__hpux) && !(defined(__ux_version) && __ux_version <= 1020) && !defined(__GNUC__)
aebd1ac7 1370#pragma fini "perl_fini"
666ad1ec
GA
1371#elif defined(__sun) && !defined(__GNUC__)
1372#pragma fini (perl_fini)
aebd1ac7
GA
1373#endif
1374
0dbb1585
AL
1375static void
1376#if defined(__GNUC__)
1377__attribute__((destructor))
aebd1ac7 1378#endif
de009b76 1379perl_fini(void)
aebd1ac7 1380{
27da23d5 1381 dVAR;
c301d606 1382 if (PL_curinterp && !PL_veto_cleanup)
aebd1ac7
GA
1383 FREE_THREAD_KEY;
1384}
1385
1386#endif /* WIN32 */
1387#endif /* THREADS */
1388
4b556e6c 1389void
864dbfa3 1390Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
4b556e6c 1391{
97aff369 1392 dVAR;
3280af22
NIS
1393 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
1394 PL_exitlist[PL_exitlistlen].fn = fn;
1395 PL_exitlist[PL_exitlistlen].ptr = ptr;
1396 ++PL_exitlistlen;
4b556e6c
JD
1397}
1398
56cf6df8
RGS
1399#ifdef HAS_PROCSELFEXE
1400/* This is a function so that we don't hold on to MAXPATHLEN
1401 bytes of stack longer than necessary
1402 */
1403STATIC void
e1ec3a88 1404S_procself_val(pTHX_ SV *sv, const char *arg0)
56cf6df8
RGS
1405{
1406 char buf[MAXPATHLEN];
1407 int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
1408
1409 /* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
1410 includes a spurious NUL which will cause $^X to fail in system
1411 or backticks (this will prevent extensions from being built and
1412 many tests from working). readlink is not meant to add a NUL.
1413 Normal readlink works fine.
1414 */
1415 if (len > 0 && buf[len-1] == '\0') {
1416 len--;
1417 }
1418
1419 /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
1420 returning the text "unknown" from the readlink rather than the path
1421 to the executable (or returning an error from the readlink). Any valid
1422 path has a '/' in it somewhere, so use that to validate the result.
1423 See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
1424 */
1425 if (len > 0 && memchr(buf, '/', len)) {
1426 sv_setpvn(sv,buf,len);
1427 }
1428 else {
1429 sv_setpv(sv,arg0);
1430 }
1431}
1432#endif /* HAS_PROCSELFEXE */
b7975bdd
NC
1433
1434STATIC void
1435S_set_caret_X(pTHX) {
97aff369 1436 dVAR;
fafc274c 1437 GV* tmpgv = gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL, SVt_PV); /* $^X */
b7975bdd
NC
1438 if (tmpgv) {
1439#ifdef HAS_PROCSELFEXE
1440 S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]);
1441#else
1442#ifdef OS2
c69033f2 1443 sv_setpv(GvSVn(tmpgv), os2_execname(aTHX));
b7975bdd 1444#else
c69033f2 1445 sv_setpv(GvSVn(tmpgv),PL_origargv[0]);
b7975bdd
NC
1446#endif
1447#endif
1448 }
1449}
1450
954c1994
GS
1451/*
1452=for apidoc perl_parse
1453
1454Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
1455
1456=cut
1457*/
1458
79072805 1459int
0cb96387 1460perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
8d063cd8 1461{
27da23d5 1462 dVAR;
6224f72b 1463 I32 oldscope;
6224f72b 1464 int ret;
db36c5a1 1465 dJMPENV;
8d063cd8 1466
7918f24d
NC
1467 PERL_ARGS_ASSERT_PERL_PARSE;
1468#ifndef MULTIPLICITY
ed6c66dd 1469 PERL_UNUSED_ARG(my_perl);
7918f24d 1470#endif
9d4ba2ae 1471
b0891165
JH
1472#if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT)
1473 /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0
103dd899 1474 * This MUST be done before any hash stores or fetches take place.
008fb0c0
NC
1475 * If you set PL_rehash_seed (and assumedly also PL_rehash_seed_set)
1476 * yourself, it is your responsibility to provide a good random seed!
830b38bd 1477 * You can also define PERL_HASH_SEED in compile time, see hv.h. */
008fb0c0
NC
1478 if (!PL_rehash_seed_set)
1479 PL_rehash_seed = get_hash_seed();
b0891165 1480 {
9d4ba2ae 1481 const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG");
bed60192 1482
1b6737cc
AL
1483 if (s && (atoi(s) == 1))
1484 PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n", PL_rehash_seed);
b0891165
JH
1485 }
1486#endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */
1487
3280af22 1488 PL_origargc = argc;
e2975953 1489 PL_origargv = argv;
a0d0e21e 1490
a2722ac9
GA
1491 if (PL_origalen != 0) {
1492 PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */
1493 }
1494 else {
3cb9023d
JH
1495 /* Set PL_origalen be the sum of the contiguous argv[]
1496 * elements plus the size of the env in case that it is
e9137a8e 1497 * contiguous with the argv[]. This is used in mg.c:Perl_magic_set()
3cb9023d
JH
1498 * as the maximum modifiable length of $0. In the worst case
1499 * the area we are able to modify is limited to the size of
43c32782 1500 * the original argv[0]. (See below for 'contiguous', though.)
3cb9023d 1501 * --jhi */
e1ec3a88 1502 const char *s = NULL;
54bfe034 1503 int i;
1b6737cc 1504 const UV mask =
7d8e7db3 1505 ~(UV)(PTRSIZE == 4 ? 3 : PTRSIZE == 8 ? 7 : PTRSIZE == 16 ? 15 : 0);
43c32782 1506 /* Do the mask check only if the args seem like aligned. */
1b6737cc 1507 const UV aligned =
43c32782
JH
1508 (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0]));
1509
1510 /* See if all the arguments are contiguous in memory. Note
1511 * that 'contiguous' is a loose term because some platforms
1512 * align the argv[] and the envp[]. If the arguments look
1513 * like non-aligned, assume that they are 'strictly' or
1514 * 'traditionally' contiguous. If the arguments look like
1515 * aligned, we just check that they are within aligned
1516 * PTRSIZE bytes. As long as no system has something bizarre
1517 * like the argv[] interleaved with some other data, we are
1518 * fine. (Did I just evoke Murphy's Law?) --jhi */
c8941eeb
JH
1519 if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) {
1520 while (*s) s++;
1521 for (i = 1; i < PL_origargc; i++) {
1522 if ((PL_origargv[i] == s + 1
43c32782 1523#ifdef OS2
c8941eeb 1524 || PL_origargv[i] == s + 2
43c32782 1525#endif
c8941eeb
JH
1526 )
1527 ||
1528 (aligned &&
1529 (PL_origargv[i] > s &&
1530 PL_origargv[i] <=
1531 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1532 )
1533 {
1534 s = PL_origargv[i];
1535 while (*s) s++;
1536 }
1537 else
1538 break;
54bfe034 1539 }
54bfe034 1540 }
a4a109c2
JD
1541
1542#ifndef PERL_USE_SAFE_PUTENV
3cb9023d 1543 /* Can we grab env area too to be used as the area for $0? */
a4a109c2 1544 if (s && PL_origenviron && !PL_use_safe_putenv) {
9d419b5f 1545 if ((PL_origenviron[0] == s + 1)
43c32782
JH
1546 ||
1547 (aligned &&
1548 (PL_origenviron[0] > s &&
1549 PL_origenviron[0] <=
1550 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1551 )
1552 {
9d419b5f 1553#ifndef OS2 /* ENVIRON is read by the kernel too. */
43c32782
JH
1554 s = PL_origenviron[0];
1555 while (*s) s++;
1556#endif
bd61b366 1557 my_setenv("NoNe SuCh", NULL);
43c32782
JH
1558 /* Force copy of environment. */
1559 for (i = 1; PL_origenviron[i]; i++) {
1560 if (PL_origenviron[i] == s + 1
1561 ||
1562 (aligned &&
1563 (PL_origenviron[i] > s &&
1564 PL_origenviron[i] <=
1565 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1566 )
1567 {
1568 s = PL_origenviron[i];
1569 while (*s) s++;
1570 }
1571 else
1572 break;
54bfe034 1573 }
43c32782 1574 }
54bfe034 1575 }
a4a109c2
JD
1576#endif /* !defined(PERL_USE_SAFE_PUTENV) */
1577
2d2af554 1578 PL_origalen = s ? s - PL_origargv[0] + 1 : 0;
54bfe034
JH
1579 }
1580
3280af22 1581 if (PL_do_undump) {
a0d0e21e
LW
1582
1583 /* Come here if running an undumped a.out. */
1584
3280af22
NIS
1585 PL_origfilename = savepv(argv[0]);
1586 PL_do_undump = FALSE;
a0d0e21e 1587 cxstack_ix = -1; /* start label stack again */
748a9306 1588 init_ids();
b7975bdd
NC
1589 assert (!PL_tainted);
1590 TAINT;
1591 S_set_caret_X(aTHX);
1592 TAINT_NOT;
a0d0e21e
LW
1593 init_postdump_symbols(argc,argv,env);
1594 return 0;
1595 }
1596
3280af22 1597 if (PL_main_root) {
3280af22 1598 op_free(PL_main_root);
5f66b61c 1599 PL_main_root = NULL;
ff0cee69 1600 }
5f66b61c 1601 PL_main_start = NULL;
3280af22 1602 SvREFCNT_dec(PL_main_cv);
601f1833 1603 PL_main_cv = NULL;
79072805 1604
3280af22
NIS
1605 time(&PL_basetime);
1606 oldscope = PL_scopestack_ix;
599cee73 1607 PL_dowarn = G_WARN_OFF;
f86702cc 1608
14dd3ad8 1609 JMPENV_PUSH(ret);
6224f72b 1610 switch (ret) {
312caa8e 1611 case 0:
14dd3ad8 1612 parse_body(env,xsinit);
3c10abe3
AG
1613 if (PL_unitcheckav)
1614 call_list(oldscope, PL_unitcheckav);
7d30b5c4
GS
1615 if (PL_checkav)
1616 call_list(oldscope, PL_checkav);
14dd3ad8
GS
1617 ret = 0;
1618 break;
6224f72b
GS
1619 case 1:
1620 STATUS_ALL_FAILURE;
1621 /* FALL THROUGH */
1622 case 2:
1623 /* my_exit() was called */
3280af22 1624 while (PL_scopestack_ix > oldscope)
6224f72b
GS
1625 LEAVE;
1626 FREETMPS;
3280af22 1627 PL_curstash = PL_defstash;
3c10abe3
AG
1628 if (PL_unitcheckav)
1629 call_list(oldscope, PL_unitcheckav);
7d30b5c4
GS
1630 if (PL_checkav)
1631 call_list(oldscope, PL_checkav);
37038d91 1632 ret = STATUS_EXIT;
14dd3ad8 1633 break;
6224f72b 1634 case 3:
bf49b057 1635 PerlIO_printf(Perl_error_log, "panic: top_env\n");
14dd3ad8
GS
1636 ret = 1;
1637 break;
6224f72b 1638 }
14dd3ad8
GS
1639 JMPENV_POP;
1640 return ret;
1641}
1642
4a5df386
NC
1643/* This needs to stay in perl.c, as perl.c is compiled with different flags for
1644 miniperl, and we need to see those flags reflected in the values here. */
1645
1646/* What this returns is subject to change. Use the public interface in Config.
1647 */
1648static void
1649S_Internals_V(pTHX_ CV *cv)
1650{
1651 dXSARGS;
1652#ifdef LOCAL_PATCH_COUNT
1653 const int local_patch_count = LOCAL_PATCH_COUNT;
1654#else
1655 const int local_patch_count = 0;
1656#endif
2dc296d2 1657 const int entries = 3 + local_patch_count;
4a5df386
NC
1658 int i;
1659 static char non_bincompat_options[] =
1660# ifdef DEBUGGING
1661 " DEBUGGING"
1662# endif
1663# ifdef NO_MATHOMS
0d311fbe 1664 " NO_MATHOMS"
4a5df386
NC
1665# endif
1666# ifdef PERL_DISABLE_PMC
1667 " PERL_DISABLE_PMC"
1668# endif
1669# ifdef PERL_DONT_CREATE_GVSV
1670 " PERL_DONT_CREATE_GVSV"
1671# endif
9a044a43
NC
1672# ifdef PERL_EXTERNAL_GLOB
1673 " PERL_EXTERNAL_GLOB"
1674# endif
4a5df386
NC
1675# ifdef PERL_IS_MINIPERL
1676 " PERL_IS_MINIPERL"
1677# endif
1678# ifdef PERL_MALLOC_WRAP
1679 " PERL_MALLOC_WRAP"
1680# endif
1681# ifdef PERL_MEM_LOG
1682 " PERL_MEM_LOG"
1683# endif
1684# ifdef PERL_MEM_LOG_NOIMPL
1685 " PERL_MEM_LOG_NOIMPL"
1686# endif
1687# ifdef PERL_USE_DEVEL
1688 " PERL_USE_DEVEL"
1689# endif
1690# ifdef PERL_USE_SAFE_PUTENV
1691 " PERL_USE_SAFE_PUTENV"
1692# endif
de618ee4
NC
1693# ifdef USE_ATTRIBUTES_FOR_PERLIO
1694 " USE_ATTRIBUTES_FOR_PERLIO"
1695# endif
4a5df386
NC
1696# ifdef USE_FAST_STDIO
1697 " USE_FAST_STDIO"
1698# endif
5a8d8935
NC
1699# ifdef USE_PERL_ATOF
1700 " USE_PERL_ATOF"
1701# endif
0d311fbe
NC
1702# ifdef USE_SITECUSTOMIZE
1703 " USE_SITECUSTOMIZE"
1704# endif
4a5df386
NC
1705 ;
1706 PERL_UNUSED_ARG(cv);
1707 PERL_UNUSED_ARG(items);
1708
1709 EXTEND(SP, entries);
1710
1711 PUSHs(sv_2mortal(newSVpv(PL_bincompat_options, 0)));
1712 PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options,
1713 sizeof(non_bincompat_options) - 1, SVs_TEMP));
1714
1715#ifdef __DATE__
1716# ifdef __TIME__
1717 PUSHs(Perl_newSVpvn_flags(aTHX_
1718 STR_WITH_LEN("Compiled at " __DATE__ " " __TIME__),
1719 SVs_TEMP));
1720# else
1721 PUSHs(Perl_newSVpvn_flags(aTHX_ STR_WITH_LEN("Compiled on " __DATE__),
1722 SVs_TEMP));
1723# endif
1724#else
1725 PUSHs(&PL_sv_undef);
1726#endif
1727
4a5df386
NC
1728 for (i = 1; i <= local_patch_count; i++) {
1729 /* This will be an undef, if PL_localpatches[i] is NULL. */
1730 PUSHs(sv_2mortal(newSVpv(PL_localpatches[i], 0)));
1731 }
1732
1733 XSRETURN(entries);
1734}
1735
be71fc8f
NC
1736#define INCPUSH_UNSHIFT 0x01
1737#define INCPUSH_ADD_OLD_VERS 0x02
1738#define INCPUSH_ADD_VERSIONED_SUB_DIRS 0x04
1739#define INCPUSH_ADD_ARCHONLY_SUB_DIRS 0x08
1740#define INCPUSH_NOT_BASEDIR 0x10
1741#define INCPUSH_CAN_RELOCATE 0x20
1e3208d8
NC
1742#define INCPUSH_ADD_SUB_DIRS \
1743 (INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_ADD_ARCHONLY_SUB_DIRS)
e28f3139 1744
312caa8e 1745STATIC void *
14dd3ad8 1746S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
312caa8e 1747{
27da23d5 1748 dVAR;
2f9285f8 1749 PerlIO *rsfp;
312caa8e 1750 int argc = PL_origargc;
8f42b153 1751 char **argv = PL_origargv;
e1ec3a88 1752 const char *scriptname = NULL;
312caa8e 1753 VOL bool dosearch = FALSE;
c7030b81 1754 register char c;
bd61b366 1755 const char *cddir = NULL;
ab019eaa 1756#ifdef USE_SITECUSTOMIZE
20ef40cf 1757 bool minus_f = FALSE;
ab019eaa 1758#endif
009d90df 1759 SV *linestr_sv = newSV_type(SVt_PVIV);
5486870f 1760 bool add_read_e_script = FALSE;
009d90df
DM
1761
1762 SvGROW(linestr_sv, 80);
76f68e9b 1763 sv_setpvs(linestr_sv,"");
312caa8e 1764
6224f72b 1765 init_main_stash();
54310121 1766
c7030b81
NC
1767 {
1768 const char *s;
6224f72b
GS
1769 for (argc--,argv++; argc > 0; argc--,argv++) {
1770 if (argv[0][0] != '-' || !argv[0][1])
1771 break;
6224f72b
GS
1772 s = argv[0]+1;
1773 reswitch:
47f56822 1774 switch ((c = *s)) {
729a02f2 1775 case 'C':
1d5472a9
GS
1776#ifndef PERL_STRICT_CR
1777 case '\r':
1778#endif
6224f72b
GS
1779 case ' ':
1780 case '0':
1781 case 'F':
1782 case 'a':
1783 case 'c':
1784 case 'd':
1785 case 'D':
1786 case 'h':
1787 case 'i':
1788 case 'l':
1789 case 'M':
1790 case 'm':
1791 case 'n':
1792 case 'p':
1793 case 's':
1794 case 'u':
1795 case 'U':
1796 case 'v':
599cee73
PM
1797 case 'W':
1798 case 'X':
6224f72b 1799 case 'w':
97bd5664 1800 if ((s = moreswitches(s)))
6224f72b
GS
1801 goto reswitch;
1802 break;
33b78306 1803
1dbad523 1804 case 't':
22f7c9c9 1805 CHECK_MALLOC_TOO_LATE_FOR('t');
317ea90d
MS
1806 if( !PL_tainting ) {
1807 PL_taint_warn = TRUE;
1808 PL_tainting = TRUE;
1809 }
1810 s++;
1811 goto reswitch;
6224f72b 1812 case 'T':
22f7c9c9 1813 CHECK_MALLOC_TOO_LATE_FOR('T');
3280af22 1814 PL_tainting = TRUE;
317ea90d 1815 PL_taint_warn = FALSE;
6224f72b
GS
1816 s++;
1817 goto reswitch;
f86702cc 1818
bc9b29db
RH
1819 case 'E':
1820 PL_minus_E = TRUE;
1821 /* FALL THROUGH */
6224f72b 1822 case 'e':
f20b2998 1823 forbid_setid('e', FALSE);
3280af22 1824 if (!PL_e_script) {
396482e1 1825 PL_e_script = newSVpvs("");
5486870f 1826 add_read_e_script = TRUE;
6224f72b
GS
1827 }
1828 if (*++s)
3280af22 1829 sv_catpv(PL_e_script, s);
6224f72b 1830 else if (argv[1]) {
3280af22 1831 sv_catpv(PL_e_script, argv[1]);
6224f72b
GS
1832 argc--,argv++;
1833 }
1834 else
47f56822 1835 Perl_croak(aTHX_ "No code specified for -%c", c);
396482e1 1836 sv_catpvs(PL_e_script, "\n");
6224f72b 1837 break;
afe37c7d 1838
20ef40cf 1839 case 'f':
f5542d3a 1840#ifdef USE_SITECUSTOMIZE
20ef40cf 1841 minus_f = TRUE;
f5542d3a 1842#endif
20ef40cf
GA
1843 s++;
1844 goto reswitch;
1845
6224f72b 1846 case 'I': /* -I handled both here and in moreswitches() */
f20b2998 1847 forbid_setid('I', FALSE);
bd61b366 1848 if (!*++s && (s=argv[1]) != NULL) {
6224f72b
GS
1849 argc--,argv++;
1850 }
6224f72b 1851 if (s && *s) {
0df16ed7 1852 STRLEN len = strlen(s);
55b4bc1c 1853 incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS);
0df16ed7
GS
1854 }
1855 else
a67e862a 1856 Perl_croak(aTHX_ "No directory specified for -I");
6224f72b 1857 break;
6224f72b 1858 case 'S':
f20b2998 1859 forbid_setid('S', FALSE);
6224f72b
GS
1860 dosearch = TRUE;
1861 s++;
1862 goto reswitch;
1863 case 'V':
7edfd0ef
NC
1864 {
1865 SV *opts_prog;
1866
7edfd0ef 1867 if (*++s != ':') {
37ca4a5b 1868 opts_prog = newSVpvs("use Config; Config::_V()");
7edfd0ef
NC
1869 }
1870 else {
1871 ++s;
1872 opts_prog = Perl_newSVpvf(aTHX_
37ca4a5b 1873 "use Config; Config::config_vars(qw%c%s%c)",
7edfd0ef
NC
1874 0, s, 0);
1875 s += strlen(s);
1876 }
37ca4a5b 1877 Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog);
7edfd0ef
NC
1878 /* don't look for script or read stdin */
1879 scriptname = BIT_BUCKET;
1880 goto reswitch;
6224f72b 1881 }
6224f72b 1882 case 'x':
3280af22 1883 PL_doextract = TRUE;
6224f72b 1884 s++;
304334da 1885 if (*s)
f4c556ac 1886 cddir = s;
6224f72b
GS
1887 break;
1888 case 0:
1889 break;
1890 case '-':
1891 if (!*++s || isSPACE(*s)) {
1892 argc--,argv++;
1893 goto switch_end;
1894 }
1895 /* catch use of gnu style long options */
1896 if (strEQ(s, "version")) {
dd374669 1897 s = (char *)"v";
6224f72b
GS
1898 goto reswitch;
1899 }
1900 if (strEQ(s, "help")) {
dd374669 1901 s = (char *)"h";
6224f72b
GS
1902 goto reswitch;
1903 }
1904 s--;
1905 /* FALL THROUGH */
1906 default:
cea2e8a9 1907 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
8d063cd8
LW
1908 }
1909 }
c7030b81
NC
1910 }
1911
6224f72b 1912 switch_end:
54310121 1913
c7030b81
NC
1914 {
1915 char *s;
1916
f675dbe5
CB
1917 if (
1918#ifndef SECURE_INTERNAL_GETENV
1919 !PL_tainting &&
1920#endif
cf756827 1921 (s = PerlEnv_getenv("PERL5OPT")))
0df16ed7 1922 {
74288ac8
GS
1923 while (isSPACE(*s))
1924 s++;
317ea90d 1925 if (*s == '-' && *(s+1) == 'T') {
22f7c9c9 1926 CHECK_MALLOC_TOO_LATE_FOR('T');
74288ac8 1927 PL_tainting = TRUE;
317ea90d
MS
1928 PL_taint_warn = FALSE;
1929 }
74288ac8 1930 else {
bd61b366 1931 char *popt_copy = NULL;
74288ac8 1932 while (s && *s) {
54913509 1933 const char *d;
74288ac8
GS
1934 while (isSPACE(*s))
1935 s++;
1936 if (*s == '-') {
1937 s++;
1938 if (isSPACE(*s))
1939 continue;
1940 }
4ea8f8fb 1941 d = s;
74288ac8
GS
1942 if (!*s)
1943 break;
2b622f1a 1944 if (!strchr("CDIMUdmtwW", *s))
cea2e8a9 1945 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
4ea8f8fb
MS
1946 while (++s && *s) {
1947 if (isSPACE(*s)) {
cf756827 1948 if (!popt_copy) {
bfa6c418
NC
1949 popt_copy = SvPVX(sv_2mortal(newSVpv(d,0)));
1950 s = popt_copy + (s - d);
1951 d = popt_copy;
cf756827 1952 }
4ea8f8fb
MS
1953 *s++ = '\0';
1954 break;
1955 }
1956 }
1c4db469 1957 if (*d == 't') {
317ea90d
MS
1958 if( !PL_tainting ) {
1959 PL_taint_warn = TRUE;
1960 PL_tainting = TRUE;
1961 }
1c4db469 1962 } else {
97bd5664 1963 moreswitches(d);
1c4db469 1964 }
6224f72b 1965 }
6224f72b
GS
1966 }
1967 }
c7030b81 1968 }
a0d0e21e 1969
87e06404 1970#if defined(USE_SITECUSTOMIZE) && !defined(PERL_IS_MINIPERL)
20ef40cf 1971 if (!minus_f) {
404ad9dc
NC
1972 /* SITELIB_EXP is a function call on Win32.
1973 The games with local $! are to avoid setting errno if there is no
1974 sitecustomize script. */
1975 const char *const sitelib = SITELIB_EXP;
29a861e7 1976 (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav,
404ad9dc
NC
1977 Perl_newSVpvf(aTHX_
1978 "BEGIN { do {local $!; -f '%s/sitecustomize.pl'} && do '%s/sitecustomize.pl' }", sitelib, sitelib));
20ef40cf
GA
1979 }
1980#endif
1981
6224f72b
GS
1982 if (!scriptname)
1983 scriptname = argv[0];
3280af22 1984 if (PL_e_script) {
6224f72b
GS
1985 argc++,argv--;
1986 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1987 }
bd61b366 1988 else if (scriptname == NULL) {
6224f72b
GS
1989#ifdef MSDOS
1990 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
97bd5664 1991 moreswitches("h");
6224f72b
GS
1992#endif
1993 scriptname = "-";
1994 }
1995
b7975bdd
NC
1996 /* Set $^X early so that it can be used for relocatable paths in @INC */
1997 assert (!PL_tainted);
1998 TAINT;
1999 S_set_caret_X(aTHX);
2000 TAINT_NOT;
2cace6ac 2001 init_perllib();
6224f72b 2002
a52eba0e 2003 {
f20b2998 2004 bool suidscript = FALSE;
829372d3 2005
cc69b689 2006 open_script(scriptname, dosearch, &suidscript, &rsfp);
6224f72b 2007
2f9285f8 2008 validate_suid(validarg, scriptname, fdscript, suidscript,
cc69b689 2009 linestr_sv, rsfp);
6224f72b 2010
64ca3a65 2011#ifndef PERL_MICRO
a52eba0e
NC
2012# if defined(SIGCHLD) || defined(SIGCLD)
2013 {
2014# ifndef SIGCHLD
2015# define SIGCHLD SIGCLD
2016# endif
2017 Sighandler_t sigstate = rsignal_state(SIGCHLD);
2018 if (sigstate == (Sighandler_t) SIG_IGN) {
a2a5de95
NC
2019 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
2020 "Can't ignore signal CHLD, forcing to default");
a52eba0e
NC
2021 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
2022 }
0b5b802d 2023 }
a52eba0e 2024# endif
64ca3a65 2025#endif
0b5b802d 2026
e37778c2 2027 if (PL_doextract) {
faef540c 2028
f20b2998 2029 /* This will croak if suidscript is true, as -x cannot be used with
faef540c
NC
2030 setuid scripts. */
2031 forbid_setid('x', suidscript);
f20b2998 2032 /* Hence you can't get here if suidscript is true */
faef540c 2033
2f9285f8 2034 find_beginning(linestr_sv, rsfp);
a52eba0e
NC
2035 if (cddir && PerlDir_chdir( (char *)cddir ) < 0)
2036 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
2037 }
f4c556ac 2038 }
6224f72b 2039
ea726b52 2040 PL_main_cv = PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3280af22
NIS
2041 CvUNIQUE_on(PL_compcv);
2042
dd2155a4 2043 CvPADLIST(PL_compcv) = pad_new(0);
6224f72b 2044
dd69841b
BB
2045 PL_isarev = newHV();
2046
0c4f7ff0 2047 boot_core_PerlIO();
6224f72b 2048 boot_core_UNIVERSAL();
e1a479c5 2049 boot_core_mro();
4a5df386 2050 newXS("Internals::V", S_Internals_V, __FILE__);
6224f72b
GS
2051
2052 if (xsinit)
acfe0abc 2053 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
64ca3a65 2054#ifndef PERL_MICRO
d0d72822 2055#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC) || defined(SYMBIAN)
c5be433b 2056 init_os_extras();
6224f72b 2057#endif
64ca3a65 2058#endif
6224f72b 2059
29209bc5 2060#ifdef USE_SOCKS
1b9c9cf5
DH
2061# ifdef HAS_SOCKS5_INIT
2062 socks5_init(argv[0]);
2063# else
29209bc5 2064 SOCKSinit(argv[0]);
1b9c9cf5 2065# endif
ac27b0f5 2066#endif
29209bc5 2067
6224f72b
GS
2068 init_predump_symbols();
2069 /* init_postdump_symbols not currently designed to be called */
2070 /* more than once (ENV isn't cleared first, for example) */
2071 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
3280af22 2072 if (!PL_do_undump)
6224f72b
GS
2073 init_postdump_symbols(argc,argv,env);
2074
27da23d5
JH
2075 /* PL_unicode is turned on by -C, or by $ENV{PERL_UNICODE},
2076 * or explicitly in some platforms.
085a54d9 2077 * locale.c:Perl_init_i18nl10n() if the environment
a05d7ebb 2078 * look like the user wants to use UTF-8. */
a0fd4948 2079#if defined(__SYMBIAN32__)
27da23d5
JH
2080 PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */
2081#endif
e27b5b51 2082# ifndef PERL_IS_MINIPERL
06e66572
JH
2083 if (PL_unicode) {
2084 /* Requires init_predump_symbols(). */
a05d7ebb 2085 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
06e66572
JH
2086 IO* io;
2087 PerlIO* fp;
2088 SV* sv;
2089
a05d7ebb 2090 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
06e66572 2091 * and the default open disciplines. */
a05d7ebb
JH
2092 if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) &&
2093 PL_stdingv && (io = GvIO(PL_stdingv)) &&
2094 (fp = IoIFP(io)))
2095 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2096 if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) &&
2097 PL_defoutgv && (io = GvIO(PL_defoutgv)) &&
2098 (fp = IoOFP(io)))
2099 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2100 if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) &&
2101 PL_stderrgv && (io = GvIO(PL_stderrgv)) &&
2102 (fp = IoOFP(io)))
2103 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2104 if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) &&
fafc274c
NC
2105 (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL,
2106 SVt_PV)))) {
a05d7ebb
JH
2107 U32 in = PL_unicode & PERL_UNICODE_IN_FLAG;
2108 U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG;
2109 if (in) {
2110 if (out)
76f68e9b 2111 sv_setpvs(sv, ":utf8\0:utf8");
a05d7ebb 2112 else
76f68e9b 2113 sv_setpvs(sv, ":utf8\0");
a05d7ebb
JH
2114 }
2115 else if (out)
76f68e9b 2116 sv_setpvs(sv, "\0:utf8");
a05d7ebb
JH
2117 SvSETMAGIC(sv);
2118 }
b310b053
JH
2119 }
2120 }
e27b5b51 2121#endif
b310b053 2122
c7030b81
NC
2123 {
2124 const char *s;
4ffa73a3
JH
2125 if ((s = PerlEnv_getenv("PERL_SIGNALS"))) {
2126 if (strEQ(s, "unsafe"))
2127 PL_signals |= PERL_SIGNALS_UNSAFE_FLAG;
2128 else if (strEQ(s, "safe"))
2129 PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG;
2130 else
2131 Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s);
2132 }
c7030b81 2133 }
4ffa73a3 2134
81d86705 2135#ifdef PERL_MAD
c7030b81
NC
2136 {
2137 const char *s;
81d86705
NC
2138 if ((s = PerlEnv_getenv("PERL_XMLDUMP"))) {
2139 PL_madskills = 1;
2140 PL_minus_c = 1;
2141 if (!s || !s[0])
2142 PL_xmlfp = PerlIO_stdout();
2143 else {
2144 PL_xmlfp = PerlIO_open(s, "w");
2145 if (!PL_xmlfp)
2146 Perl_croak(aTHX_ "Can't open %s", s);
2147 }
1a9a51d4 2148 my_setenv("PERL_XMLDUMP", NULL); /* hide from subprocs */
81d86705 2149 }
c7030b81
NC
2150 }
2151
2152 {
2153 const char *s;
81d86705
NC
2154 if ((s = PerlEnv_getenv("PERL_MADSKILLS"))) {
2155 PL_madskills = atoi(s);
1a9a51d4 2156 my_setenv("PERL_MADSKILLS", NULL); /* hide from subprocs */
81d86705 2157 }
c7030b81 2158 }
81d86705
NC
2159#endif
2160
5486870f 2161 lex_start(linestr_sv, rsfp, TRUE);
219f7226 2162 PL_subname = newSVpvs("main");
6224f72b 2163
5486870f
DM
2164 if (add_read_e_script)
2165 filter_add(read_e_script, NULL);
2166
6224f72b
GS
2167 /* now parse the script */
2168
93189314 2169 SETERRNO(0,SS_NORMAL);
28ac2b49 2170 if (yyparse(GRAMPROG) || PL_parser->error_count) {
3280af22 2171 if (PL_minus_c)
cea2e8a9 2172 Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
6224f72b 2173 else {
cea2e8a9 2174 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
097ee67d 2175 PL_origfilename);
6224f72b
GS
2176 }
2177 }
57843af0 2178 CopLINE_set(PL_curcop, 0);
3280af22 2179 PL_curstash = PL_defstash;
3280af22
NIS
2180 if (PL_e_script) {
2181 SvREFCNT_dec(PL_e_script);
a0714e2c 2182 PL_e_script = NULL;
6224f72b
GS
2183 }
2184
3280af22 2185 if (PL_do_undump)
6224f72b
GS
2186 my_unexec();
2187
57843af0
GS
2188 if (isWARN_ONCE) {
2189 SAVECOPFILE(PL_curcop);
2190 SAVECOPLINE(PL_curcop);
3280af22 2191 gv_check(PL_defstash);
57843af0 2192 }
6224f72b
GS
2193
2194 LEAVE;
2195 FREETMPS;
2196
2197#ifdef MYMALLOC
f6a607bc
RGS
2198 {
2199 const char *s;
6224f72b
GS
2200 if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
2201 dump_mstats("after compilation:");
f6a607bc 2202 }
6224f72b
GS
2203#endif
2204
2205 ENTER;
febb3a6d 2206 PL_restartjmpenv = NULL;
3280af22 2207 PL_restartop = 0;
312caa8e 2208 return NULL;
6224f72b
GS
2209}
2210
954c1994
GS
2211/*
2212=for apidoc perl_run
2213
2214Tells a Perl interpreter to run. See L<perlembed>.
2215
2216=cut
2217*/
2218
6224f72b 2219int
0cb96387 2220perl_run(pTHXx)
6224f72b 2221{
97aff369 2222 dVAR;
6224f72b 2223 I32 oldscope;
14dd3ad8 2224 int ret = 0;
db36c5a1 2225 dJMPENV;
6224f72b 2226
7918f24d
NC
2227 PERL_ARGS_ASSERT_PERL_RUN;
2228#ifndef MULTIPLICITY
ed6c66dd 2229 PERL_UNUSED_ARG(my_perl);
7918f24d 2230#endif
9d4ba2ae 2231
3280af22 2232 oldscope = PL_scopestack_ix;
96e176bf
CL
2233#ifdef VMS
2234 VMSISH_HUSHED = 0;
2235#endif
6224f72b 2236
14dd3ad8 2237 JMPENV_PUSH(ret);
6224f72b
GS
2238 switch (ret) {
2239 case 1:
2240 cxstack_ix = -1; /* start context stack again */
312caa8e 2241 goto redo_body;
14dd3ad8 2242 case 0: /* normal completion */
14dd3ad8
GS
2243 redo_body:
2244 run_body(oldscope);
14dd3ad8
GS
2245 /* FALL THROUGH */
2246 case 2: /* my_exit() */
3280af22 2247 while (PL_scopestack_ix > oldscope)
6224f72b
GS
2248 LEAVE;
2249 FREETMPS;
3280af22 2250 PL_curstash = PL_defstash;
3a1ee7e8 2251 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
31d77e54
AB
2252 PL_endav && !PL_minus_c)
2253 call_list(oldscope, PL_endav);
6224f72b
GS
2254#ifdef MYMALLOC
2255 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
2256 dump_mstats("after execution: ");
2257#endif
37038d91 2258 ret = STATUS_EXIT;
14dd3ad8 2259 break;
6224f72b 2260 case 3:
312caa8e
CS
2261 if (PL_restartop) {
2262 POPSTACK_TO(PL_mainstack);
2263 goto redo_body;
6224f72b 2264 }
bf49b057 2265 PerlIO_printf(Perl_error_log, "panic: restartop\n");
312caa8e 2266 FREETMPS;
14dd3ad8
GS
2267 ret = 1;
2268 break;
6224f72b
GS
2269 }
2270
14dd3ad8
GS
2271 JMPENV_POP;
2272 return ret;
312caa8e
CS
2273}
2274
dd374669 2275STATIC void
14dd3ad8
GS
2276S_run_body(pTHX_ I32 oldscope)
2277{
97aff369 2278 dVAR;
6224f72b 2279 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
3280af22 2280 PL_sawampersand ? "Enabling" : "Omitting"));
6224f72b 2281
3280af22 2282 if (!PL_restartop) {
81d86705
NC
2283#ifdef PERL_MAD
2284 if (PL_xmlfp) {
2285 xmldump_all();
2286 exit(0); /* less likely to core dump than my_exit(0) */
2287 }
2288#endif
cf2782cd 2289#ifdef DEBUGGING
f0e3f042
CS
2290 if (DEBUG_x_TEST || DEBUG_B_TEST)
2291 dump_all_perl(!DEBUG_B_TEST);
ecae49c0
NC
2292 if (!DEBUG_q_TEST)
2293 PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
cf2782cd 2294#endif
6224f72b 2295
3280af22 2296 if (PL_minus_c) {
bf49b057 2297 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
6224f72b
GS
2298 my_exit(0);
2299 }
3280af22 2300 if (PERLDB_SINGLE && PL_DBsingle)
ac27b0f5 2301 sv_setiv(PL_DBsingle, 1);
3280af22
NIS
2302 if (PL_initav)
2303 call_list(oldscope, PL_initav);
f1fac472
NC
2304#ifdef PERL_DEBUG_READONLY_OPS
2305 Perl_pending_Slabs_to_ro(aTHX);
2306#endif
6224f72b
GS
2307 }
2308
2309 /* do it */
2310
3280af22 2311 if (PL_restartop) {
febb3a6d 2312 PL_restartjmpenv = NULL;
533c011a 2313 PL_op = PL_restartop;
3280af22 2314 PL_restartop = 0;
cea2e8a9 2315 CALLRUNOPS(aTHX);
6224f72b 2316 }
3280af22
NIS
2317 else if (PL_main_start) {
2318 CvDEPTH(PL_main_cv) = 1;
533c011a 2319 PL_op = PL_main_start;
cea2e8a9 2320 CALLRUNOPS(aTHX);
6224f72b 2321 }
f6b3007c
JH
2322 my_exit(0);
2323 /* NOTREACHED */
6224f72b
GS
2324}
2325
954c1994 2326/*
ccfc67b7
JH
2327=head1 SV Manipulation Functions
2328
954c1994
GS
2329=for apidoc p||get_sv
2330
64ace3f8
NC
2331Returns the SV of the specified Perl scalar. C<flags> are passed to
2332C<gv_fetchpv>. If C<GV_ADD> is set and the
2333Perl variable does not exist then it will be created. If C<flags> is zero
2334and the variable does not exist then NULL is returned.
954c1994
GS
2335
2336=cut
2337*/
2338
6224f72b 2339SV*
64ace3f8 2340Perl_get_sv(pTHX_ const char *name, I32 flags)
6224f72b
GS
2341{
2342 GV *gv;
7918f24d
NC
2343
2344 PERL_ARGS_ASSERT_GET_SV;
2345
64ace3f8 2346 gv = gv_fetchpv(name, flags, SVt_PV);
6224f72b
GS
2347 if (gv)
2348 return GvSV(gv);
a0714e2c 2349 return NULL;
6224f72b
GS
2350}
2351
954c1994 2352/*
ccfc67b7
JH
2353=head1 Array Manipulation Functions
2354
954c1994
GS
2355=for apidoc p||get_av
2356
cbfd0a87
NC
2357Returns the AV of the specified Perl array. C<flags> are passed to
2358C<gv_fetchpv>. If C<GV_ADD> is set and the
2359Perl variable does not exist then it will be created. If C<flags> is zero
2360and the variable does not exist then NULL is returned.
954c1994
GS
2361
2362=cut
2363*/
2364
6224f72b 2365AV*
cbfd0a87 2366Perl_get_av(pTHX_ const char *name, I32 flags)
6224f72b 2367{
cbfd0a87 2368 GV* const gv = gv_fetchpv(name, flags, SVt_PVAV);
7918f24d
NC
2369
2370 PERL_ARGS_ASSERT_GET_AV;
2371
cbfd0a87 2372 if (flags)
6224f72b
GS
2373 return GvAVn(gv);
2374 if (gv)
2375 return GvAV(gv);
7d49f689 2376 return NULL;
6224f72b
GS
2377}
2378
954c1994 2379/*
ccfc67b7
JH
2380=head1 Hash Manipulation Functions
2381
954c1994
GS
2382=for apidoc p||get_hv
2383
6673a63c
NC
2384Returns the HV of the specified Perl hash. C<flags> are passed to
2385C<gv_fetchpv>. If C<GV_ADD> is set and the
2386Perl variable does not exist then it will be created. If C<flags> is zero
2387and the variable does not exist then NULL is returned.
954c1994
GS
2388
2389=cut
2390*/
2391
6224f72b 2392HV*
6673a63c 2393Perl_get_hv(pTHX_ const char *name, I32 flags)
6224f72b 2394{
6673a63c 2395 GV* const gv = gv_fetchpv(name, flags, SVt_PVHV);
7918f24d
NC
2396
2397 PERL_ARGS_ASSERT_GET_HV;
2398
6673a63c 2399 if (flags)
a0d0e21e
LW
2400 return GvHVn(gv);
2401 if (gv)
2402 return GvHV(gv);
5c284bb0 2403 return NULL;
a0d0e21e
LW
2404}
2405
954c1994 2406/*
ccfc67b7
JH
2407=head1 CV Manipulation Functions
2408
780a5241
NC
2409=for apidoc p||get_cvn_flags
2410
2411Returns the CV of the specified Perl subroutine. C<flags> are passed to
2412C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
2413exist then it will be declared (which has the same effect as saying
2414C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist
2415then NULL is returned.
2416
954c1994
GS
2417=for apidoc p||get_cv
2418
780a5241 2419Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
954c1994
GS
2420
2421=cut
2422*/
2423
a0d0e21e 2424CV*
780a5241 2425Perl_get_cvn_flags(pTHX_ const char *name, STRLEN len, I32 flags)
a0d0e21e 2426{
780a5241 2427 GV* const gv = gv_fetchpvn_flags(name, len, flags, SVt_PVCV);
f6ec51f7
GS
2428 /* XXX this is probably not what they think they're getting.
2429 * It has the same effect as "sub name;", i.e. just a forward
2430 * declaration! */
7918f24d
NC
2431
2432 PERL_ARGS_ASSERT_GET_CVN_FLAGS;
2433
780a5241 2434 if ((flags & ~GV_NOADD_MASK) && !GvCVu(gv)) {
740cce10 2435 SV *const sv = newSVpvn_flags(name, len, flags & SVf_UTF8);
774d564b 2436 return newSUB(start_subparse(FALSE, 0),
780a5241 2437 newSVOP(OP_CONST, 0, sv),
5f66b61c 2438 NULL, NULL);
780a5241 2439 }
a0d0e21e 2440 if (gv)
8ebc5c01 2441 return GvCVu(gv);
601f1833 2442 return NULL;
a0d0e21e
LW
2443}
2444
2c67934f
NC
2445/* Nothing in core calls this now, but we can't replace it with a macro and
2446 move it to mathoms.c as a macro would evaluate name twice. */
780a5241
NC
2447CV*
2448Perl_get_cv(pTHX_ const char *name, I32 flags)
2449{
7918f24d
NC
2450 PERL_ARGS_ASSERT_GET_CV;
2451
780a5241
NC
2452 return get_cvn_flags(name, strlen(name), flags);
2453}
2454
79072805
LW
2455/* Be sure to refetch the stack pointer after calling these routines. */
2456
954c1994 2457/*
ccfc67b7
JH
2458
2459=head1 Callback Functions
2460
954c1994
GS
2461=for apidoc p||call_argv
2462
2463Performs a callback to the specified Perl sub. See L<perlcall>.
2464
2465=cut
2466*/
2467
a0d0e21e 2468I32
8f42b153 2469Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
ac27b0f5 2470
8ac85365
NIS
2471 /* See G_* flags in cop.h */
2472 /* null terminated arg list */
8990e307 2473{
97aff369 2474 dVAR;
a0d0e21e 2475 dSP;
8990e307 2476
7918f24d
NC
2477 PERL_ARGS_ASSERT_CALL_ARGV;
2478
924508f0 2479 PUSHMARK(SP);
a0d0e21e 2480 if (argv) {
8990e307 2481 while (*argv) {
6e449a3a 2482 mXPUSHs(newSVpv(*argv,0));
8990e307
LW
2483 argv++;
2484 }
a0d0e21e 2485 PUTBACK;
8990e307 2486 }
864dbfa3 2487 return call_pv(sub_name, flags);
8990e307
LW
2488}
2489
954c1994
GS
2490/*
2491=for apidoc p||call_pv
2492
2493Performs a callback to the specified Perl sub. See L<perlcall>.
2494
2495=cut
2496*/
2497
a0d0e21e 2498I32
864dbfa3 2499Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
8ac85365
NIS
2500 /* name of the subroutine */
2501 /* See G_* flags in cop.h */
a0d0e21e 2502{
7918f24d
NC
2503 PERL_ARGS_ASSERT_CALL_PV;
2504
0da0e728 2505 return call_sv(MUTABLE_SV(get_cv(sub_name, GV_ADD)), flags);
a0d0e21e
LW
2506}
2507
954c1994
GS
2508/*
2509=for apidoc p||call_method
2510
2511Performs a callback to the specified Perl method. The blessed object must
2512be on the stack. See L<perlcall>.
2513
2514=cut
2515*/
2516
a0d0e21e 2517I32
864dbfa3 2518Perl_call_method(pTHX_ const char *methname, I32 flags)
8ac85365
NIS
2519 /* name of the subroutine */
2520 /* See G_* flags in cop.h */
a0d0e21e 2521{
46ca9bac 2522 STRLEN len;
7918f24d
NC
2523 PERL_ARGS_ASSERT_CALL_METHOD;
2524
46ca9bac
GF
2525 len = strlen(methname);
2526
2527 /* XXX: sv_2mortal(newSVpvn_share(methname, len)) can be faster */
2528 return call_sv(newSVpvn_flags(methname, len, SVs_TEMP), flags | G_METHOD);
a0d0e21e
LW
2529}
2530
2531/* May be called with any of a CV, a GV, or an SV containing the name. */
954c1994
GS
2532/*
2533=for apidoc p||call_sv
2534
2535Performs a callback to the Perl sub whose name is in the SV. See
2536L<perlcall>.
2537
2538=cut
2539*/
2540
a0d0e21e 2541I32
001d637e 2542Perl_call_sv(pTHX_ SV *sv, VOL I32 flags)
8ac85365 2543 /* See G_* flags in cop.h */
a0d0e21e 2544{
27da23d5 2545 dVAR; dSP;
a0d0e21e 2546 LOGOP myop; /* fake syntax tree node */
968b3946 2547 UNOP method_op;
aa689395 2548 I32 oldmark;
8ea43dc8 2549 VOL I32 retval = 0;
a0d0e21e 2550 I32 oldscope;
54310121 2551 bool oldcatch = CATCH_GET;
6224f72b 2552 int ret;
c4420975 2553 OP* const oldop = PL_op;
db36c5a1 2554 dJMPENV;
1e422769 2555
7918f24d
NC
2556 PERL_ARGS_ASSERT_CALL_SV;
2557
a0d0e21e
LW
2558 if (flags & G_DISCARD) {
2559 ENTER;
2560 SAVETMPS;
2561 }
2f8edad0
NC
2562 if (!(flags & G_WANT)) {
2563 /* Backwards compatibility - as G_SCALAR was 0, it could be omitted.
2564 */
2565 flags |= G_SCALAR;
2566 }
a0d0e21e 2567
aa689395 2568 Zero(&myop, 1, LOGOP);
5f66b61c 2569 myop.op_next = NULL;
f51d4af5 2570 if (!(flags & G_NOARGS))
aa689395 2571 myop.op_flags |= OPf_STACKED;
4f911530 2572 myop.op_flags |= OP_GIMME_REVERSE(flags);
462e5cf6 2573 SAVEOP();
533c011a 2574 PL_op = (OP*)&myop;
aa689395 2575
3280af22
NIS
2576 EXTEND(PL_stack_sp, 1);
2577 *++PL_stack_sp = sv;
aa689395 2578 oldmark = TOPMARK;
3280af22 2579 oldscope = PL_scopestack_ix;
a0d0e21e 2580
3280af22 2581 if (PERLDB_SUB && PL_curstash != PL_debstash
36477c24 2582 /* Handle first BEGIN of -d. */
3280af22 2583 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
36477c24 2584 /* Try harder, since this may have been a sighandler, thus
2585 * curstash may be meaningless. */
ea726b52 2586 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash)
491527d0 2587 && !(flags & G_NODEBUG))
533c011a 2588 PL_op->op_private |= OPpENTERSUB_DB;
a0d0e21e 2589
968b3946
GS
2590 if (flags & G_METHOD) {
2591 Zero(&method_op, 1, UNOP);
2592 method_op.op_next = PL_op;
2593 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
377b1098 2594 method_op.op_type = OP_METHOD;
968b3946 2595 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
377b1098 2596 myop.op_type = OP_ENTERSUB;
f39d0b86 2597 PL_op = (OP*)&method_op;
968b3946
GS
2598 }
2599
312caa8e 2600 if (!(flags & G_EVAL)) {
0cdb2077 2601 CATCH_SET(TRUE);
d6f07c05 2602 CALL_BODY_SUB((OP*)&myop);
312caa8e 2603 retval = PL_stack_sp - (PL_stack_base + oldmark);
0253cb41 2604 CATCH_SET(oldcatch);
312caa8e
CS
2605 }
2606 else {
d78bda3d 2607 myop.op_other = (OP*)&myop;
3280af22 2608 PL_markstack_ptr--;
edb2152a 2609 create_eval_scope(flags|G_FAKINGEVAL);
3280af22 2610 PL_markstack_ptr++;
a0d0e21e 2611
14dd3ad8 2612 JMPENV_PUSH(ret);
edb2152a 2613
6224f72b
GS
2614 switch (ret) {
2615 case 0:
14dd3ad8 2616 redo_body:
d6f07c05 2617 CALL_BODY_SUB((OP*)&myop);
312caa8e 2618 retval = PL_stack_sp - (PL_stack_base + oldmark);
8433848b 2619 if (!(flags & G_KEEPERR)) {
ab69dbc2 2620 CLEAR_ERRSV();
8433848b 2621 }
a0d0e21e 2622 break;
6224f72b 2623 case 1:
f86702cc 2624 STATUS_ALL_FAILURE;
a0d0e21e 2625 /* FALL THROUGH */
6224f72b 2626 case 2:
a0d0e21e 2627 /* my_exit() was called */
3280af22 2628 PL_curstash = PL_defstash;
a0d0e21e 2629 FREETMPS;
14dd3ad8 2630 JMPENV_POP;
f86702cc 2631 my_exit_jump();
a0d0e21e 2632 /* NOTREACHED */
6224f72b 2633 case 3:
3280af22 2634 if (PL_restartop) {
febb3a6d 2635 PL_restartjmpenv = NULL;
533c011a 2636 PL_op = PL_restartop;
3280af22 2637 PL_restartop = 0;
312caa8e 2638 goto redo_body;
a0d0e21e 2639 }
3280af22 2640 PL_stack_sp = PL_stack_base + oldmark;
51ce5529 2641 if ((flags & G_WANT) == G_ARRAY)
a0d0e21e
LW
2642 retval = 0;
2643 else {
2644 retval = 1;
3280af22 2645 *++PL_stack_sp = &PL_sv_undef;
a0d0e21e 2646 }
312caa8e 2647 break;
a0d0e21e 2648 }
a0d0e21e 2649
edb2152a
NC
2650 if (PL_scopestack_ix > oldscope)
2651 delete_eval_scope();
14dd3ad8 2652 JMPENV_POP;
a0d0e21e 2653 }
1e422769 2654
a0d0e21e 2655 if (flags & G_DISCARD) {
3280af22 2656 PL_stack_sp = PL_stack_base + oldmark;
a0d0e21e
LW
2657 retval = 0;
2658 FREETMPS;
2659 LEAVE;
2660 }
533c011a 2661 PL_op = oldop;
a0d0e21e
LW
2662 return retval;
2663}
2664
6e72f9df 2665/* Eval a string. The G_EVAL flag is always assumed. */
8990e307 2666
954c1994
GS
2667/*
2668=for apidoc p||eval_sv
2669
2670Tells Perl to C<eval> the string in the SV.
2671
2672=cut
2673*/
2674
a0d0e21e 2675I32
864dbfa3 2676Perl_eval_sv(pTHX_ SV *sv, I32 flags)
ac27b0f5 2677
8ac85365 2678 /* See G_* flags in cop.h */
a0d0e21e 2679{
97aff369 2680 dVAR;
924508f0 2681 dSP;
a0d0e21e 2682 UNOP myop; /* fake syntax tree node */
8ea43dc8
SP
2683 VOL I32 oldmark = SP - PL_stack_base;
2684 VOL I32 retval = 0;
6224f72b 2685 int ret;
c4420975 2686 OP* const oldop = PL_op;
db36c5a1 2687 dJMPENV;
84902520 2688
7918f24d
NC
2689 PERL_ARGS_ASSERT_EVAL_SV;
2690
4633a7c4
LW
2691 if (flags & G_DISCARD) {
2692 ENTER;
2693 SAVETMPS;
2694 }
2695
462e5cf6 2696 SAVEOP();
533c011a
NIS
2697 PL_op = (OP*)&myop;
2698 Zero(PL_op, 1, UNOP);
3280af22
NIS
2699 EXTEND(PL_stack_sp, 1);
2700 *++PL_stack_sp = sv;
79072805 2701
4633a7c4
LW
2702 if (!(flags & G_NOARGS))
2703 myop.op_flags = OPf_STACKED;
5f66b61c 2704 myop.op_next = NULL;
6e72f9df 2705 myop.op_type = OP_ENTEREVAL;
4f911530 2706 myop.op_flags |= OP_GIMME_REVERSE(flags);
6e72f9df 2707 if (flags & G_KEEPERR)
2708 myop.op_flags |= OPf_SPECIAL;
4633a7c4 2709
dedbcade
DM
2710 /* fail now; otherwise we could fail after the JMPENV_PUSH but
2711 * before a PUSHEVAL, which corrupts the stack after a croak */
2712 TAINT_PROPER("eval_sv()");
2713
14dd3ad8 2714 JMPENV_PUSH(ret);
6224f72b
GS
2715 switch (ret) {
2716 case 0:
14dd3ad8 2717 redo_body:
d6f07c05 2718 CALL_BODY_EVAL((OP*)&myop);
312caa8e 2719 retval = PL_stack_sp - (PL_stack_base + oldmark);
8433848b 2720 if (!(flags & G_KEEPERR)) {
ab69dbc2 2721 CLEAR_ERRSV();
8433848b 2722 }
4633a7c4 2723 break;
6224f72b 2724 case 1:
f86702cc 2725 STATUS_ALL_FAILURE;
4633a7c4 2726 /* FALL THROUGH */
6224f72b 2727 case 2:
4633a7c4 2728 /* my_exit() was called */
3280af22 2729 PL_curstash = PL_defstash;
4633a7c4 2730 FREETMPS;
14dd3ad8 2731 JMPENV_POP;
f86702cc 2732 my_exit_jump();
4633a7c4 2733 /* NOTREACHED */
6224f72b 2734 case 3:
3280af22 2735 if (PL_restartop) {
febb3a6d 2736 PL_restartjmpenv = NULL;
533c011a 2737 PL_op = PL_restartop;
3280af22 2738 PL_restartop = 0;
312caa8e 2739 goto redo_body;
4633a7c4 2740 }
3280af22 2741 PL_stack_sp = PL_stack_base + oldmark;
51ce5529 2742 if ((flags & G_WANT) == G_ARRAY)
4633a7c4
LW
2743 retval = 0;
2744 else {
2745 retval = 1;
3280af22 2746 *++PL_stack_sp = &PL_sv_undef;
4633a7c4 2747 }
312caa8e 2748 break;
4633a7c4
LW
2749 }
2750
14dd3ad8 2751 JMPENV_POP;
4633a7c4 2752 if (flags & G_DISCARD) {
3280af22 2753 PL_stack_sp = PL_stack_base + oldmark;
4633a7c4
LW
2754 retval = 0;
2755 FREETMPS;
2756 LEAVE;
2757 }
533c011a 2758 PL_op = oldop;
4633a7c4
LW
2759 return retval;
2760}
2761
954c1994
GS
2762/*
2763=for apidoc p||eval_pv
2764
2765Tells Perl to C<eval> the given string and return an SV* result.
2766
2767=cut
2768*/
2769
137443ea 2770SV*
864dbfa3 2771Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
137443ea 2772{
97aff369 2773 dVAR;
137443ea 2774 dSP;
2775 SV* sv = newSVpv(p, 0);
2776
7918f24d
NC
2777 PERL_ARGS_ASSERT_EVAL_PV;
2778
864dbfa3 2779 eval_sv(sv, G_SCALAR);
137443ea 2780 SvREFCNT_dec(sv);
2781
2782 SPAGAIN;
2783 sv = POPs;
2784 PUTBACK;
2785
2d8e6c8d 2786 if (croak_on_error && SvTRUE(ERRSV)) {
f1f66076 2787 Perl_croak(aTHX_ "%s", SvPVx_nolen_const(ERRSV));
2d8e6c8d 2788 }
137443ea 2789
2790 return sv;
2791}
2792
4633a7c4
LW
2793/* Require a module. */
2794
954c1994 2795/*
ccfc67b7
JH
2796=head1 Embedding Functions
2797
954c1994
GS
2798=for apidoc p||require_pv
2799
7d3fb230
BS
2800Tells Perl to C<require> the file named by the string argument. It is
2801analogous to the Perl code C<eval "require '$file'">. It's even
2307c6d0 2802implemented that way; consider using load_module instead.
954c1994 2803
7d3fb230 2804=cut */
954c1994 2805
4633a7c4 2806void
864dbfa3 2807Perl_require_pv(pTHX_ const char *pv)
4633a7c4 2808{
97aff369 2809 dVAR;
d3acc0f7 2810 dSP;
97aff369 2811 SV* sv;
7918f24d
NC
2812
2813 PERL_ARGS_ASSERT_REQUIRE_PV;
2814
e788e7d3 2815 PUSHSTACKi(PERLSI_REQUIRE);
d3acc0f7 2816 PUTBACK;
be41e5d9
NC
2817 sv = Perl_newSVpvf(aTHX_ "require q%c%s%c", 0, pv, 0);
2818 eval_sv(sv_2mortal(sv), G_DISCARD);
d3acc0f7
JP
2819 SPAGAIN;
2820 POPSTACK;
79072805
LW
2821}
2822
76e3520e 2823STATIC void
e1ec3a88 2824S_usage(pTHX_ const char *name) /* XXX move this out into a module ? */
4633a7c4 2825{
ab821d7f 2826 /* This message really ought to be max 23 lines.
75c72d73 2827 * Removed -h because the user already knows that option. Others? */
fb73857a 2828
1566c39d
NC
2829 /* Grouped as 6 lines per C string literal, to keep under the ANSI C 89
2830 minimum of 509 character string literals. */
27da23d5 2831 static const char * const usage_msg[] = {
1566c39d
NC
2832" -0[octal] specify record separator (\\0, if no argument)\n"
2833" -a autosplit mode with -n or -p (splits $_ into @F)\n"
2834" -C[number/list] enables the listed Unicode features\n"
2835" -c check syntax only (runs BEGIN and CHECK blocks)\n"
2836" -d[:debugger] run program under debugger\n"
2837" -D[number/list] set debugging flags (argument is a bit mask or alphabets)\n",
2838" -e program one line of program (several -e's allowed, omit programfile)\n"
2839" -E program like -e, but enables all optional features\n"
2840" -f don't do $sitelib/sitecustomize.pl at startup\n"
2841" -F/pattern/ split() pattern for -a switch (//'s are optional)\n"
2842" -i[extension] edit <> files in place (makes backup if extension supplied)\n"
2843" -Idirectory specify @INC/#include directory (several -I's allowed)\n",
2844" -l[octal] enable line ending processing, specifies line terminator\n"
2845" -[mM][-]module execute \"use/no module...\" before executing program\n"
2846" -n assume \"while (<>) { ... }\" loop around program\n"
2847" -p assume loop like -n but print line also, like sed\n"
2848" -s enable rudimentary parsing for switches after programfile\n"
2849" -S look for programfile using PATH environment variable\n",
2850" -t enable tainting warnings\n"
2851" -T enable tainting checks\n"
2852" -u dump core after parsing program\n"
2853" -U allow unsafe operations\n"
2854" -v print version, patchlevel and license\n"
2855" -V[:variable] print configuration summary (or a single Config.pm variable)\n",
60eaec42 2856" -w enable many useful warnings\n"
1566c39d
NC
2857" -W enable all warnings\n"
2858" -x[directory] ignore text before #!perl line (optionally cd to directory)\n"
2859" -X disable all warnings\n"
2860" \n"
2861"Run 'perldoc perl' for more help with Perl.\n\n",
fb73857a 2862NULL
2863};
27da23d5 2864 const char * const *p = usage_msg;
1566c39d 2865 PerlIO *out = PerlIO_stdout();
fb73857a 2866
7918f24d
NC
2867 PERL_ARGS_ASSERT_USAGE;
2868
1566c39d
NC
2869 PerlIO_printf(out,
2870 "\nUsage: %s [switches] [--] [programfile] [arguments]\n",
b0e47665 2871 name);
fb73857a 2872 while (*p)
1566c39d 2873 PerlIO_puts(out, *p++);
4633a7c4
LW
2874}
2875
b4ab917c
DM
2876/* convert a string of -D options (or digits) into an int.
2877 * sets *s to point to the char after the options */
2878
2879#ifdef DEBUGGING
2880int
e1ec3a88 2881Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
b4ab917c 2882{
27da23d5 2883 static const char * const usage_msgd[] = {
651b8f1a
NC
2884 " Debugging flag values: (see also -d)\n"
2885 " p Tokenizing and parsing (with v, displays parse stack)\n"
2886 " s Stack snapshots (with v, displays all stacks)\n"
2887 " l Context (loop) stack processing\n"
2888 " t Trace execution\n"
2889 " o Method and overloading resolution\n",
2890 " c String/numeric conversions\n"
2891 " P Print profiling info, source file input state\n"
2892 " m Memory and SV allocation\n"
2893 " f Format processing\n"
2894 " r Regular expression parsing and execution\n"
2895 " x Syntax tree dump\n",
2896 " u Tainting checks\n"
2897 " H Hash dump -- usurps values()\n"
2898 " X Scratchpad allocation\n"
2899 " D Cleaning up\n"
2900 " T Tokenising\n"
2901 " R Include reference counts of dumped variables (eg when using -Ds)\n",
2902 " J Do not s,t,P-debug (Jump over) opcodes within package DB\n"
2903 " v Verbose: use in conjunction with other flags\n"
2904 " C Copy On Write\n"
2905 " A Consistency checks on internal structures\n"
2906 " q quiet - currently only suppresses the 'EXECUTING' message\n"
2907 " M trace smart match resolution\n"
2908 " B dump suBroutine definitions, including special Blocks like BEGIN\n",
e6e64d9b
JC
2909 NULL
2910 };
b4ab917c 2911 int i = 0;
7918f24d
NC
2912
2913 PERL_ARGS_ASSERT_GET_DEBUG_OPTS;
2914
b4ab917c
DM
2915 if (isALPHA(**s)) {
2916 /* if adding extra options, remember to update DEBUG_MASK */
cc8773c0 2917 static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMB";
b4ab917c
DM
2918
2919 for (; isALNUM(**s); (*s)++) {
c4420975 2920 const char * const d = strchr(debopts,**s);
b4ab917c
DM
2921 if (d)
2922 i |= 1 << (d - debopts);
2923 else if (ckWARN_d(WARN_DEBUGGING))
e6e64d9b
JC
2924 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2925 "invalid option -D%c, use -D'' to see choices\n", **s);
b4ab917c
DM
2926 }
2927 }
e6e64d9b 2928 else if (isDIGIT(**s)) {
b4ab917c
DM
2929 i = atoi(*s);
2930 for (; isALNUM(**s); (*s)++) ;
2931 }
ddcf8bc1 2932 else if (givehelp) {
06e869a4 2933 const char *const *p = usage_msgd;
651b8f1a 2934 while (*p) PerlIO_puts(PerlIO_stdout(), *p++);
e6e64d9b 2935 }
b4ab917c
DM
2936# ifdef EBCDIC
2937 if ((i & DEBUG_p_FLAG) && ckWARN_d(WARN_DEBUGGING))
2938 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2939 "-Dp not implemented on this platform\n");
2940# endif
2941 return i;
2942}
2943#endif
2944
79072805
LW
2945/* This routine handles any switches that can be given during run */
2946
c7030b81
NC
2947const char *
2948Perl_moreswitches(pTHX_ const char *s)
79072805 2949{
27da23d5 2950 dVAR;
84c133a0 2951 UV rschar;
0544e6df 2952 const char option = *s; /* used to remember option in -m/-M code */
79072805 2953
7918f24d
NC
2954 PERL_ARGS_ASSERT_MORESWITCHES;
2955
79072805
LW
2956 switch (*s) {
2957 case '0':
a863c7d1 2958 {
f2095865 2959 I32 flags = 0;
a3b680e6 2960 STRLEN numlen;
f2095865
JH
2961
2962 SvREFCNT_dec(PL_rs);
2963 if (s[1] == 'x' && s[2]) {
a3b680e6 2964 const char *e = s+=2;
f2095865
JH
2965 U8 *tmps;
2966
a3b680e6
AL
2967 while (*e)
2968 e++;
f2095865
JH
2969 numlen = e - s;
2970 flags = PERL_SCAN_SILENT_ILLDIGIT;
2971 rschar = (U32)grok_hex(s, &numlen, &flags, NULL);
2972 if (s + numlen < e) {
2973 rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */
2974 numlen = 0;
2975 s--;
2976 }
396482e1 2977 PL_rs = newSVpvs("");
c5661c80 2978 SvGROW(PL_rs, (STRLEN)(UNISKIP(rschar) + 1));
f2095865
JH
2979 tmps = (U8*)SvPVX(PL_rs);
2980 uvchr_to_utf8(tmps, rschar);
2981 SvCUR_set(PL_rs, UNISKIP(rschar));
2982 SvUTF8_on(PL_rs);
2983 }
2984 else {
2985 numlen = 4;
2986 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
2987 if (rschar & ~((U8)~0))
2988 PL_rs = &PL_sv_undef;
2989 else if (!rschar && numlen >= 2)
396482e1 2990 PL_rs = newSVpvs("");
f2095865
JH
2991 else {
2992 char ch = (char)rschar;
2993 PL_rs = newSVpvn(&ch, 1);
2994 }
2995 }
64ace3f8 2996 sv_setsv(get_sv("/", GV_ADD), PL_rs);
f2095865 2997 return s + numlen;
a863c7d1 2998 }
46487f74 2999 case 'C':
a05d7ebb 3000 s++;
dd374669 3001 PL_unicode = parse_unicode_opts( (const char **)&s );
5a22a2bb
NC
3002 if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG)
3003 PL_utf8cache = -1;
46487f74 3004 return s;
2304df62 3005 case 'F':
3280af22 3006 PL_minus_F = TRUE;
ebce5377
RGS
3007 PL_splitstr = ++s;
3008 while (*s && !isSPACE(*s)) ++s;
e49e380e 3009 PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr);
2304df62 3010 return s;
79072805 3011 case 'a':
3280af22 3012 PL_minus_a = TRUE;
79072805
LW
3013 s++;
3014 return s;
3015 case 'c':
3280af22 3016 PL_minus_c = TRUE;
79072805
LW
3017 s++;
3018 return s;
3019 case 'd':
f20b2998 3020 forbid_setid('d', FALSE);
4633a7c4 3021 s++;
2cbb2ee1
RGS
3022
3023 /* -dt indicates to the debugger that threads will be used */
3024 if (*s == 't' && !isALNUM(s[1])) {
3025 ++s;
3026 my_setenv("PERL5DB_THREADED", "1");
3027 }
3028
70c94a19
RR
3029 /* The following permits -d:Mod to accepts arguments following an =
3030 in the fashion that -MSome::Mod does. */
3031 if (*s == ':' || *s == '=') {
f85893a1
NC
3032 const char *start = ++s;
3033 const char *const end = s + strlen(s);
396482e1 3034 SV * const sv = newSVpvs("use Devel::");
f85893a1 3035
70c94a19
RR
3036 /* We now allow -d:Module=Foo,Bar */
3037 while(isALNUM(*s) || *s==':') ++s;
3038 if (*s != '=')
f85893a1 3039 sv_catpvn(sv, start, end - start);
70c94a19
RR
3040 else {
3041 sv_catpvn(sv, start, s-start);
95a2b409
RGS
3042 /* Don't use NUL as q// delimiter here, this string goes in the
3043 * environment. */
3044 Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s);
70c94a19 3045 }
f85893a1 3046 s = end;
184f32ec 3047 my_setenv("PERL5DB", SvPV_nolen_const(sv));
c4db126b 3048 SvREFCNT_dec(sv);
4633a7c4 3049 }
ed094faf 3050 if (!PL_perldb) {
3280af22 3051 PL_perldb = PERLDB_ALL;
a0d0e21e 3052 init_debugger();
ed094faf 3053 }
79072805
LW
3054 return s;
3055 case 'D':
0453d815 3056 {
79072805 3057#ifdef DEBUGGING
f20b2998 3058 forbid_setid('D', FALSE);
b4ab917c 3059 s++;
dd374669 3060 PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG;
12a43e32 3061#else /* !DEBUGGING */
0453d815 3062 if (ckWARN_d(WARN_DEBUGGING))
9014280d 3063 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
e6e64d9b 3064 "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n");
a0d0e21e 3065 for (s++; isALNUM(*s); s++) ;
79072805 3066#endif
79072805 3067 return s;
0453d815 3068 }
4633a7c4 3069 case 'h':
ac27b0f5 3070 usage(PL_origargv[0]);
7ca617d0 3071 my_exit(0);
79072805 3072 case 'i':
43c5f42d 3073 Safefree(PL_inplace);
c030f24b
GH
3074#if defined(__CYGWIN__) /* do backup extension automagically */
3075 if (*(s+1) == '\0') {
c86a4f2e 3076 PL_inplace = savepvs(".bak");
c030f24b
GH
3077 return s+1;
3078 }
3079#endif /* __CYGWIN__ */
5ef5d758 3080 {
d4c19fe8 3081 const char * const start = ++s;
5ef5d758
NC
3082 while (*s && !isSPACE(*s))
3083 ++s;
3084
3085 PL_inplace = savepvn(start, s - start);
3086 }
7b8d334a 3087 if (*s) {
5ef5d758 3088 ++s;
7b8d334a 3089 if (*s == '-') /* Additional switches on #! line. */
5ef5d758 3090 s++;
7b8d334a 3091 }
fb73857a 3092 return s;
4e49a025 3093 case 'I': /* -I handled both here and in parse_body() */
f20b2998 3094 forbid_setid('I', FALSE);
fb73857a 3095 ++s;
3096 while (*s && isSPACE(*s))
3097 ++s;
3098 if (*s) {
c7030b81 3099 const char *e, *p;
0df16ed7
GS
3100 p = s;
3101 /* ignore trailing spaces (possibly followed by other switches) */
3102 do {
3103 for (e = p; *e && !isSPACE(*e); e++) ;
3104 p = e;
3105 while (isSPACE(*p))
3106 p++;
3107 } while (*p && *p != '-');
55b4bc1c 3108 incpush(s, e-s,
e28f3139 3109 INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT);
0df16ed7
GS
3110 s = p;
3111 if (*s == '-')
3112 s++;
79072805
LW
3113 }
3114 else
a67e862a 3115 Perl_croak(aTHX_ "No directory specified for -I");
fb73857a 3116 return s;
79072805 3117 case 'l':
3280af22 3118 PL_minus_l = TRUE;
79072805 3119 s++;
7889fe52
NIS
3120 if (PL_ors_sv) {
3121 SvREFCNT_dec(PL_ors_sv);
a0714e2c 3122 PL_ors_sv = NULL;
7889fe52 3123 }
79072805 3124 if (isDIGIT(*s)) {
53305cf1 3125 I32 flags = 0;
a3b680e6 3126 STRLEN numlen;
396482e1 3127 PL_ors_sv = newSVpvs("\n");
53305cf1
NC
3128 numlen = 3 + (*s == '0');
3129 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
79072805
LW
3130 s += numlen;
3131 }
3132 else {
8bfdd7d9 3133 if (RsPARA(PL_rs)) {
396482e1 3134 PL_ors_sv = newSVpvs("\n\n");
7889fe52
NIS
3135 }
3136 else {
8bfdd7d9 3137 PL_ors_sv = newSVsv(PL_rs);
c07a80fd 3138 }
79072805
LW
3139 }
3140 return s;
1a30305b 3141 case 'M':
f20b2998 3142 forbid_setid('M', FALSE); /* XXX ? */
1a30305b 3143 /* FALL THROUGH */
3144 case 'm':
f20b2998 3145 forbid_setid('m', FALSE); /* XXX ? */
1a30305b 3146 if (*++s) {
c7030b81 3147 const char *start;
b64cb68c 3148 const char *end;
11343788 3149 SV *sv;
e1ec3a88 3150 const char *use = "use ";
0544e6df 3151 bool colon = FALSE;
a5f75d66 3152 /* -M-foo == 'no foo' */
d0043bd1
NC
3153 /* Leading space on " no " is deliberate, to make both
3154 possibilities the same length. */
3155 if (*s == '-') { use = " no "; ++s; }
3156 sv = newSVpvn(use,4);
a5f75d66 3157 start = s;
1a30305b 3158 /* We allow -M'Module qw(Foo Bar)' */
0544e6df
RB
3159 while(isALNUM(*s) || *s==':') {
3160 if( *s++ == ':' ) {
3161 if( *s == ':' )
3162 s++;
3163 else
3164 colon = TRUE;
3165 }
3166 }
3167 if (s == start)
3168 Perl_croak(aTHX_ "Module name required with -%c option",
3169 option);
3170 if (colon)
3171 Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: "
3172 "contains single ':'",
63da6837 3173 (int)(s - start), start, option);
b64cb68c 3174 end = s + strlen(s);
c07a80fd 3175 if (*s != '=') {
b64cb68c 3176 sv_catpvn(sv, start, end - start);
0544e6df 3177 if (option == 'm') {
c07a80fd 3178 if (*s != '\0')
cea2e8a9 3179 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
396482e1 3180 sv_catpvs( sv, " ()");
c07a80fd 3181 }
3182 } else {
11343788 3183 sv_catpvn(sv, start, s-start);
b64cb68c
NC
3184 /* Use NUL as q''-delimiter. */
3185 sv_catpvs(sv, " split(/,/,q\0");
3186 ++s;
3187 sv_catpvn(sv, s, end - s);
396482e1 3188 sv_catpvs(sv, "\0)");
c07a80fd 3189 }
b64cb68c 3190 s = end;
29a861e7 3191 Perl_av_create_and_push(aTHX_ &PL_preambleav, sv);
1a30305b 3192 }
3193 else
0544e6df 3194 Perl_croak(aTHX_ "Missing argument to -%c", option);
1a30305b 3195 return s;
79072805 3196 case 'n':
3280af22 3197 PL_minus_n = TRUE;
79072805
LW
3198 s++;
3199 return s;
3200 case 'p':
3280af22 3201 PL_minus_p = TRUE;
79072805
LW
3202 s++;
3203 return s;
3204 case 's':
f20b2998 3205 forbid_setid('s', FALSE);
3280af22 3206 PL_doswitches = TRUE;
79072805
LW
3207 s++;
3208 return s;
6537fe72
MS
3209 case 't':
3210 if (!PL_tainting)
22f7c9c9 3211 TOO_LATE_FOR('t');
6537fe72
MS
3212 s++;
3213 return s;
463ee0b2 3214 case 'T':
3280af22 3215 if (!PL_tainting)
22f7c9c9 3216 TOO_LATE_FOR('T');
463ee0b2
LW
3217 s++;
3218 return s;
79072805 3219 case 'u':
3280af22 3220 PL_do_undump = TRUE;
79072805
LW
3221 s++;
3222 return s;
3223 case 'U':
3280af22 3224 PL_unsafe = TRUE;
79072805
LW
3225 s++;
3226 return s;
3227 case 'v':
d7aa5382 3228 if (!sv_derived_from(PL_patchlevel, "version"))
ac0e6a2f 3229 upg_version(PL_patchlevel, TRUE);
8e9464f1 3230#if !defined(DGUX)
46807d8e
YO
3231 {
3232 SV* level= vstringify(PL_patchlevel);
3233#ifdef PERL_PATCHNUM
23d483e2
NC
3234# ifdef PERL_GIT_UNCOMMITTED_CHANGES
3235 SV *num = newSVpvs(PERL_PATCHNUM "*");
3236# else
3237 SV *num = newSVpvs(PERL_PATCHNUM);
3238# endif
46807d8e
YO
3239
3240 if (sv_len(num)>=sv_len(level) && strnEQ(SvPV_nolen(num),SvPV_nolen(level),sv_len(level))) {
3241 SvREFCNT_dec(level);
3242 level= num;
3243 } else {
d0a9311f 3244 Perl_sv_catpvf(aTHX_ level, " (%"SVf")", num);
46807d8e
YO
3245 SvREFCNT_dec(num);
3246 }
3247 #endif
3248 PerlIO_printf(PerlIO_stdout(),
ded326e4
DG
3249 "\nThis is perl " STRINGIFY(PERL_REVISION)
3250 ", version " STRINGIFY(PERL_VERSION)
3251 ", subversion " STRINGIFY(PERL_SUBVERSION)
3252 " (%"SVf") built for " ARCHNAME, level
3253 );
46807d8e
YO
3254 SvREFCNT_dec(level);
3255 }
8e9464f1
JH
3256#else /* DGUX */
3257/* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
3258 PerlIO_printf(PerlIO_stdout(),
52ea0aec 3259 Perl_form(aTHX_ "\nThis is perl, %"SVf"\n",
be2597df 3260 SVfARG(vstringify(PL_patchlevel))));
8e9464f1
JH
3261 PerlIO_printf(PerlIO_stdout(),
3262 Perl_form(aTHX_ " built under %s at %s %s\n",
3263 OSNAME, __DATE__, __TIME__));
3264 PerlIO_printf(PerlIO_stdout(),
3265 Perl_form(aTHX_ " OS Specific Release: %s\n",
40a39f85 3266 OSVERS));
8e9464f1 3267#endif /* !DGUX */
fb73857a 3268#if defined(LOCAL_PATCH_COUNT)
3269 if (LOCAL_PATCH_COUNT > 0)
b0e47665
GS
3270 PerlIO_printf(PerlIO_stdout(),
3271 "\n(with %d registered patch%s, "
3272 "see perl -V for more detail)",
bb7a0f54 3273 LOCAL_PATCH_COUNT,
b0e47665 3274 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
a5f75d66 3275#endif
1a30305b 3276
b0e47665 3277 PerlIO_printf(PerlIO_stdout(),
32709fdf 3278 "\n\nCopyright 1987-2010, Larry Wall\n");
79072805 3279#ifdef MSDOS
b0e47665
GS
3280 PerlIO_printf(PerlIO_stdout(),
3281 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
55497cff 3282#endif
3283#ifdef DJGPP
b0e47665
GS
3284 PerlIO_printf(PerlIO_stdout(),
3285 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
3286 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
4633a7c4 3287#endif
79072805 3288#ifdef OS2
b0e47665
GS
3289 PerlIO_printf(PerlIO_stdout(),
3290 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
be3c0a43 3291 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
79072805 3292#endif
79072805 3293#ifdef atarist
b0e47665
GS
3294 PerlIO_printf(PerlIO_stdout(),
3295 "atariST series port, ++jrb bammi@cadence.com\n");
79072805 3296#endif
a3f9223b 3297#ifdef __BEOS__
b0e47665
GS
3298 PerlIO_printf(PerlIO_stdout(),
3299 "BeOS port Copyright Tom Spindler, 1997-1999\n");
a3f9223b 3300#endif
1d84e8df 3301#ifdef MPE
b0e47665 3302 PerlIO_printf(PerlIO_stdout(),
e583a879 3303 "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2003\n");
1d84e8df 3304#endif
9d116dd7 3305#ifdef OEMVS
b0e47665
GS
3306 PerlIO_printf(PerlIO_stdout(),
3307 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
9d116dd7 3308#endif
495c5fdc 3309#ifdef __VOS__
b0e47665 3310 PerlIO_printf(PerlIO_stdout(),
94efb9fb 3311 "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
495c5fdc 3312#endif
092bebab 3313#ifdef __OPEN_VM
b0e47665
GS
3314 PerlIO_printf(PerlIO_stdout(),
3315 "VM/ESA port by Neale Ferguson, 1998-1999\n");
092bebab 3316#endif
a1a0e61e 3317#ifdef POSIX_BC
b0e47665
GS
3318 PerlIO_printf(PerlIO_stdout(),
3319 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
a1a0e61e 3320#endif
f83d2536 3321#ifdef EPOC
b0e47665 3322 PerlIO_printf(PerlIO_stdout(),
be3c0a43 3323 "EPOC port by Olaf Flebbe, 1999-2002\n");
f83d2536 3324#endif
e1caacb4 3325#ifdef UNDER_CE
b475b3e6
JH
3326 PerlIO_printf(PerlIO_stdout(),"WINCE port by Rainer Keuchel, 2001-2002\n");
3327 PerlIO_printf(PerlIO_stdout(),"Built on " __DATE__ " " __TIME__ "\n\n");
e1caacb4
JH
3328 wce_hitreturn();
3329#endif
a0fd4948 3330#ifdef __SYMBIAN32__
27da23d5
JH
3331 PerlIO_printf(PerlIO_stdout(),
3332 "Symbian port by Nokia, 2004-2005\n");
3333#endif
baed7233
DL
3334#ifdef BINARY_BUILD_NOTICE
3335 BINARY_BUILD_NOTICE;
3336#endif
b0e47665
GS
3337 PerlIO_printf(PerlIO_stdout(),
3338 "\n\
79072805 3339Perl may be copied only under the terms of either the Artistic License or the\n\
3d6f292d 3340GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
95103687 3341Complete documentation for Perl, including FAQ lists, should be found on\n\
a0288114 3342this system using \"man perl\" or \"perldoc perl\". If you have access to the\n\
c9e30dd8 3343Internet, point your browser at http://www.perl.org/, the Perl Home Page.\n\n");
7ca617d0 3344 my_exit(0);
79072805 3345 case 'w':
b2e5e6ba 3346 if (! (PL_dowarn & G_WARN_ALL_MASK)) {
ac27b0f5 3347 PL_dowarn |= G_WARN_ON;
b2e5e6ba 3348 }
599cee73
PM
3349 s++;
3350 return s;
3351 case 'W':
ac27b0f5 3352 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
317ea90d 3353 if (!specialWARN(PL_compiling.cop_warnings))
72dc9ed5 3354 PerlMemShared_free(PL_compiling.cop_warnings);
d3a7d8c7 3355 PL_compiling.cop_warnings = pWARN_ALL ;
599cee73
PM
3356 s++;
3357 return s;
3358 case 'X':
ac27b0f5 3359 PL_dowarn = G_WARN_ALL_OFF;
317ea90d 3360 if (!specialWARN(PL_compiling.cop_warnings))
72dc9ed5 3361 PerlMemShared_free(PL_compiling.cop_warnings);
d3a7d8c7 3362 PL_compiling.cop_warnings = pWARN_NONE ;
79072805
LW
3363 s++;
3364 return s;
a0d0e21e 3365 case '*':
79072805 3366 case ' ':
d3133c89
NC
3367 while( *s == ' ' )
3368 ++s;
3369 if (s[0] == '-') /* Additional switches on #! line. */
3370 return s+1;
79072805 3371 break;
a0d0e21e 3372 case '-':
79072805 3373 case 0:
51882d45 3374#if defined(WIN32) || !defined(PERL_STRICT_CR)
a868473f
NIS
3375 case '\r':
3376#endif
79072805
LW
3377 case '\n':
3378 case '\t':
3379 break;
aa689395 3380#ifdef ALTERNATE_SHEBANG
3381 case 'S': /* OS/2 needs -S on "extproc" line. */
3382 break;
3383#endif
79072805 3384 default:
cea2e8a9 3385 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
79072805 3386 }
bd61b366 3387 return NULL;
79072805
LW
3388}
3389
3390/* compliments of Tom Christiansen */
3391
3392/* unexec() can be found in the Gnu emacs distribution */
ee580363 3393/* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
79072805
LW
3394
3395void
864dbfa3 3396Perl_my_unexec(pTHX)
79072805 3397{
b37c2d43 3398 PERL_UNUSED_CONTEXT;
79072805 3399#ifdef UNEXEC
b37c2d43
AL
3400 SV * prog = newSVpv(BIN_EXP, 0);
3401 SV * file = newSVpv(PL_origfilename, 0);
ee580363 3402 int status = 1;
79072805
LW
3403 extern int etext;
3404
396482e1 3405 sv_catpvs(prog, "/perl");
396482e1 3406 sv_catpvs(file, ".perldump");
79072805 3407
ee580363
GS
3408 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
3409 /* unexec prints msg to stderr in case of failure */
6ad3d225 3410 PerlProc_exit(status);
79072805 3411#else
a5f75d66
AD
3412# ifdef VMS
3413# include <lib$routines.h>
3414 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
84d78eb7
YO
3415# elif defined(WIN32) || defined(__CYGWIN__)
3416 Perl_croak(aTHX_ "dump is not supported");
aa689395 3417# else
79072805 3418 ABORT(); /* for use with undump */
aa689395 3419# endif
a5f75d66 3420#endif
79072805
LW
3421}
3422
cb68f92d
GS
3423/* initialize curinterp */
3424STATIC void
cea2e8a9 3425S_init_interp(pTHX)
cb68f92d 3426{
97aff369 3427 dVAR;
acfe0abc
GS
3428#ifdef MULTIPLICITY
3429# define PERLVAR(var,type)
3430# define PERLVARA(var,n,type)
3431# if defined(PERL_IMPLICIT_CONTEXT)
b7f7fff6
NC
3432# define PERLVARI(var,type,init) aTHX->var = init;
3433# define PERLVARIC(var,type,init) aTHX->var = init;
3967c732 3434# else
acfe0abc
GS
3435# define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
3436# define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
066ef5b5 3437# endif
acfe0abc 3438# include "intrpvar.h"
acfe0abc
GS
3439# undef PERLVAR
3440# undef PERLVARA
3441# undef PERLVARI
3442# undef PERLVARIC
3443#else
3444# define PERLVAR(var,type)
3445# define PERLVARA(var,n,type)
3446# define PERLVARI(var,type,init) PL_##var = init;
3447# define PERLVARIC(var,type,init) PL_##var = init;
3448# include "intrpvar.h"
acfe0abc
GS
3449# undef PERLVAR
3450# undef PERLVARA
3451# undef PERLVARI
3452# undef PERLVARIC
cb68f92d
GS
3453#endif
3454
46ab3289
NC
3455 /* As these are inside a structure, PERLVARI isn't capable of initialising
3456 them */
6c3f0a89
NC
3457 PL_reg_oldcurpm = PL_reg_curpm = NULL;
3458 PL_reg_poscache = PL_reg_starttry = NULL;
cb68f92d
GS
3459}
3460
76e3520e 3461STATIC void
cea2e8a9 3462S_init_main_stash(pTHX)
79072805 3463{
97aff369 3464 dVAR;
463ee0b2 3465 GV *gv;
6e72f9df 3466
3280af22 3467 PL_curstash = PL_defstash = newHV();
23579a14
NC
3468 /* We know that the string "main" will be in the global shared string
3469 table, so it's a small saving to use it rather than allocate another
3470 8 bytes. */
18916d0d 3471 PL_curstname = newSVpvs_share("main");
fafc274c 3472 gv = gv_fetchpvs("main::", GV_ADD|GV_NOTQUAL, SVt_PVHV);
23579a14
NC
3473 /* If we hadn't caused another reference to "main" to be in the shared
3474 string table above, then it would be worth reordering these two,
3475 because otherwise all we do is delete "main" from it as a consequence
3476 of the SvREFCNT_dec, only to add it again with hv_name_set */
adbc6bb1 3477 SvREFCNT_dec(GvHV(gv));
23579a14 3478 hv_name_set(PL_defstash, "main", 4, 0);
85fbaab2 3479 GvHV(gv) = MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
463ee0b2 3480 SvREADONLY_on(gv);
fafc274c
NC
3481 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL,
3482 SVt_PVAV)));
5a5094bd 3483 SvREFCNT_inc_simple_void(PL_incgv); /* Don't allow it to be freed */
3280af22 3484 GvMULTI_on(PL_incgv);
fafc274c 3485 PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */
3280af22 3486 GvMULTI_on(PL_hintgv);
fafc274c 3487 PL_defgv = gv_fetchpvs("_", GV_ADD|GV_NOTQUAL, SVt_PVAV);
5a5094bd 3488 SvREFCNT_inc_simple_void(PL_defgv);
fafc274c 3489 PL_errgv = gv_HVadd(gv_fetchpvs("@", GV_ADD|GV_NOTQUAL, SVt_PV));
5a5094bd 3490 SvREFCNT_inc_simple_void(PL_errgv);
3280af22 3491 GvMULTI_on(PL_errgv);
fafc274c 3492 PL_replgv = gv_fetchpvs("\022", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^R */
3280af22 3493 GvMULTI_on(PL_replgv);
cea2e8a9 3494 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
c69033f2
NC
3495#ifdef PERL_DONT_CREATE_GVSV
3496 gv_SVadd(PL_errgv);
3497#endif
38a03e6e 3498 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
ab69dbc2 3499 CLEAR_ERRSV();
3280af22