338
* Create the very first process.
342
erts_first_process(Eterm modname, void* code, unsigned size, int argc, char** argv)
352
if (erts_find_function(modname, am_start, 1) == NULL) {
356
ap = atom_tab(atom_val(modname));
357
memcpy(sbuf, ap->name, ap->len);
358
sbuf[ap->len] = '\0';
359
erl_exit(5, "No function %s:start/1\n", sbuf);
363
* We need a dummy parent process to be able to call erl_create_process().
365
erts_init_empty_process(&parent);
366
hp = HAlloc(&parent, argc*2 + 4);
368
for (i = argc-1; i >= 0; i--) {
369
int len = sys_strlen(argv[i]);
370
args = CONS(hp, new_binary(&parent, (byte*)argv[i], len), args);
373
args = CONS(hp, new_binary(&parent, code, size), args);
375
args = CONS(hp, args, NIL);
378
pid = erl_create_process(&parent, modname, am_start, args, &so);
379
p = process_tab[internal_pid_index(pid)];
380
p->group_leader = pid;
382
erts_cleanup_empty_process(&parent);
386
* XXX Old way of starting. Hopefully soon obsolete.
390
342
erl_first_process_otp(char* modname, void* code, unsigned size, int argc, char** argv)
514
466
/* erts_fprintf(stderr, "-# number set the number of items to be used in traces etc\n"); */
516
erts_fprintf(stderr, "-a size suggested stack size in kilo words for threads\n");
517
erts_fprintf(stderr, " in the async-thread pool, valid range is [%d-%d]\n",
468
erts_fprintf(stderr, "-a size suggested stack size in kilo words for threads\n");
469
erts_fprintf(stderr, " in the async-thread pool, valid range is [%d-%d]\n",
518
470
ERTS_ASYNC_THREAD_MIN_STACK_SIZE,
519
471
ERTS_ASYNC_THREAD_MAX_STACK_SIZE);
520
erts_fprintf(stderr, "-A number set number of threads in async thread pool,\n");
521
erts_fprintf(stderr, " valid range is [0-%d]\n",
472
erts_fprintf(stderr, "-A number set number of threads in async thread pool,\n");
473
erts_fprintf(stderr, " valid range is [0-%d]\n",
522
474
ERTS_MAX_NO_OF_ASYNC_THREADS);
524
erts_fprintf(stderr, "-B[c|d|i] c to have Ctrl-c interrupt the Erlang shell,\n");
525
erts_fprintf(stderr, " d (or no extra option) to disable the break\n");
526
erts_fprintf(stderr, " handler, i to ignore break signals\n");
476
erts_fprintf(stderr, "-B[c|d|i] c to have Ctrl-c interrupt the Erlang shell,\n");
477
erts_fprintf(stderr, " d (or no extra option) to disable the break\n");
478
erts_fprintf(stderr, " handler, i to ignore break signals\n");
528
480
/* erts_fprintf(stderr, "-b func set the boot function (default boot)\n"); */
530
erts_fprintf(stderr, "-c disable continuous date/time correction with\n");
531
erts_fprintf(stderr, " respect to uptime\n");
533
erts_fprintf(stderr, "-d don't write a crash dump for internally detected errors\n");
534
erts_fprintf(stderr, " (halt(String) will still produce a crash dump)\n");
536
erts_fprintf(stderr, "-h number set minimum heap size in words (default %d)\n",
482
erts_fprintf(stderr, "-c disable continuous date/time correction with\n");
483
erts_fprintf(stderr, " respect to uptime\n");
485
erts_fprintf(stderr, "-d don't write a crash dump for internally detected errors\n");
486
erts_fprintf(stderr, " (halt(String) will still produce a crash dump)\n");
488
erts_fprintf(stderr, "-hms size set minimum heap size in words (default %d)\n",
490
erts_fprintf(stderr, "-hmbs size set minimum binary virtual heap size in words (default %d)\n",
539
493
/* erts_fprintf(stderr, "-i module set the boot module (default init)\n"); */
541
erts_fprintf(stderr, "-K boolean enable or disable kernel poll\n");
543
erts_fprintf(stderr, "-l turn on auto load tracing\n");
545
erts_fprintf(stderr, "-M<X> <Y> memory allocator switches,\n");
546
erts_fprintf(stderr, " see the erts_alloc(3) documentation for more info.\n");
548
erts_fprintf(stderr, "-P number set maximum number of processes on this node,\n");
549
erts_fprintf(stderr, " valid range is [%d-%d]\n",
495
erts_fprintf(stderr, "-K boolean enable or disable kernel poll\n");
497
erts_fprintf(stderr, "-l turn on auto load tracing\n");
499
erts_fprintf(stderr, "-M<X> <Y> memory allocator switches,\n");
500
erts_fprintf(stderr, " see the erts_alloc(3) documentation for more info.\n");
502
erts_fprintf(stderr, "-P number set maximum number of processes on this node,\n");
503
erts_fprintf(stderr, " valid range is [%d-%d]\n",
550
504
ERTS_MIN_PROCESSES, ERTS_MAX_PROCESSES);
551
erts_fprintf(stderr, "-R number set compatibility release number,\n");
552
erts_fprintf(stderr, " valid range [%d-%d]\n",
505
erts_fprintf(stderr, "-R number set compatibility release number,\n");
506
erts_fprintf(stderr, " valid range [%d-%d]\n",
553
507
ERTS_MIN_COMPAT_REL, this_rel_num());
555
erts_fprintf(stderr, "-r force ets memory block to be moved on realloc\n");
556
erts_fprintf(stderr, "-sbt type set scheduler bind type, valid types are:\n");
557
erts_fprintf(stderr, " u|ns|ts|ps|s|nnts|nnps|tnnps|db\n");
558
erts_fprintf(stderr, "-sct cput set cpu topology,\n");
559
erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
560
erts_fprintf(stderr, "-sss size suggested stack size in kilo words for scheduler threads,\n");
561
erts_fprintf(stderr, " valid range is [%d-%d]\n",
509
erts_fprintf(stderr, "-r force ets memory block to be moved on realloc\n");
510
erts_fprintf(stderr, "-rg amount set reader groups limit\n");
511
erts_fprintf(stderr, "-sbt type set scheduler bind type, valid types are:\n");
512
erts_fprintf(stderr, " u|ns|ts|ps|s|nnts|nnps|tnnps|db\n");
513
erts_fprintf(stderr, "-sct cput set cpu topology,\n");
514
erts_fprintf(stderr, " see the erl(1) documentation for more info.\n");
515
erts_fprintf(stderr, "-swt val set scheduler wakeup threshold, valid values are:\n");
516
erts_fprintf(stderr, " very_low|low|medium|high|very_high.\n");
517
erts_fprintf(stderr, "-sss size suggested stack size in kilo words for scheduler threads,\n");
518
erts_fprintf(stderr, " valid range is [%d-%d]\n",
562
519
ERTS_SCHED_THREAD_MIN_STACK_SIZE,
563
520
ERTS_SCHED_THREAD_MAX_STACK_SIZE);
564
erts_fprintf(stderr, "-S n1:n2 set number of schedulers (n1), and number of\n");
565
erts_fprintf(stderr, " schedulers online (n2), valid range for both\n");
566
erts_fprintf(stderr, " numbers are [1-%d]\n",
521
erts_fprintf(stderr, "-S n1:n2 set number of schedulers (n1), and number of\n");
522
erts_fprintf(stderr, " schedulers online (n2), valid range for both\n");
523
erts_fprintf(stderr, " numbers are [1-%d]\n",
567
524
ERTS_MAX_NO_OF_SCHEDULERS);
568
erts_fprintf(stderr, "-T number set modified timing level,\n");
569
erts_fprintf(stderr, " valid range is [0-%d]\n",
525
erts_fprintf(stderr, "-t size set the maximum number of atoms the "
526
"emulator can handle\n");
527
erts_fprintf(stderr, " valid range is [%d-%d]\n",
528
MIN_ATOM_TABLE_SIZE, MAX_ATOM_TABLE_SIZE);
529
erts_fprintf(stderr, "-T number set modified timing level,\n");
530
erts_fprintf(stderr, " valid range is [0-%d]\n",
570
531
ERTS_MODIFIED_TIMING_LEVELS-1);
571
erts_fprintf(stderr, "-V print Erlang version\n");
573
erts_fprintf(stderr, "-v turn on chatty mode (GCs will be reported etc)\n");
575
erts_fprintf(stderr, "-W<i|w> set error logger warnings mapping,\n");
576
erts_fprintf(stderr, " see error_logger documentation for details\n");
532
erts_fprintf(stderr, "-V print Erlang version\n");
534
erts_fprintf(stderr, "-v turn on chatty mode (GCs will be reported etc)\n");
536
erts_fprintf(stderr, "-W<i|w> set error logger warnings mapping,\n");
537
erts_fprintf(stderr, " see error_logger documentation for details\n");
538
erts_fprintf(stderr, "-zdbbl size set the distribution buffer busy limit in kilobytes\n");
539
erts_fprintf(stderr, " valid range is [1-%d]\n", INT_MAX/1024);
578
540
erts_fprintf(stderr, "\n");
579
541
erts_fprintf(stderr, "Note that if the emulator is started with erlexec (typically\n");
580
542
erts_fprintf(stderr, "from the erl script), these flags should be specified with +.\n");
922
1004
fprintf(stderr, "The undocumented +H option has been removed (R10B-6).\n\n");
926
/* set default heap size */
927
arg = get_arg(argv[i]+2, argv[i+1], &i);
928
if ((H_MIN_SIZE = atoi(arg)) <= 0) {
929
erts_fprintf(stderr, "bad heap size %s\n", arg);
1008
char *sub_param = argv[i]+2;
1009
/* set default heap size
1011
* h|ms - min_heap_size
1012
* h|mbs - min_bin_vheap_size
1015
if (has_prefix("mbs", sub_param)) {
1016
arg = get_arg(sub_param+3, argv[i+1], &i);
1017
if ((BIN_VH_MIN_SIZE = atoi(arg)) <= 0) {
1018
erts_fprintf(stderr, "bad heap size %s\n", arg);
1021
VERBOSE(DEBUG_SYSTEM, ("using minimum binary virtual heap size %d\n", BIN_VH_MIN_SIZE));
1023
} else if (has_prefix("ms", sub_param)) {
1024
arg = get_arg(sub_param+2, argv[i+1], &i);
1025
if ((H_MIN_SIZE = atoi(arg)) <= 0) {
1026
erts_fprintf(stderr, "bad heap size %s\n", arg);
1029
VERBOSE(DEBUG_SYSTEM, ("using minimum heap size %d\n", H_MIN_SIZE));
1031
/* backward compatibility */
1032
arg = get_arg(argv[i]+2, argv[i+1], &i);
1033
if ((H_MIN_SIZE = atoi(arg)) <= 0) {
1034
erts_fprintf(stderr, "bad heap size %s\n", arg);
1037
VERBOSE(DEBUG_SYSTEM, ("using minimum heap size %d\n", H_MIN_SIZE));
932
VERBOSE(DEBUG_SYSTEM,
933
("using minimum heap size %d\n",H_MIN_SIZE));
938
1043
* Never produce crash dumps for internally detected