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.
gentoo-overlay/dev-java/icedtea/files/7-cacao-pr-157.patch

140 lines
4.2 KiB

diff -Naur cacao/cacao/src/vm/options.cpp cacao/cacao/src/vm/options.cpp
--- cacao/cacao/src/vm/options.cpp 2014-12-12 21:14:45.000000000 +0000
+++ cacao/cacao/src/vm/options.cpp 2015-12-23 21:01:37.644275263 +0000
@@ -26,6 +26,7 @@
#include "config.h"
#include <limits.h>
+#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -60,9 +61,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.hpp cacao/cacao/src/vm/options.hpp
--- cacao/cacao/src/vm/options.hpp 2014-12-12 21:14:45.000000000 +0000
+++ cacao/cacao/src/vm/options.hpp 2015-12-23 21:01:37.645275246 +0000
@@ -26,6 +26,7 @@
#ifndef OPTIONS_HPP_
#define OPTIONS_HPP_ 1
+#include <stddef.h> // for size_t
#include <stdint.h> // for int64_t
#include <stdio.h> // for FILE
#include "config.h" // for ENABLE_DEBUG_FILTER, etc
@@ -77,9 +78,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 2014-12-12 21:14:45.000000000 +0000
+++ cacao/cacao/src/vm/vm.cpp 2015-12-23 21:01:38.046268504 +0000
@@ -29,9 +29,14 @@
#include <cerrno>
#include <cstdlib>
#include <exception>
+#include <stddef.h>
#include <stdint.h>
#include <inttypes.h>
+#if defined(__LINUX__)
+#include <unistd.h>
+#endif
+
#include "md-abi.hpp"
#include "mm/codememory.hpp"
@@ -690,6 +695,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.
options_xx(vm_args);
@@ -896,18 +914,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;
@@ -1498,9 +1531,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"));