You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.0 KiB
144 lines
4.0 KiB
diff -Naur cacao/cacao/src/vm/options.c cacao/cacao/src/vm/options.c
|
|
--- cacao/cacao/src/vm/options.c 2013-01-10 16:45:14.000000000 +0000
|
|
+++ cacao/cacao/src/vm/options.c 2016-01-03 11:48:06.439004345 +0000
|
|
@@ -26,6 +26,7 @@
|
|
#include "config.h"
|
|
|
|
#include <limits.h>
|
|
+#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
@@ -56,9 +57,9 @@
|
|
|
|
bool opt_run = true;
|
|
|
|
-s4 opt_heapmaxsize = 0; /* maximum heap size */
|
|
-s4 opt_heapstartsize = 0; /* initial heap size */
|
|
-s4 opt_stacksize = 0; /* thread stack size */
|
|
+size_t opt_heapmaxsize = 0; /* maximum heap size */
|
|
+size_t opt_heapstartsize = 0; /* initial heap size */
|
|
+size_t opt_stacksize = 0; /* thread stack size */
|
|
|
|
bool opt_verbose = false;
|
|
bool opt_debugcolor = false; /* use ANSI terminal sequences */
|
|
diff -Naur cacao/cacao/src/vm/options.h cacao/cacao/src/vm/options.h
|
|
--- cacao/cacao/src/vm/options.h 2013-01-10 16:45:14.000000000 +0000
|
|
+++ cacao/cacao/src/vm/options.h 2016-01-03 11:48:55.397204706 +0000
|
|
@@ -32,6 +32,7 @@
|
|
extern "C" {
|
|
#endif
|
|
|
|
+#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "vm/types.h"
|
|
@@ -82,9 +83,9 @@
|
|
extern bool opt_jar;
|
|
extern bool opt_run;
|
|
|
|
-extern s4 opt_heapmaxsize;
|
|
-extern s4 opt_heapstartsize;
|
|
-extern s4 opt_stacksize;
|
|
+extern size_t opt_heapmaxsize;
|
|
+extern size_t opt_heapstartsize;
|
|
+extern size_t opt_stacksize;
|
|
|
|
extern bool opt_verbose;
|
|
extern bool opt_debugcolor;
|
|
diff -Naur cacao/cacao/src/vm/vm.cpp cacao/cacao/src/vm/vm.cpp
|
|
--- cacao/cacao/src/vm/vm.cpp 2013-01-10 16:45:14.000000000 +0000
|
|
+++ cacao/cacao/src/vm/vm.cpp 2016-01-03 11:50:15.779891441 +0000
|
|
@@ -25,6 +25,7 @@
|
|
|
|
#include "config.h"
|
|
|
|
+#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <exception>
|
|
@@ -33,6 +34,10 @@
|
|
#include <errno.h>
|
|
#include <stdlib.h>
|
|
|
|
+#if defined(__LINUX__)
|
|
+#include <unistd.h>
|
|
+#endif
|
|
+
|
|
#include "vm/types.h"
|
|
|
|
#include "arch.h"
|
|
@@ -699,6 +704,19 @@
|
|
opt_heapstartsize = HEAP_STARTSIZE;
|
|
opt_stacksize = STACK_SIZE;
|
|
|
|
+#if defined(__LINUX__)
|
|
+ // Calculate 1/4 of the physical memory.
|
|
+ size_t qmem = sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) / 4;
|
|
+
|
|
+ if (qmem > INT32_MAX) {
|
|
+ // Allocate no more than 2GB.
|
|
+ opt_heapmaxsize = INT32_MAX;
|
|
+ } else if (qmem > HEAP_MAXSIZE) {
|
|
+ // Otherwise use this if greater than default (128MB).
|
|
+ opt_heapmaxsize = qmem;
|
|
+ }
|
|
+#endif
|
|
+
|
|
// First of all, parse the -XX options.
|
|
|
|
#if defined(ENABLE_VMLOG)
|
|
@@ -914,18 +932,33 @@
|
|
case OPT_SS:
|
|
{
|
|
char c;
|
|
- int j;
|
|
+ size_t j;
|
|
|
|
+ errno = 0;
|
|
c = opt_arg[strlen(opt_arg) - 1];
|
|
+ j = strtoul(opt_arg, NULL, 10);
|
|
+
|
|
+ if (errno)
|
|
+ break; // Invalid.
|
|
|
|
if ((c == 'k') || (c == 'K')) {
|
|
- j = atoi(opt_arg) * 1024;
|
|
+ if (j > SIZE_MAX / 1024)
|
|
+ break; // Overflow.
|
|
+ else
|
|
+ j *= 1024;
|
|
|
|
} else if ((c == 'm') || (c == 'M')) {
|
|
- j = atoi(opt_arg) * 1024 * 1024;
|
|
-
|
|
- } else
|
|
- j = atoi(opt_arg);
|
|
+ if (j > SIZE_MAX / 1024 / 1024)
|
|
+ break; // Overflow.
|
|
+ else
|
|
+ j *= 1024 * 1024;
|
|
+
|
|
+ } else if ((c == 'g') || (c == 'G')) {
|
|
+ if (j > SIZE_MAX / 1024 / 1024 / 1024)
|
|
+ break; // Overflow.
|
|
+ else
|
|
+ j *= 1024 * 1024 * 1024;
|
|
+ }
|
|
|
|
if (opt == OPT_MX)
|
|
opt_heapmaxsize = j;
|
|
@@ -1525,9 +1558,9 @@
|
|
void VM::print_run_time_config()
|
|
{
|
|
puts("Run-time variables:\n");
|
|
- printf(" maximum heap size : %d\n", opt_heapmaxsize);
|
|
- printf(" initial heap size : %d\n", opt_heapstartsize);
|
|
- printf(" stack size : %d\n", opt_stacksize);
|
|
+ printf(" maximum heap size : %lu\n", opt_heapmaxsize);
|
|
+ printf(" initial heap size : %lu\n", opt_heapstartsize);
|
|
+ printf(" stack size : %lu\n", opt_stacksize);
|
|
|
|
#if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
|
|
printf(" gnu.classpath.boot.library.path: %s\n", _properties.get("gnu.classpath.boot.library.path"));
|