e576bb | 2002-10-11 | Martin Nilsson | | |
cd451f | 2004-03-15 | Martin Stjernholm | | || $Id: main.c,v 1.191 2004/03/15 22:23:14 mast Exp $
|
e576bb | 2002-10-11 | Martin Nilsson | | */
|
aedfb1 | 2002-10-09 | Martin Nilsson | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "global.h"
|
cd451f | 2004-03-15 | Martin Stjernholm | | RCSID("$Id: main.c,v 1.191 2004/03/15 22:23:14 mast Exp $");
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | #include "fdlib.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "backend.h"
#include "module.h"
#include "object.h"
|
4b974c | 1999-02-20 | Henrik Grubbström (Grubba) | | #include "language.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "lex.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "pike_types.h"
#include "builtin_functions.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "array.h"
#include "stralloc.h"
#include "interpret.h"
|
b2d3e4 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
bb55f8 | 1997-03-16 | Fredrik Hübinette (Hubbe) | | #include "pike_macros.h"
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #include "callback.h"
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | #include "signal_handler.h"
|
07513e | 1996-10-04 | Fredrik Hübinette (Hubbe) | | #include "threads.h"
|
9c6f7d | 1997-04-15 | Fredrik Hübinette (Hubbe) | | #include "dynamic_load.h"
#include "gc.h"
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | #include "multiset.h"
|
9c6f7d | 1997-04-15 | Fredrik Hübinette (Hubbe) | | #include "mapping.h"
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | #include "cpp.h"
|
0808b2 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | #include "main.h"
|
19aaeb | 1998-05-25 | Fredrik Hübinette (Hubbe) | | #include "operators.h"
|
ab5670 | 2001-04-30 | Martin Stjernholm | | #include "rbtree.h"
|
8d876d | 2003-09-05 | Martin Nilsson | | #include "security.h"
|
67f0b5 | 1999-09-26 | Henrik Grubbström (Grubba) | | #include "constants.h"
|
c37c7e | 1999-03-26 | Fredrik Hübinette (Hubbe) | | #include "version.h"
|
4b63c6 | 2001-12-14 | Martin Nilsson | | #include "program.h"
|
d5c61f | 2002-12-07 | Henrik Grubbström (Grubba) | | #include "pike_rusage.h"
|
d658ab | 2002-09-26 | Martin Stjernholm | | #include "module_support.h"
|
143d88 | 2003-11-14 | Martin Stjernholm | | #include "opcodes.h"
|
4b63c6 | 2001-12-14 | Martin Nilsson | |
#ifdef AUTO_BIGNUM
#include "bignum.h"
#endif
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | |
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | #if defined(__linux__) && defined(HAVE_DLOPEN) && defined(HAVE_DLFCN_H)
|
07eda2 | 2000-07-05 | Fredrik Hübinette (Hubbe) | | #include <dlfcn.h>
#endif
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | #include "las.h"
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #ifdef HAVE_UNISTD_H
|
fde6ed | 2003-11-27 | Martin Stjernholm | | #include <unistd.h>
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #endif
#ifdef HAVE_ERRNO_H
|
ac173e | 1997-11-02 | Henrik Grubbström (Grubba) | | #include <errno.h>
|
834e02 | 2003-11-28 | Henrik Grubbström (Grubba) | | #endif
|
ac173e | 1997-11-02 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_LOCALE_H
#include <locale.h>
#endif
|
693018 | 1996-02-25 | Fredrik Hübinette (Hubbe) | |
|
6e37dc | 1996-06-21 | Fredrik Hübinette (Hubbe) | | #include "time_stuff.h"
|
693018 | 1996-02-25 | Fredrik Hübinette (Hubbe) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | | #ifdef TRY_USE_MMX
|
895ced | 2003-10-25 | Martin Nilsson | | #ifdef HAVE_MMX_H
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | | #include <mmx.h>
|
895ced | 2003-10-25 | Martin Nilsson | | #else
#include <asm/mmx.h>
#endif
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | | int try_use_mmx;
#endif
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
#ifdef TRACE_MAIN
#define TRACE(X) fprintf X
#else /* !TRACE_MAIN */
#define TRACE(X)
#endif /* TRACE_MAIN */
|
f8e5fe | 1997-01-18 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | char *master_file;
|
e1195f | 1997-03-23 | Fredrik Hübinette (Hubbe) | | char **ARGV;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT int debug_options=0;
PMOD_EXPORT int runtime_options=0;
PMOD_EXPORT int d_flag=0;
PMOD_EXPORT int c_flag=0;
PMOD_EXPORT int default_t_flag=0;
PMOD_EXPORT int a_flag=0;
PMOD_EXPORT int l_flag=0;
PMOD_EXPORT int p_flag=0;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #if defined(YYDEBUG) || defined(PIKE_DEBUG)
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | extern int yydebug;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #endif /* YYDEBUG || PIKE_DEBUG */
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | static long instructions_left;
|
c37c7e | 1999-03-26 | Fredrik Hübinette (Hubbe) | | #define MASTER_COOKIE "(#*&)@(*&$Master Cookie:"
#ifndef MAXPATHLEN
#define MAXPATHLEN 32768
#endif
char master_location[MAXPATHLEN * 2] = MASTER_COOKIE;
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | static void time_to_exit(struct callback *cb,void *tmp,void *ignored)
{
if(instructions_left-- < 0)
{
push_int(0);
f_exit(1);
}
}
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | #ifdef PROFILING
static unsigned int samples[8200];
long record;
static void sample_stack(struct callback *cb,void *tmp,void *ignored)
{
long stack_size=( ((char *)&cb) - Pike_interpreter.stack_bottom) * STACK_DIRECTION;
stack_size>>=10;
stack_size++;
if(stack_size<0) stack_size=0;
if(stack_size >= (long)NELEM(samples)) stack_size=NELEM(samples)-1;
samples[stack_size]++;
#ifdef PIKE_DEBUG
if(stack_size > record)
{
extern void gdb_break_on_stack_record(long);
gdb_break_on_stack_record(stack_size);
record=stack_size;
}
#endif
}
#ifdef PIKE_DEBUG
void gdb_break_on_stack_record(long stack_size)
{
;
}
#endif
#endif
|
81b84e | 1996-12-03 | Fredrik Hübinette (Hubbe) | | static struct callback_list post_master_callbacks;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callback *add_post_master_callback(callback_func call,
|
8f4f88 | 1996-06-20 | Fredrik Hübinette (Hubbe) | | void *arg,
|
6e37dc | 1996-06-21 | Fredrik Hübinette (Hubbe) | | callback_func free_func)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
6e37dc | 1996-06-21 | Fredrik Hübinette (Hubbe) | | return add_to_callback(&post_master_callbacks, call, arg, free_func);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | static struct callback_list exit_callbacks;
|
1f2133 | 2000-07-28 | Fredrik Hübinette (Hubbe) | | PMOD_EXPORT struct callback *add_exit_callback(callback_func call,
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | void *arg,
callback_func free_func)
{
return add_to_callback(&exit_callbacks, call, arg, free_func);
}
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | #ifdef __NT__
|
1c32fd | 2000-08-19 | Henrik Grubbström (Grubba) | | static void get_master_key(HKEY cat)
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | {
HKEY k;
char buffer[4096];
DWORD len=sizeof(buffer)-1,type=REG_SZ;
|
a5cd6a | 2001-09-24 | Henrik Grubbström (Grubba) | |
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | if(RegOpenKeyEx(cat,
|
387b04 | 2003-01-02 | Martin Nilsson | | (LPCTSTR)("SOFTWARE\\Pike\\"
|
1f1f18 | 2001-03-10 | Henrik Grubbström (Grubba) | | DEFINETOSTR(PIKE_MAJOR_VERSION)
"."
DEFINETOSTR(PIKE_MINOR_VERSION)),
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | 0,KEY_READ,&k)==ERROR_SUCCESS)
{
if(RegQueryValueEx(k,
"PIKE_MASTER",
0,
&type,
buffer,
&len)==ERROR_SUCCESS)
{
|
21315b | 1999-05-07 | Fredrik Hübinette (Hubbe) | | dmalloc_accept_leak( master_file=strdup(buffer) );
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | }
RegCloseKey(k);
}
}
#endif /* __NT__ */
|
3189c9 | 2004-01-31 | Marcus Comstedt | | #ifdef __amigaos4__
#define timeval timeval_amigaos
#include <exec/types.h>
#include <utility/hooks.h>
#include <dos/dosextens.h>
#include <proto/dos.h>
static SAVEDS LONG scan_amigaos_environment_func(struct Hook *REG(a0,hook),
APTR REG(a2,userdata),
struct ScanVarsMsg *REG(a1,msg))
{
if(msg->sv_GDir[0] == '\0' ||
!strcmp(msg->sv_GDir, "ENV:")) {
push_text(msg->sv_Name);
push_constant_text("=");
push_string(make_shared_binary_string(msg->sv_Var, msg->sv_VarLen));
f_add(3);
}
return 0;
}
static struct Hook scan_amigaos_environment_hook = {
{ NULL, NULL },
(ULONG (*)())scan_amigaos_environment_func,
NULL, NULL
};
#endif /* __amigsos4__ */
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | int dbm_main(int argc, char **argv)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
JMP_BUF back;
|
a5cd6a | 2001-09-24 | Henrik Grubbström (Grubba) | | int e, num;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | char *p;
struct array *a;
|
85f59e | 1998-01-08 | Fredrik Hübinette (Hubbe) | | #ifdef DECLARE_ENVIRON
extern char **environ;
#endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "dbm_main()\n"));
|
fde6ed | 2003-11-27 | Martin Stjernholm | | init_rusage();
|
d9c717 | 2001-03-23 | Henrik Grubbström (Grubba) | |
#ifdef HAVE_SETVBUF
setvbuf(stderr, NULL, _IONBF, 0);
#else /* !HAVE_SETVBUF */
#ifdef HAVE_SETBUF
setbuf(stderr, NULL);
#endif /* HAVE_SETBUF */
#endif /* HAVE_SETVBUF */
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init CPU lib...\n"));
|
aad99b | 2001-03-28 | Fredrik Hübinette (Hubbe) | |
init_pike_cpulib();
|
d9c717 | 2001-03-23 | Henrik Grubbström (Grubba) | |
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | | #ifdef TRY_USE_MMX
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init MMX...\n"));
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | | try_use_mmx=mmx_ok();
#endif
|
bbc16c | 2000-08-29 | Mirar (Pontus Hagland) | | #ifdef OWN_GETHRTIME
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init gethrtime...\n"));
|
bbc16c | 2000-08-29 | Mirar (Pontus Hagland) | | own_gethrtime_init();
#endif
|
9debfa | 1999-08-11 | Fredrik Hübinette (Hubbe) | |
|
e1195f | 1997-03-23 | Fredrik Hübinette (Hubbe) | | ARGV=argv;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Main init...\n"));
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | fd_init();
|
aad99b | 2001-03-28 | Fredrik Hübinette (Hubbe) | | {
extern void init_mapping_blocks(void);
extern void init_callable_blocks(void);
extern void init_gc_frame_blocks(void);
extern void init_pike_frame_blocks(void);
extern void init_node_s_blocks(void);
extern void init_object_blocks(void);
extern void init_callback_blocks(void);
init_mapping_blocks();
init_callable_blocks();
init_gc_frame_blocks();
init_pike_frame_blocks();
init_node_s_blocks();
init_object_blocks();
|
a59629 | 2002-10-11 | Henrik Grubbström (Grubba) | | #ifndef DEBUG_MALLOC
|
aad99b | 2001-03-28 | Fredrik Hübinette (Hubbe) | | init_callback_blocks();
|
a59629 | 2002-10-11 | Henrik Grubbström (Grubba) | | #endif /* !DEBUG_MALLOC */
|
5b15bb | 2001-12-10 | Martin Stjernholm | | #ifdef PIKE_NEW_MULTISETS
init_multiset();
#endif
|
d8073b | 2002-01-27 | Martin Stjernholm | | init_builtin_constants();
|
aad99b | 2001-03-28 | Fredrik Hübinette (Hubbe) | | }
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | |
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | #ifdef SHARED_NODES
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init shared nodes...\n"));
|
a69c42 | 2000-12-01 | Henrik Grubbström (Grubba) | | node_hash.table = malloc(sizeof(node *)*32831);
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | if (!node_hash.table) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Out of memory!\n");
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | }
|
a69c42 | 2000-12-01 | Henrik Grubbström (Grubba) | | MEMSET(node_hash.table, 0, sizeof(node *)*32831);
node_hash.size = 32831;
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | #endif /* SHARED_NODES */
|
4bc94b | 2002-09-07 | Henrik Grubbström (Grubba) | | #ifdef HAVE_TZSET
tzset();
#endif /* HAVE_TZSET */
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_SETLOCALE
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #ifdef LC_NUMERIC
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | setlocale(LC_NUMERIC, "C");
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #endif
#ifdef LC_CTYPE
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | setlocale(LC_CTYPE, "");
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #endif
#ifdef LC_TIME
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | setlocale(LC_TIME, "C");
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #endif
#ifdef LC_COLLATE
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | setlocale(LC_COLLATE, "");
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #endif
#ifdef LC_MESSAGES
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | setlocale(LC_MESSAGES, "");
|
2cf1a1 | 1996-09-23 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #endif
|
bf47e1 | 2000-04-06 | Henrik Grubbström (Grubba) | |
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init master...\n"));
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | master_file = 0;
|
c37c7e | 1999-03-26 | Fredrik Hübinette (Hubbe) | |
|
208f35 | 1998-05-12 | Henrik Grubbström (Grubba) | | #ifdef HAVE_GETENV
|
a999e7 | 1998-07-27 | Fredrik Hübinette (Hubbe) | | if(getenv("PIKE_MASTER"))
master_file = getenv("PIKE_MASTER");
|
208f35 | 1998-05-12 | Henrik Grubbström (Grubba) | | #endif
|
dc7cc9 | 1998-01-14 | Fredrik Hübinette (Hubbe) | |
|
c37c7e | 1999-03-26 | Fredrik Hübinette (Hubbe) | | if(master_location[CONSTANT_STRLEN(MASTER_COOKIE)])
master_file=master_location + CONSTANT_STRLEN(MASTER_COOKIE);
#if __NT__
if(!master_file) get_master_key(HKEY_CURRENT_USER);
if(!master_file) get_master_key(HKEY_LOCAL_MACHINE);
#endif
if(!master_file)
{
sprintf(master_location,DEFAULT_MASTER,
PIKE_MAJOR_VERSION,
PIKE_MINOR_VERSION,
PIKE_BUILD_VERSION);
master_file=master_location;
}
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Default master at \"%s\"...\n", master_file));
|
895ced | 2003-10-25 | Martin Nilsson | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | for(e=1; e<argc; e++)
{
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Parse argument %d:\"%s\"...\n", e, argv[e]));
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | if(argv[e][0]=='-')
{
for(p=argv[e]+1; *p;)
{
switch(*p)
{
case 'D':
add_predefine(p+1);
p+=strlen(p);
break;
case 'm':
if(p[1])
{
master_file=p+1;
p+=strlen(p);
}else{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -m\n");
exit(1);
}
master_file=argv[e];
p+=strlen(p);
}
break;
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | case 's':
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -s\n");
exit(1);
}
p=argv[e];
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | }else{
p++;
if(*p=='s')
{
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -ss\n");
exit(1);
}
p=argv[e];
}else{
p++;
}
#ifdef _REENTRANT
thread_stack_size=STRTOL(p,&p,0);
#endif
p+=strlen(p);
break;
}
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | }
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | | Pike_stack_size=STRTOL(p,&p,0);
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
|
7965d7 | 2001-01-24 | Fredrik Hübinette (Hubbe) | | if(Pike_stack_size < 256)
|
9f243b | 1996-08-12 | Fredrik Hübinette (Hubbe) | | {
fprintf(stderr,"Stack size must at least be 256.\n");
exit(1);
}
break;
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | case 'q':
if(!p[1])
{
e++;
if(e >= argc)
{
fprintf(stderr,"Missing argument to -q\n");
exit(1);
}
p=argv[e];
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | }else{
p++;
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | }
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | instructions_left=STRTOL(p,&p,0);
|
3f1eeb | 1998-04-05 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
add_to_callback(&evaluator_callbacks,
time_to_exit,
0,0);
break;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | case 'd':
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | more_d_flags:
switch(p[1])
{
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
d_flag+=STRTOL(p+1,&p,10);
break;
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | case 'c':
p++;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #if defined(YYDEBUG) || defined(PIKE_DEBUG)
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | yydebug++;
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | #endif /* YYDEBUG || PIKE_DEBUG */
|
943f85 | 1998-04-13 | Henrik Grubbström (Grubba) | | break;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | case 's':
debug_options|=DEBUG_SIGNALS;
p++;
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | goto more_d_flags;
case 't':
debug_options|=NO_TAILRECURSION;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | p++;
|
9b08a2 | 1998-03-31 | Fredrik Hübinette (Hubbe) | | goto more_d_flags;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | |
|
382fea | 2003-04-13 | Martin Nilsson | | #ifdef DEBUG_MALLOC
|
738697 | 2001-06-30 | Fredrik Hübinette (Hubbe) | | case 'g':
debug_options|=GC_RESET_DMALLOC;
p++;
goto more_d_flags;
|
382fea | 2003-04-13 | Martin Nilsson | | #endif
|
738697 | 2001-06-30 | Fredrik Hübinette (Hubbe) | |
case 'p':
debug_options|=NO_PEEP_OPTIMIZING;
p++;
goto more_d_flags;
|
01185d | 2003-04-01 | Martin Stjernholm | | case 'T':
debug_options |= ERRORCHECK_MUTEXES;
p++;
goto more_d_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | default:
d_flag += (p[0] == 'd');
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | p++;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | }
break;
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | |
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | case 'r':
|
17e177 | 1999-12-13 | Per Hedbor | | more_r_flags:
switch(p[1])
{
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | case 't':
runtime_options |= RUNTIME_CHECK_TYPES;
p++;
|
17e177 | 1999-12-13 | Per Hedbor | | goto more_r_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | |
case 'T':
runtime_options |= RUNTIME_STRICT_TYPES;
p++;
|
17e177 | 1999-12-13 | Per Hedbor | | goto more_r_flags;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | |
|
17e177 | 1999-12-13 | Per Hedbor | | default:
p++;
|
7d955e | 1999-12-13 | Henrik Grubbström (Grubba) | | break;
|
cd8352 | 1998-02-02 | Fredrik Hübinette (Hubbe) | | }
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | break;
case 'a':
if(p[1]>='0' && p[1]<='9')
a_flag+=STRTOL(p+1,&p,10);
else
a_flag++,p++;
break;
case 't':
if(p[1]>='0' && p[1]<='9')
|
97ebb3 | 2003-01-09 | Henrik Grubbström (Grubba) | | Pike_interpreter.trace_level+=STRTOL(p+1,&p,10);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | else
|
97ebb3 | 2003-01-09 | Henrik Grubbström (Grubba) | | Pike_interpreter.trace_level++,p++;
default_t_flag = Pike_interpreter.trace_level;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | break;
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | case 'p':
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | if(p[1]=='s')
{
#ifdef PROFILING
add_to_callback(&evaluator_callbacks,
sample_stack,
0,0);
p+=strlen(p);
#endif
}else{
if(p[1]>='0' && p[1]<='9')
p_flag+=STRTOL(p+1,&p,10);
else
p_flag++,p++;
}
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | | break;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | case 'l':
if(p[1]>='0' && p[1]<='9')
l_flag+=STRTOL(p+1,&p,10);
else
l_flag++,p++;
break;
default:
|
496707 | 1997-01-15 | Fredrik Hübinette (Hubbe) | | p+=strlen(p);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
}
}else{
break;
}
}
|
01185d | 2003-04-01 | Martin Stjernholm | | #ifndef PIKE_MUTEX_ERRORCHECK
if (debug_options & ERRORCHECK_MUTEXES)
fputs ("Warning: -dT (error checking mutexes) not supported on this system.\n",
stderr);
#endif
if (d_flag) debug_options |= ERRORCHECK_MUTEXES;
|
2a5096 | 1995-08-23 | Fredrik Hübinette (Hubbe) | | #if !defined(RLIMIT_NOFILE) && defined(RLIMIT_OFILE)
#define RLIMIT_NOFILE RLIMIT_OFILE
|
e17dbc | 1995-08-11 | David Hedbor | | #endif
|
2a5096 | 1995-08-23 | Fredrik Hübinette (Hubbe) | |
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init C stack...\n"));
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.stack_top = (char *)&argv;
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | |
#if STACK_DIRECTION < 0
|
d2361e | 2003-06-30 | Martin Stjernholm | | Pike_interpreter.stack_top += ~(PTR_TO_INT(Pike_interpreter.stack_top)) & 0xffff;
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #else /* STACK_DIRECTION >= 0 */
|
d2361e | 2003-06-30 | Martin Stjernholm | | Pike_interpreter.stack_top -= PTR_TO_INT(Pike_interpreter.stack_top) & 0xffff;
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #endif /* STACK_DIRECTION < 0 */
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | | #ifdef PROFILING
Pike_interpreter.stack_bottom=Pike_interpreter.stack_top;
#endif
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | #if defined(HAVE_GETRLIMIT) && defined(RLIMIT_STACK)
{
struct rlimit lim;
if(!getrlimit(RLIMIT_STACK, &lim))
{
#ifdef RLIM_INFINITY
if(lim.rlim_cur == RLIM_INFINITY)
|
752e10 | 1999-04-30 | Fredrik Hübinette (Hubbe) | | lim.rlim_cur=1024*1024*32;
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | #endif
|
fcf073 | 2000-03-28 | Fredrik Hübinette (Hubbe) | |
#ifdef Pike_INITIAL_STACK_SIZE
if(lim.rlim_cur > Pike_INITIAL_STACK_SIZE)
lim.rlim_cur=Pike_INITIAL_STACK_SIZE;
#endif
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | #if defined(__linux__) && defined(PIKE_THREADS)
if(lim.rlim_cur > 2*1024*1024) lim.rlim_cur=2*1024*1024;
#endif
|
91fbfd | 2001-04-11 | Henrik Grubbström (Grubba) | | #if defined(_AIX) && defined(__ia64)
if (lim.rlim_cur > 8*1024*1024) {
lim.rlim_cur = 8*1024*1024;
}
#endif /* _AIX && __ia64 */
|
f12b71 | 2001-03-25 | Henrik Grubbström (Grubba) | | #if STACK_DIRECTION < 0
Pike_interpreter.stack_top -= lim.rlim_cur;
#else /* STACK_DIRECTION >= 0 */
Pike_interpreter.stack_top += lim.rlim_cur;
#endif /* STACK_DIRECTION < 0 */
|
752e10 | 1999-04-30 | Fredrik Hübinette (Hubbe) | |
|
9fb730 | 2002-01-08 | Henrik Grubbström (Grubba) | | #if defined(__linux__) && defined(HAVE_DLOPEN) && defined(HAVE_DLFCN_H) && !defined(PPC)
|
07eda2 | 2000-07-05 | Fredrik Hübinette (Hubbe) | | {
char ** bos_location;
void *handle;
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | |
|
07eda2 | 2000-07-05 | Fredrik Hübinette (Hubbe) | | if((handle=dlopen(0, RTLD_LAZY)))
{
bos_location=dlsym(handle,"__pthread_initial_thread_bos");
if(bos_location && *bos_location &&
|
0e7aa1 | 2000-08-05 | Fredrik Hübinette (Hubbe) | | (*bos_location - Pike_interpreter.stack_top) *STACK_DIRECTION < 0)
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | {
|
0e7aa1 | 2000-08-05 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.stack_top=*bos_location;
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | }
|
e31ca2 | 2002-01-08 | Henrik Grubbström (Grubba) | |
dlclose(handle);
|
07eda2 | 2000-07-05 | Fredrik Hübinette (Hubbe) | | }
}
#else
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | #ifdef HAVE_PTHREAD_INITIAL_THREAD_BOS
|
752e10 | 1999-04-30 | Fredrik Hübinette (Hubbe) | | {
extern char * __pthread_initial_thread_bos;
if(__pthread_initial_thread_bos &&
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | (__pthread_initial_thread_bos - Pike_interpreter.stack_top) *STACK_DIRECTION < 0)
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | {
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.stack_top=__pthread_initial_thread_bos;
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | }
|
752e10 | 1999-04-30 | Fredrik Hübinette (Hubbe) | | }
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | | #endif /* HAVE_PTHREAD_INITIAL_THREAD_BOS */
|
9fb730 | 2002-01-08 | Henrik Grubbström (Grubba) | | #endif /* __linux__ && HAVE_DLOPEN && HAVE_DLFCN_H && !PPC*/
|
d1913b | 2000-10-01 | Fredrik Hübinette (Hubbe) | |
|
f12b71 | 2001-03-25 | Henrik Grubbström (Grubba) | | #if STACK_DIRECTION < 0
Pike_interpreter.stack_top += 8192 * sizeof(char *);
#else /* STACK_DIRECTION >= 0 */
Pike_interpreter.stack_top -= 8192 * sizeof(char *);
#endif /* STACK_DIRECTION < 0 */
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | |
#ifdef STACK_DEBUG
fprintf(stderr, "1: C-stack: 0x%08p - 0x%08p, direction:%d\n",
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | &argv, Pike_interpreter.stack_top, STACK_DIRECTION);
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #endif /* STACK_DEBUG */
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | | }
}
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #else /* !HAVE_GETRLIMIT || !RLIMIT_STACK */
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | Pike_interpreter.stack_top += STACK_DIRECTION * (1024*1024 * 8 - 8192 * sizeof(char *));
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #ifdef STACK_DEBUG
fprintf(stderr, "2: C-stack: 0x%08p - 0x%08p, direction:%d\n",
|
cd8632 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | &argv, Pike_interpreter.stack_top, STACK_DIRECTION);
|
a9388a | 1998-09-02 | Henrik Grubbström (Grubba) | | #endif /* STACK_DEBUG */
#endif /* HAVE_GETRLIMIT && RLIMIT_STACK */
|
490887 | 1998-08-10 | Fredrik Hübinette (Hubbe) | |
|
172631 | 2000-05-20 | Per Hedbor | | #if 0
|
2a5096 | 1995-08-23 | Fredrik Hübinette (Hubbe) | | #if defined(HAVE_SETRLIMIT) && defined(RLIMIT_NOFILE)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
struct rlimit lim;
|
f90e54 | 1995-08-17 | Fredrik Hübinette (Hubbe) | | long tmp;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | if(!getrlimit(RLIMIT_NOFILE, &lim))
{
|
5c8e89 | 1995-10-29 | Fredrik Hübinette (Hubbe) | | #ifdef RLIM_INFINITY
if(lim.rlim_max == RLIM_INFINITY)
lim.rlim_max=MAX_OPEN_FILEDESCRIPTORS;
#endif
|
f90e54 | 1995-08-17 | Fredrik Hübinette (Hubbe) | | tmp=MINIMUM(lim.rlim_max, MAX_OPEN_FILEDESCRIPTORS);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | lim.rlim_cur=tmp;
setrlimit(RLIMIT_NOFILE, &lim);
}
}
|
172631 | 2000-05-20 | Per Hedbor | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | #endif
|
408126 | 1998-04-23 | Fredrik Hübinette (Hubbe) | |
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init time...\n"));
|
6e37dc | 1996-06-21 | Fredrik Hübinette (Hubbe) | | GETTIMEOFDAY(¤t_time);
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init threads...\n"));
|
96b0d6 | 2002-01-03 | Henrik Grubbström (Grubba) | |
low_th_init();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init strings...\n"));
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
|
378b2d | 1997-02-06 | Fredrik Hübinette (Hubbe) | | init_shared_string_table();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init interpreter...\n"));
|
378b2d | 1997-02-06 | Fredrik Hübinette (Hubbe) | | init_interpreter();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init types...\n"));
|
aee13c | 1998-05-25 | Henrik Grubbström (Grubba) | | init_types();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
|
143d88 | 2003-11-14 | Martin Stjernholm | | TRACE((stderr, "Init opcodes...\n"));
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
|
143d88 | 2003-11-14 | Martin Stjernholm | | init_opcodes();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init programs...\n"));
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | init_program();
|
2da1e2 | 2003-02-03 | Henrik Grubbström (Grubba) | |
TRACE((stderr, "Init objects...\n"));
|
a5787d | 1999-03-03 | Fredrik Hübinette (Hubbe) | | init_object();
|
a91ca0 | 1998-07-10 | Henrik Grubbström (Grubba) | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | if(SETJMP(back))
{
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | if(throw_severity == THROW_EXIT)
{
num=throw_value.u.integer;
}else{
|
667ec2 | 2003-07-22 | Martin Stjernholm | | if (throw_value.type == T_OBJECT &&
throw_value.u.object->prog == master_load_error_program &&
!get_master()) {
struct generic_error_struct *err;
*(Pike_sp++) = throw_value;
dmalloc_touch_svalue(Pike_sp-1);
throw_value.type=T_INT;
err = (struct generic_error_struct *)
get_storage (Pike_sp[-1].u.object, generic_error_program);
|
545178 | 2003-11-14 | Martin Stjernholm | | ref_push_string (err->error_message);
|
667ec2 | 2003-07-22 | Martin Stjernholm | | f_werror (1);
pop_stack();
}
else
call_handle_error();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | num=10;
}
}else{
back.severity=THROW_EXIT;
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | |
|
586dd3 | 2004-03-10 | Henrik Grubbström (Grubba) | | TRACE((stderr, "Init modules...\n"));
init_modules();
#ifdef TEST_MULTISET
test_multiset();
#endif
|
09126b | 2001-12-19 | Martin Stjernholm | | TRACE((stderr, "Init master...\n"));
master();
call_callback(& post_master_callbacks, 0);
free_callback_list(& post_master_callbacks);
TRACE((stderr, "Call master->_main()...\n"));
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | a=allocate_array_no_init(argc,0);
for(num=0;num<argc;num++)
{
ITEM(a)[num].u.string=make_shared_string(argv[num]);
ITEM(a)[num].type=T_STRING;
}
|
2523ce | 2003-04-28 | Martin Stjernholm | | a->type_field = BIT_STRING;
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | push_array(a);
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | |
|
092e54 | 2003-12-17 | Marcus Comstedt | | #ifdef __amigaos__
|
3189c9 | 2004-01-31 | Marcus Comstedt | | #ifdef __amigaos4__
if(DOSBase->dl_lib.lib_Version >= 50) {
struct svalue *mark = Pike_sp;
IDOS->ScanVars(&scan_amigaos_environment_hook,
GVF_BINARY_VAR|GVF_DONT_NULL_TERM,
NULL);
f_aggregate(Pike_sp-mark);
} else
#endif
push_array(allocate_array_no_init(0,0));
|
092e54 | 2003-12-17 | Marcus Comstedt | | #else
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | for(num=0;environ[num];num++);
a=allocate_array_no_init(num,0);
for(num=0;environ[num];num++)
{
ITEM(a)[num].u.string=make_shared_string(environ[num]);
ITEM(a)[num].type=T_STRING;
}
|
2523ce | 2003-04-28 | Martin Stjernholm | | a->type_field = BIT_STRING;
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | push_array(a);
|
092e54 | 2003-12-17 | Marcus Comstedt | | #endif
|
fe5eb0 | 1998-01-31 | Fredrik Hübinette (Hubbe) | |
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | apply(master(),"_main",2);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | pop_stack();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | num=0;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
UNSETJMP(back);
|
cfd36c | 2003-11-14 | Martin Stjernholm | | TRACE((stderr, "Exit %d...\n", num));
|
ff34a5 | 2001-05-31 | Henrik Grubbström (Grubba) | |
|
eb2fd5 | 2000-11-06 | Henrik Grubbström (Grubba) | | pike_do_exit(num);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | return num;
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | }
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | #undef ATTRIBUTE
#define ATTRIBUTE(X)
|
eb2fd5 | 2000-11-06 | Henrik Grubbström (Grubba) | | DECLSPEC(noreturn) void pike_do_exit(int num) ATTRIBUTE((noreturn))
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | {
|
d2361e | 2003-06-30 | Martin Stjernholm | | call_callback(&exit_callbacks, NULL);
|
ecf145 | 1998-03-21 | Fredrik Hübinette (Hubbe) | | free_callback_list(&exit_callbacks);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | exit_modules();
|
291600 | 1998-01-16 | Henrik Grubbström (Grubba) | |
|
2043ba | 1998-02-10 | Fredrik Hübinette (Hubbe) | | #ifdef DEBUG_MALLOC
|
da4129 | 2002-11-25 | Martin Stjernholm | | cleanup_memhdrs();
cleanup_debug_malloc();
|
2043ba | 1998-02-10 | Fredrik Hübinette (Hubbe) | | #endif
|
061244 | 2001-05-16 | Fredrik Hübinette (Hubbe) | |
#ifdef PROFILING
{
int q;
for(q=0;q<(long)NELEM(samples);q++)
if(samples[q])
fprintf(stderr,"STACK WAS %4d Kb %12u times\n",q-1,samples[q]);
}
#endif
|
9a6d00 | 2001-06-26 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
|
143d88 | 2003-11-14 | Martin Stjernholm | | exit_opcodes();
|
9a6d00 | 2001-06-26 | Fredrik Hübinette (Hubbe) | | #endif
|
0f65e1 | 2002-09-14 | Martin Stjernholm | | #ifdef INTERNAL_PROFILING
fprintf (stderr, "Evaluator callback calls: %lu\n", evaluator_callback_calls);
#ifdef PIKE_THREADS
fprintf (stderr, "Thread yields: %lu\n", thread_yields);
#endif
fprintf (stderr, "Main thread summary:\n");
debug_print_rusage (stderr);
#endif
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | exit(num);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
156fd5 | 1997-10-27 | Fredrik Hübinette (Hubbe) | | void low_init_main(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
6f3ad0 | 2001-07-02 | Martin Stjernholm | | void init_iterators(void);
|
865075 | 2001-06-25 | Henrik Grubbström (Grubba) | |
|
f8bb98 | 2001-12-20 | Martin Stjernholm | | init_cpp();
|
87f908 | 2001-03-12 | Fredrik Hübinette (Hubbe) | | init_backend();
|
4cdb80 | 2001-02-23 | Fredrik Hübinette (Hubbe) | | init_iterators();
|
9b1f03 | 2000-10-09 | Fredrik Hübinette (Hubbe) | | init_pike_searching();
|
f01a52 | 1999-08-14 | Fredrik Hübinette (Hubbe) | | init_error();
|
7e97c3 | 1999-01-21 | Fredrik Hübinette (Hubbe) | | init_pike_security();
|
378b2d | 1997-02-06 | Fredrik Hübinette (Hubbe) | | th_init();
|
19aaeb | 1998-05-25 | Fredrik Hübinette (Hubbe) | | init_operators();
|
865075 | 2001-06-25 | Henrik Grubbström (Grubba) | |
init_builtin();
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | init_builtin_efuns();
|
cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | init_signals();
|
ca74dd | 1996-10-08 | Fredrik Hübinette (Hubbe) | | init_dynamic_load();
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
378b2d | 1997-02-06 | Fredrik Hübinette (Hubbe) | | void exit_main(void)
|
156fd5 | 1997-10-27 | Fredrik Hübinette (Hubbe) | | {
|
b5c00b | 2003-03-30 | Martin Stjernholm | | #ifdef DO_PIKE_CLEANUP
cleanup_objects();
|
826bd7 | 2003-04-02 | Martin Stjernholm | |
exit_dynamic_load();
|
b5c00b | 2003-03-30 | Martin Stjernholm | | #endif
|
156fd5 | 1997-10-27 | Fredrik Hübinette (Hubbe) | | }
void init_main(void)
{
}
void low_exit_main(void)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
5f0624 | 1999-04-11 | Fredrik Hübinette (Hubbe) | | #ifdef DO_PIKE_CLEANUP
|
727a4f | 2001-07-02 | Martin Stjernholm | | void exit_iterators(void);
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
826bd7 | 2003-04-02 | Martin Stjernholm | |
|
e37a3e | 1999-10-09 | Fredrik Hübinette (Hubbe) | | #ifdef AUTO_BIGNUM
exit_auto_bignum();
#endif
|
9b1f03 | 2000-10-09 | Fredrik Hübinette (Hubbe) | | exit_pike_searching();
|
a5787d | 1999-03-03 | Fredrik Hübinette (Hubbe) | | exit_object();
|
cb2256 | 1995-10-11 | Fredrik Hübinette (Hubbe) | | exit_signals();
|
865075 | 2001-06-25 | Henrik Grubbström (Grubba) | | exit_builtin();
|
574088 | 1998-01-01 | Fredrik Hübinette (Hubbe) | | exit_cpp();
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | cleanup_interpret();
|
1c5b34 | 2003-03-26 | Martin Nilsson | | exit_builtin_constants();
|
feef14 | 2002-05-14 | Martin Stjernholm | | cleanup_module_support();
|
19aaeb | 1998-05-25 | Fredrik Hübinette (Hubbe) | | exit_operators();
|
c52c08 | 2001-03-28 | Henrik Grubbström (Grubba) | | exit_iterators();
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | cleanup_program();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | cleanup_compiler();
|
8310c6 | 1999-03-19 | Fredrik Hübinette (Hubbe) | | cleanup_error();
|
c2be51 | 2001-03-21 | Fredrik Hübinette (Hubbe) | | exit_backend();
|
a12b8c | 2003-03-30 | Martin Stjernholm | | cleanup_gc();
cleanup_pike_types();
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | |
|
826bd7 | 2003-04-02 | Martin Stjernholm | |
th_cleanup();
|
cee581 | 1999-12-05 | Henrik Grubbström (Grubba) | | #ifdef SHARED_NODES
free(node_hash.table);
#endif /* SHARED_NODES */
|
1ab7c6 | 1999-04-08 | Fredrik Hübinette (Hubbe) | | exit_pike_security();
|
f54521 | 1998-01-27 | Fredrik Hübinette (Hubbe) | | free_svalue(& throw_value);
throw_value.type=T_INT;
|
b5c00b | 2003-03-30 | Martin Stjernholm | |
|
7e548a | 2001-07-05 | Fredrik Hübinette (Hubbe) | | {
|
a12b8c | 2003-03-30 | Martin Stjernholm | | #ifdef DEBUG_MALLOC
|
b5c00b | 2003-03-30 | Martin Stjernholm | | gc_keep_markers = verbose_debug_exit;
|
a12b8c | 2003-03-30 | Martin Stjernholm | | #endif
|
123657 | 2001-07-06 | Henrik Grubbström (Grubba) | | while(1) {
|
7e548a | 2001-07-05 | Fredrik Hübinette (Hubbe) | | int tmp=num_objects;
|
51adb8 | 2003-01-12 | Martin Stjernholm | | do_gc(NULL, 1);
|
7e548a | 2001-07-05 | Fredrik Hübinette (Hubbe) | | if(num_objects >= tmp) break;
}
}
|
06983f | 1996-09-22 | Fredrik Hübinette (Hubbe) | |
|
b5c00b | 2003-03-30 | Martin Stjernholm | | #ifdef DEBUG_MALLOC
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | if(verbose_debug_exit)
{
|
2043ba | 1998-02-10 | Fredrik Hübinette (Hubbe) | | fprintf(stderr,"Exited normally, counting bytes.\n");
|
56ac10 | 2000-03-29 | Fredrik Hübinette (Hubbe) | |
#ifdef _REENTRANT
if(count_pike_threads()>1)
{
fprintf(stderr,"Byte counting aborted, because all threads have not exited properly.\n");
verbose_debug_exit=0;
return;
}
#endif
|
25479a | 2000-03-07 | Fredrik Hübinette (Hubbe) | | search_all_memheaders_for_references();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | |
|
cd451f | 2004-03-15 | Martin Stjernholm | | #define REPORT_LINKED_LIST_LEAKS(TYPE, START, T_TYPE, NAME) do { \
|
a12b8c | 2003-03-30 | Martin Stjernholm | | size_t num = 0; \
struct TYPE *x; \
|
cd451f | 2004-03-15 | Martin Stjernholm | | for (x = START; x; x = x->next) { \
|
a12b8c | 2003-03-30 | Martin Stjernholm | | struct marker *m = find_marker (x); \
num++; \
if (!m) { \
fprintf (stderr, "Didn't find gc marker as expected for:\n"); \
describe_something (x, T_TYPE, 2, 2, 0, NULL); \
} \
else if (m->refs != x->refs) { \
|
b5c00b | 2003-03-30 | Martin Stjernholm | | fprintf (stderr, NAME " got %d unaccounted references:\n", \
|
a12b8c | 2003-03-30 | Martin Stjernholm | | x->refs - m->refs); \
describe_something (x, T_TYPE, 2, 2, 0, NULL); \
} \
} \
if (num) \
fprintf (stderr, NAME "s left: %"PRINTSIZET"d\n", num); \
} while (0)
|
cd451f | 2004-03-15 | Martin Stjernholm | | REPORT_LINKED_LIST_LEAKS (array, first_array, T_ARRAY, "Array");
REPORT_LINKED_LIST_LEAKS (multiset, first_multiset, T_MULTISET, "Multiset");
REPORT_LINKED_LIST_LEAKS (mapping, first_mapping, T_MAPPING, "Mapping");
REPORT_LINKED_LIST_LEAKS (program, first_program, T_PROGRAM, "Program");
REPORT_LINKED_LIST_LEAKS (object, first_object, T_OBJECT, "Object");
|
a12b8c | 2003-03-30 | Martin Stjernholm | |
#undef REPORT_LINKED_LIST_LEAKS
|
cd451f | 2004-03-15 | Martin Stjernholm | | #define ZAP_LINKED_LIST_LEAKS(TYPE, START) do { \
|
a12b8c | 2003-03-30 | Martin Stjernholm | | struct TYPE *x; \
|
cd451f | 2004-03-15 | Martin Stjernholm | | for (x = START; x; x = x->next) { \
|
a12b8c | 2003-03-30 | Martin Stjernholm | | struct marker *m = find_marker (x); \
if (m) \
while (x->refs > m->refs) \
PIKE_CONCAT(free_, TYPE) (x); \
} \
} while (0)
|
cd451f | 2004-03-15 | Martin Stjernholm | | ZAP_LINKED_LIST_LEAKS (array, first_array);
ZAP_LINKED_LIST_LEAKS (multiset, first_multiset);
ZAP_LINKED_LIST_LEAKS (mapping, first_mapping);
ZAP_LINKED_LIST_LEAKS (program, first_program);
ZAP_LINKED_LIST_LEAKS (object, first_object);
|
a12b8c | 2003-03-30 | Martin Stjernholm | |
#undef ZAP_LINKED_LIST_LEAKS
gc_external_refs_zapped = 1;
gc_keep_markers = 0;
do_gc (NULL, 1);
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | |
{
|
a12b8c | 2003-03-30 | Martin Stjernholm | | INT32 num, size;
count_memory_in_pike_types(&num, &size);
if (num)
fprintf(stderr, "Types left: %d (%d bytes)\n", num, size);
describe_all_types();
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | }
}
#endif
|
5b7b06 | 1999-04-08 | Fredrik Hübinette (Hubbe) | |
|
b5c00b | 2003-03-30 | Martin Stjernholm | | destruct_objects_to_destruct_cb();
|
a12b8c | 2003-03-30 | Martin Stjernholm | |
|
826bd7 | 2003-04-02 | Martin Stjernholm | |
|
b660c8 | 1999-03-01 | Fredrik Hübinette (Hubbe) | | really_clean_up_interpret();
|
5f0624 | 1999-04-11 | Fredrik Hübinette (Hubbe) | |
|
5b7b06 | 1999-04-08 | Fredrik Hübinette (Hubbe) | | cleanup_callbacks();
free_all_callable_blocks();
exit_destroy_called_mark_hash();
|
f6f384 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
|
61daf7 | 2001-03-29 | Henrik Grubbström (Grubba) | | cleanup_pike_type_table();
cleanup_shared_string_table();
|
da667d | 2000-09-28 | Henrik Grubbström (Grubba) | | free_dynamic_load();
|
22ef9c | 2000-09-30 | Martin Stjernholm | | first_mapping=0;
|
4be46f | 2000-03-07 | Fredrik Hübinette (Hubbe) | | free_all_mapping_blocks();
|
22ef9c | 2000-09-30 | Martin Stjernholm | | first_object=0;
|
648a1a | 2000-06-22 | Fredrik Hübinette (Hubbe) | | free_all_object_blocks();
|
2d4a38 | 2001-05-13 | Fredrik Hübinette (Hubbe) | | first_program=0;
|
f3c715 | 2001-04-14 | Fredrik Hübinette (Hubbe) | | free_all_program_blocks();
|
5b15bb | 2001-12-10 | Martin Stjernholm | | #ifdef PIKE_NEW_MULTISETS
exit_multiset();
#endif
|
5b7b06 | 1999-04-08 | Fredrik Hübinette (Hubbe) | | #endif
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|