line |
stmt |
bran |
cond |
sub |
time |
code |
1
|
|
|
|
|
|
/* -*- buffer-read-only: t -*- |
2
|
|
|
|
|
|
!!!!!!! DO NOT EDIT THIS FILE !!!!!!! |
3
|
|
|
|
|
|
This file is built by regen/miniperlmain.pl and ExtUtils::Miniperl. |
4
|
|
|
|
|
|
Any changes made here will be lost! |
5
|
|
|
|
|
|
*/ |
6
|
|
|
|
|
|
|
7
|
|
|
|
|
|
/* miniperlmain.c |
8
|
|
|
|
|
|
* |
9
|
|
|
|
|
|
* Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003, |
10
|
|
|
|
|
|
* 2004, 2005, 2006, 2007, by Larry Wall and others |
11
|
|
|
|
|
|
* |
12
|
|
|
|
|
|
* You may distribute under the terms of either the GNU General Public |
13
|
|
|
|
|
|
* License or the Artistic License, as specified in the README file. |
14
|
|
|
|
|
|
* |
15
|
|
|
|
|
|
*/ |
16
|
|
|
|
|
|
|
17
|
|
|
|
|
|
/* |
18
|
|
|
|
|
|
* The Road goes ever on and on |
19
|
|
|
|
|
|
* Down from the door where it began. |
20
|
|
|
|
|
|
* |
21
|
|
|
|
|
|
* [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"] |
22
|
|
|
|
|
|
* [Frodo on p.73 of _The Lord of the Rings_, I/iii: "Three Is Company"] |
23
|
|
|
|
|
|
*/ |
24
|
|
|
|
|
|
|
25
|
|
|
|
|
|
/* This file contains the main() function for the perl interpreter. |
26
|
|
|
|
|
|
* Note that miniperlmain.c contains main() for the 'miniperl' binary, |
27
|
|
|
|
|
|
* while perlmain.c contains main() for the 'perl' binary. |
28
|
|
|
|
|
|
* |
29
|
|
|
|
|
|
* Miniperl is like perl except that it does not support dynamic loading, |
30
|
|
|
|
|
|
* and in fact is used to build the dynamic modules needed for the 'real' |
31
|
|
|
|
|
|
* perl executable. |
32
|
|
|
|
|
|
*/ |
33
|
|
|
|
|
|
|
34
|
|
|
|
|
|
#ifdef OEMVS |
35
|
|
|
|
|
|
#ifdef MYMALLOC |
36
|
|
|
|
|
|
/* sbrk is limited to first heap segment so make it big */ |
37
|
|
|
|
|
|
#pragma runopts(HEAP(8M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON)) |
38
|
|
|
|
|
|
#else |
39
|
|
|
|
|
|
#pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON)) |
40
|
|
|
|
|
|
#endif |
41
|
|
|
|
|
|
#endif |
42
|
|
|
|
|
|
|
43
|
|
|
|
|
|
#define PERL_IN_MINIPERLMAIN_C |
44
|
|
|
|
|
|
#include "EXTERN.h" |
45
|
|
|
|
|
|
#include "perl.h" |
46
|
|
|
|
|
|
#include "XSUB.h" |
47
|
|
|
|
|
|
|
48
|
|
|
|
|
|
static void xs_init (pTHX); |
49
|
|
|
|
|
|
static PerlInterpreter *my_perl; |
50
|
|
|
|
|
|
|
51
|
|
|
|
|
|
#if defined(PERL_GLOBAL_STRUCT_PRIVATE) |
52
|
|
|
|
|
|
/* The static struct perl_vars* may seem counterproductive since the |
53
|
|
|
|
|
|
* whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note |
54
|
|
|
|
|
|
* that this static is not in the shared perl library, the globals PL_Vars |
55
|
|
|
|
|
|
* and PL_VarsPtr will stay away. */ |
56
|
|
|
|
|
|
static struct perl_vars* my_plvarsp; |
57
|
|
|
|
|
|
struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; } |
58
|
|
|
|
|
|
#endif |
59
|
|
|
|
|
|
|
60
|
|
|
|
|
|
#ifdef NO_ENV_ARRAY_IN_MAIN |
61
|
|
|
|
|
|
extern char **environ; |
62
|
|
|
|
|
|
int |
63
|
|
|
|
|
|
main(int argc, char **argv) |
64
|
|
|
|
|
|
#else |
65
|
|
|
|
|
|
int |
66
|
4034
|
|
|
|
|
main(int argc, char **argv, char **env) |
67
|
|
|
|
|
|
#endif |
68
|
|
|
|
|
|
{ |
69
|
|
|
|
|
|
int exitstatus, i; |
70
|
|
|
|
|
|
#ifdef PERL_GLOBAL_STRUCT |
71
|
|
|
|
|
|
struct perl_vars *my_vars = init_global_struct(); |
72
|
|
|
|
|
|
# ifdef PERL_GLOBAL_STRUCT_PRIVATE |
73
|
|
|
|
|
|
my_plvarsp = my_vars; |
74
|
|
|
|
|
|
# endif |
75
|
|
|
|
|
|
#endif /* PERL_GLOBAL_STRUCT */ |
76
|
|
|
|
|
|
#ifndef NO_ENV_ARRAY_IN_MAIN |
77
|
|
|
|
|
|
PERL_UNUSED_ARG(env); |
78
|
|
|
|
|
|
#endif |
79
|
|
|
|
|
|
#ifndef PERL_USE_SAFE_PUTENV |
80
|
4034
|
|
|
|
|
PL_use_safe_putenv = FALSE; |
81
|
|
|
|
|
|
#endif /* PERL_USE_SAFE_PUTENV */ |
82
|
|
|
|
|
|
|
83
|
|
|
|
|
|
/* if user wants control of gprof profiling off by default */ |
84
|
|
|
|
|
|
/* noop unless Configure is given -Accflags=-DPERL_GPROF_CONTROL */ |
85
|
|
|
|
|
|
PERL_GPROF_MONCONTROL(0); |
86
|
|
|
|
|
|
|
87
|
|
|
|
|
|
#ifdef NO_ENV_ARRAY_IN_MAIN |
88
|
|
|
|
|
|
PERL_SYS_INIT3(&argc,&argv,&environ); |
89
|
|
|
|
|
|
#else |
90
|
4034
|
|
|
|
|
PERL_SYS_INIT3(&argc,&argv,&env); |
91
|
|
|
|
|
|
#endif |
92
|
|
|
|
|
|
|
93
|
|
|
|
|
|
#if defined(USE_ITHREADS) |
94
|
|
|
|
|
|
/* XXX Ideally, this should really be happening in perl_alloc() or |
95
|
|
|
|
|
|
* perl_construct() to keep libperl.a transparently fork()-safe. |
96
|
|
|
|
|
|
* It is currently done here only because Apache/mod_perl have |
97
|
|
|
|
|
|
* problems due to lack of a call to cancel pthread_atfork() |
98
|
|
|
|
|
|
* handlers when shared objects that contain the handlers may |
99
|
|
|
|
|
|
* be dlclose()d. This forces applications that embed perl to |
100
|
|
|
|
|
|
* call PTHREAD_ATFORK() explicitly, but if and only if it hasn't |
101
|
|
|
|
|
|
* been called at least once before in the current process. |
102
|
|
|
|
|
|
* --GSAR 2001-07-20 */ |
103
|
|
|
|
|
|
PTHREAD_ATFORK(Perl_atfork_lock, |
104
|
|
|
|
|
|
Perl_atfork_unlock, |
105
|
|
|
|
|
|
Perl_atfork_unlock); |
106
|
|
|
|
|
|
#endif |
107
|
|
|
|
|
|
|
108
|
4034
|
50
|
|
|
|
if (!PL_do_undump) { |
109
|
4034
|
|
|
|
|
my_perl = perl_alloc(); |
110
|
4034
|
50
|
|
|
|
if (!my_perl) |
111
|
0
|
|
|
|
|
exit(1); |
112
|
4034
|
|
|
|
|
perl_construct(my_perl); |
113
|
4034
|
|
|
|
|
PL_perl_destruct_level = 0; |
114
|
|
|
|
|
|
} |
115
|
4034
|
|
|
|
|
PL_exit_flags |= PERL_EXIT_DESTRUCT_END; |
116
|
4034
|
|
|
|
|
exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL); |
117
|
4034
|
50
|
|
|
|
if (!exitstatus) |
118
|
4034
|
|
|
|
|
perl_run(my_perl); |
119
|
|
|
|
|
|
|
120
|
|
|
|
|
|
#ifndef PERL_MICRO |
121
|
|
|
|
|
|
/* Unregister our signal handler before destroying my_perl */ |
122
|
276329
|
100
|
|
|
|
for (i = 1; PL_sig_name[i]; i++) { |
123
|
274312
|
50
|
|
|
|
if (rsignal_state(PL_sig_num[i]) == (Sighandler_t) PL_csighandlerp) { |
124
|
0
|
|
|
|
|
rsignal(PL_sig_num[i], (Sighandler_t) SIG_DFL); |
125
|
|
|
|
|
|
} |
126
|
|
|
|
|
|
} |
127
|
|
|
|
|
|
#endif |
128
|
|
|
|
|
|
|
129
|
4034
|
|
|
|
|
exitstatus = perl_destruct(my_perl); |
130
|
|
|
|
|
|
|
131
|
4034
|
|
|
|
|
perl_free(my_perl); |
132
|
|
|
|
|
|
|
133
|
|
|
|
|
|
#if defined(USE_ENVIRON_ARRAY) && defined(PERL_TRACK_MEMPOOL) && !defined(NO_ENV_ARRAY_IN_MAIN) |
134
|
|
|
|
|
|
/* |
135
|
|
|
|
|
|
* The old environment may have been freed by perl_free() |
136
|
|
|
|
|
|
* when PERL_TRACK_MEMPOOL is defined, but without having |
137
|
|
|
|
|
|
* been restored by perl_destruct() before (this is only |
138
|
|
|
|
|
|
* done if destruct_level > 0). |
139
|
|
|
|
|
|
* |
140
|
|
|
|
|
|
* It is important to have a valid environment for atexit() |
141
|
|
|
|
|
|
* routines that are eventually called. |
142
|
|
|
|
|
|
*/ |
143
|
|
|
|
|
|
environ = env; |
144
|
|
|
|
|
|
#endif |
145
|
|
|
|
|
|
|
146
|
4034
|
|
|
|
|
PERL_SYS_TERM(); |
147
|
|
|
|
|
|
|
148
|
|
|
|
|
|
#ifdef PERL_GLOBAL_STRUCT |
149
|
|
|
|
|
|
free_global_struct(my_vars); |
150
|
|
|
|
|
|
# ifdef PERL_GLOBAL_STRUCT_PRIVATE |
151
|
|
|
|
|
|
my_plvarsp = NULL; |
152
|
|
|
|
|
|
/* Remember, functions registered with atexit() can run after this point, |
153
|
|
|
|
|
|
and may access "global" variables, and hence end up calling |
154
|
|
|
|
|
|
Perl_GetVarsPrivate() */ |
155
|
|
|
|
|
|
#endif |
156
|
|
|
|
|
|
#endif /* PERL_GLOBAL_STRUCT */ |
157
|
|
|
|
|
|
|
158
|
4034
|
|
|
|
|
exit(exitstatus); |
159
|
|
|
|
|
|
return exitstatus; |
160
|
|
|
|
|
|
} |
161
|
|
|
|
|
|
|
162
|
|
|
|
|
|
/* Register any extra external extensions */ |
163
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
165
|
|
|
|
|
|
static void |
166
|
4034
|
|
|
|
|
xs_init(pTHX) |
167
|
|
|
|
|
|
{ |
168
|
|
|
|
|
|
dXSUB_SYS; |
169
|
|
|
|
|
|
PERL_UNUSED_CONTEXT; |
170
|
4034
|
|
|
|
|
} |
171
|
|
|
|
|
|
|
172
|
|
|
|
|
|
/* ex: set ro: */ |