From owner-svn-ports-head@FreeBSD.ORG Sat Nov 9 00:11:01 2013 Return-Path: Delivered-To: svn-ports-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 75651979; Sat, 9 Nov 2013 00:11:01 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 60DDF29FA; Sat, 9 Nov 2013 00:11:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rA90B1m9016930; Sat, 9 Nov 2013 00:11:01 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rA90B0TX016921; Sat, 9 Nov 2013 00:11:00 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201311090011.rA90B0TX016921@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 9 Nov 2013 00:11:00 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r333271 - in head/java: openjdk6 openjdk6-jre openjdk6/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Nov 2013 00:11:01 -0000 Author: jkim Date: Sat Nov 9 00:11:00 2013 New Revision: 333271 URL: http://svnweb.freebsd.org/changeset/ports/333271 Log: - Add throw() to all user-defined operator new()s within HotSpot because Clang does not support "-fcheck-new". Note it is a backport of S8021954 (http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/9758d9f36299). - Re-implement signal_name() with sys_signame(3) and adjust the comments. - Re-implement ThreadCritical with PTHREAD_MUTEX_RECURSIVE. - Fix DEBUG build with Clang on i386. Clang does not support "-gstabs". - Limit allocatable physical memory per getrlimit(2). Modified: head/java/openjdk6-jre/Makefile head/java/openjdk6/Makefile head/java/openjdk6/files/patch-set Modified: head/java/openjdk6-jre/Makefile ============================================================================== --- head/java/openjdk6-jre/Makefile Fri Nov 8 23:55:04 2013 (r333270) +++ head/java/openjdk6-jre/Makefile Sat Nov 9 00:11:00 2013 (r333271) @@ -1,6 +1,6 @@ # $FreeBSD$ -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= java devel PKGNAMESUFFIX= -jre Modified: head/java/openjdk6/Makefile ============================================================================== --- head/java/openjdk6/Makefile Fri Nov 8 23:55:04 2013 (r333270) +++ head/java/openjdk6/Makefile Sat Nov 9 00:11:00 2013 (r333271) @@ -3,7 +3,7 @@ PORTNAME= openjdk6 PORTVERSION= b28 -PORTREVISION?= 4 +PORTREVISION?= 5 CATEGORIES= java devel MASTER_SITES= ${MASTER_SITE_APACHE:S,%SUBDIR%/,ant/binaries/:ant,} \ http://download.java.net/openjdk/jtreg/promoted/4.1/b05/:jtreg \ @@ -192,7 +192,7 @@ ICONV_LIBS= -L${LOCALBASE}/lib ${ICONV_L ZLIB_LIBS?= -lz .if ${COMPILER_TYPE} == "clang" -MAKE_ENV+= COMPILER_WARNINGS_FATAL=false +MAKE_ENV+= COMPILER_WARNINGS_FATAL=false DEBUG_CFLAGS/i486=-g .if empty(PORT_OPTIONS:MDEBUG) && empty(PORT_OPTIONS:MFASTDEBUG) MAKE_ENV+= WARNINGS_ARE_ERRORS=-w .endif Modified: head/java/openjdk6/files/patch-set ============================================================================== --- head/java/openjdk6/files/patch-set Fri Nov 8 23:55:04 2013 (r333270) +++ head/java/openjdk6/files/patch-set Sat Nov 9 00:11:00 2013 (r333271) @@ -593,6 +593,110 @@ // GC Ergo Flags define_pd_global(intx, CMSYoungGenPerWorker, 64*M); // default max size of CMS young gen, per GC worker thread +--- hotspot/src/os/bsd/vm/jvm_bsd.cpp ++++ hotspot/src/os/bsd/vm/jvm_bsd.cpp +@@ -110,71 +110,30 @@ + JVM_END + + /* +- All the defined signal names for Bsd. ++ All the defined signal names for BSD are defined by sys_signame[]. + + NOTE that not all of these names are accepted by our Java implementation + + Via an existing claim by the VM, sigaction restrictions, or + the "rules of Unix" some of these names will be rejected at runtime. + For example the VM sets up to handle USR1, sigaction returns EINVAL for +- STOP, and Bsd simply doesn't allow catching of KILL. ++ STOP, and BSD simply doesn't allow catching of KILL. + + Here are the names currently accepted by a user of sun.misc.Signal with + 1.4.1 (ignoring potential interaction with use of chaining, etc): + +- HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT, +- CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF, +- WINCH, POLL, IO, PWR, SYS +- ++ HUP, INT, TRAP, ABRT, EMT, BUS, SYS, PIPE, ALRM, TERM, URG, TSTP, ++ CONT, CHLD, TTIN, TTOU, IO, XCPU, XFSZ, VTALRM, PROF, WINCH, INFO, ++ USR2 + */ + +-struct siglabel { +- const char *name; +- int number; +-}; +- +-struct siglabel siglabels[] = { +- /* derived from /usr/include/bits/signum.h on RH7.2 */ +- "HUP", SIGHUP, /* Hangup (POSIX). */ +- "INT", SIGINT, /* Interrupt (ANSI). */ +- "QUIT", SIGQUIT, /* Quit (POSIX). */ +- "ILL", SIGILL, /* Illegal instruction (ANSI). */ +- "TRAP", SIGTRAP, /* Trace trap (POSIX). */ +- "ABRT", SIGABRT, /* Abort (ANSI). */ +- "EMT", SIGEMT, /* EMT trap */ +- "FPE", SIGFPE, /* Floating-point exception (ANSI). */ +- "KILL", SIGKILL, /* Kill, unblockable (POSIX). */ +- "BUS", SIGBUS, /* BUS error (4.2 BSD). */ +- "SEGV", SIGSEGV, /* Segmentation violation (ANSI). */ +- "SYS", SIGSYS, /* Bad system call. Only on some Bsden! */ +- "PIPE", SIGPIPE, /* Broken pipe (POSIX). */ +- "ALRM", SIGALRM, /* Alarm clock (POSIX). */ +- "TERM", SIGTERM, /* Termination (ANSI). */ +- "URG", SIGURG, /* Urgent condition on socket (4.2 BSD). */ +- "STOP", SIGSTOP, /* Stop, unblockable (POSIX). */ +- "TSTP", SIGTSTP, /* Keyboard stop (POSIX). */ +- "CONT", SIGCONT, /* Continue (POSIX). */ +- "CHLD", SIGCHLD, /* Child status has changed (POSIX). */ +- "TTIN", SIGTTIN, /* Background read from tty (POSIX). */ +- "TTOU", SIGTTOU, /* Background write to tty (POSIX). */ +- "IO", SIGIO, /* I/O now possible (4.2 BSD). */ +- "XCPU", SIGXCPU, /* CPU limit exceeded (4.2 BSD). */ +- "XFSZ", SIGXFSZ, /* File size limit exceeded (4.2 BSD). */ +- "VTALRM", SIGVTALRM, /* Virtual alarm clock (4.2 BSD). */ +- "PROF", SIGPROF, /* Profiling alarm clock (4.2 BSD). */ +- "WINCH", SIGWINCH, /* Window size change (4.3 BSD, Sun). */ +- "INFO", SIGINFO, /* Information request. */ +- "USR1", SIGUSR1, /* User-defined signal 1 (POSIX). */ +- "USR2", SIGUSR2 /* User-defined signal 2 (POSIX). */ +- }; +- + JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name)) + + /* find and return the named signal's number */ + +- for(uint i=0; i= NSIG) ++ return false; ++ char signame[8]; ++ const char *s = sys_signame[signo]; ++ uint i; ++ for (i = 0; i < strlen(s); i++) ++ signame[i] = toupper(s[i]); ++ signame[i] = '\0'; ++ jio_snprintf(buf, len, "SIG%s", signame); ++ return true; + } --- hotspot/src/os/bsd/vm/osThread_bsd.cpp +++ hotspot/src/os/bsd/vm/osThread_bsd.cpp @@ -49,7 +49,7 @@ @@ -705,7 +809,25 @@ // XXXBSD: this is just a stopgap implementation return physical_memory() >> 2; #else -@@ -308,16 +342,22 @@ +@@ -221,6 +255,17 @@ + } + + julong os::allocatable_physical_memory(julong size) { ++#ifdef _ALLBSD_SOURCE ++ struct rlimit limits; ++ getrlimit(RLIMIT_DATA, &limits); ++ if (limits.rlim_cur != RLIM_INFINITY) ++ size = MIN2(size, (julong)limits.rlim_cur); ++#ifdef RLIMIT_AS ++ getrlimit(RLIMIT_AS, &limits); ++ if (limits.rlim_cur != RLIM_INFINITY) ++ size = MIN2(size, (julong)limits.rlim_cur); ++#endif ++#endif + #ifdef _LP64 + return size; + #else +@@ -308,16 +353,22 @@ #define COMPILER_VARIANT "client" #endif @@ -732,7 +854,7 @@ int rslt = syscall(SYS_gettid); if (rslt == -1) { // old kernel, no NPTL support -@@ -325,6 +365,7 @@ +@@ -325,6 +376,7 @@ } else { return (pid_t)rslt; } @@ -740,7 +862,7 @@ } // Most versions of bsd have a bug where the number of processors are -@@ -337,7 +378,35 @@ +@@ -337,7 +389,35 @@ "environment on Bsd when /proc filesystem is not mounted."; #endif @@ -777,7 +899,7 @@ void os::Bsd::initialize_system_info() { int mib[2]; size_t len; -@@ -452,7 +521,7 @@ +@@ -452,7 +532,7 @@ * 7: The default directories, normally /lib and /usr/lib. */ #ifndef DEFAULT_LIBPATH @@ -786,7 +908,7 @@ #endif #define EXTENSIONS_DIR "/lib/ext" -@@ -997,7 +1066,7 @@ +@@ -997,7 +1077,7 @@ return NULL; } @@ -795,7 +917,7 @@ #ifdef __APPLE__ // thread_id is mach thread on macos osthread->set_thread_id(::mach_thread_self()); -@@ -1009,6 +1078,7 @@ +@@ -1009,6 +1089,7 @@ // thread_id is kernel thread id (similar to Solaris LWP id) osthread->set_thread_id(os::Bsd::gettid()); @@ -803,7 +925,7 @@ if (UseNUMA) { int lgrp_id = os::numa_get_group_id(); if (lgrp_id != -1) { -@@ -1016,6 +1086,7 @@ +@@ -1016,6 +1097,7 @@ } } #endif @@ -811,7 +933,7 @@ // initialize signal mask for this thread os::Bsd::hotspot_sigmask(thread); -@@ -1194,7 +1265,7 @@ +@@ -1194,7 +1276,7 @@ } // Store pthread info into the OSThread @@ -820,7 +942,7 @@ #ifdef __APPLE__ osthread->set_thread_id(::mach_thread_self()); #else -@@ -1817,8 +1888,10 @@ +@@ -1817,8 +1899,10 @@ } intx os::current_thread_id() { @@ -832,12 +954,13 @@ #else return (intx)::pthread_self(); #endif -@@ -2341,14 +2414,14 @@ +@@ -2341,14 +2425,16 @@ } void os::print_os_info_brief(outputStream* st) { - st->print("Bsd"); + st->print("BSD"); ++ st->cr(); os::Posix::print_uname_info(st); } @@ -846,10 +969,11 @@ st->print("OS:"); - st->print("Bsd"); + st->print("BSD"); ++ st->cr(); os::Posix::print_uname_info(st); -@@ -2366,7 +2439,23 @@ +@@ -2366,7 +2452,23 @@ st->print("Memory:"); st->print(" %dk page", os::vm_page_size()>>10); @@ -874,7 +998,7 @@ // values in struct sysinfo are "unsigned long" struct sysinfo si; sysinfo(&si); -@@ -2376,17 +2465,22 @@ +@@ -2376,17 +2478,22 @@ os::physical_memory() >> 10); st->print("(" UINT64_FORMAT "k free)", os::available_memory() >> 10); @@ -899,7 +1023,7 @@ st->cr(); } -@@ -2533,10 +2627,17 @@ +@@ -2533,10 +2640,17 @@ jrelib_p = buf + len; // Add the appropriate library subdir @@ -917,7 +1041,7 @@ // Add the appropriate client or server subdir len = strlen(buf); -@@ -2997,9 +3098,10 @@ +@@ -2997,9 +3111,10 @@ flags |= MAP_FIXED; } @@ -931,7 +1055,7 @@ flags, -1, 0); if (addr != MAP_FAILED) { -@@ -3156,7 +3258,9 @@ +@@ -3156,7 +3271,9 @@ static size_t _large_page_size = 0; void os::large_page_init() { @@ -942,7 +1066,7 @@ if (!UseLargePages) { UseHugeTLBFS = false; UseSHM = false; -@@ -3654,8 +3758,8 @@ +@@ -3654,8 +3771,8 @@ return OS_OK; #else int ret = setpriority(PRIO_PROCESS, thread->osthread()->thread_id(), newpri); @@ -952,7 +1076,7 @@ } OSReturn os::get_native_priority(const Thread* const thread, int *priority_ptr) { -@@ -4634,6 +4738,20 @@ +@@ -4634,6 +4751,20 @@ int os::active_processor_count() { #ifdef _ALLBSD_SOURCE @@ -1001,6 +1125,65 @@ return _clock_gettime != NULL; } +--- hotspot/src/os/bsd/vm/threadCritical_bsd.cpp ++++ hotspot/src/os/bsd/vm/threadCritical_bsd.cpp +@@ -33,35 +33,36 @@ + // See threadCritical.hpp for details of this class. + // + +-static pthread_t tc_owner = 0; +-static pthread_mutex_t tc_mutex = PTHREAD_MUTEX_INITIALIZER; +-static int tc_count = 0; ++static pthread_mutex_t tc_mutex; ++static pthread_mutexattr_t tc_attr; ++static bool initialized = false; + + void ThreadCritical::initialize() { ++ int ret; ++ ret = pthread_mutexattr_init(&tc_attr); ++ guarantee(ret == 0, "fatal error with pthread_mutexattr_init()"); ++ ret = pthread_mutexattr_settype(&tc_attr, PTHREAD_MUTEX_RECURSIVE); ++ guarantee(ret == 0, "fatal error with pthread_mutexattr_settype()"); ++ ret = pthread_mutex_init(&tc_mutex, &tc_attr); ++ guarantee(ret == 0, "fatal error with pthread_mutex_init()"); ++ initialized = true; + } + + void ThreadCritical::release() { ++ pthread_mutex_destroy(&tc_mutex); ++ pthread_mutexattr_destroy(&tc_attr); + } + + ThreadCritical::ThreadCritical() { +- pthread_t self = pthread_self(); +- if (self != tc_owner) { +- int ret = pthread_mutex_lock(&tc_mutex); +- guarantee(ret == 0, "fatal error with pthread_mutex_lock()"); +- assert(tc_count == 0, "Lock acquired with illegal reentry count."); +- tc_owner = self; +- } +- tc_count++; ++ if (initialized) ++ pthread_mutex_lock(&tc_mutex); ++ else ++ assert(Threads::number_of_threads() == 0, "valid only during initialization"); + } + + ThreadCritical::~ThreadCritical() { +- assert(tc_owner == pthread_self(), "must have correct owner"); +- assert(tc_count > 0, "must have correct count"); +- +- tc_count--; +- if (tc_count == 0) { +- tc_owner = 0; +- int ret = pthread_mutex_unlock(&tc_mutex); +- guarantee(ret == 0, "fatal error with pthread_mutex_unlock()"); +- } ++ if (initialized) ++ pthread_mutex_unlock(&tc_mutex); ++ else ++ assert(Threads::number_of_threads() == 0, "valid only during initialization"); + } --- hotspot/src/os/bsd/vm/vmError_bsd.cpp +++ hotspot/src/os/bsd/vm/vmError_bsd.cpp @@ -34,6 +34,12 @@ @@ -1240,6 +1423,583 @@ #define VM_INT_CONSTANTS_OS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant, last_entry) \ \ +--- hotspot/src/share/vm/adlc/arena.cpp ++++ hotspot/src/share/vm/adlc/arena.cpp +@@ -24,7 +24,7 @@ + + #include "adlc.hpp" + +-void* Chunk::operator new(size_t requested_size, size_t length) { ++void* Chunk::operator new(size_t requested_size, size_t length) throw() { + return CHeapObj::operator new(requested_size + length); + } + +@@ -163,7 +163,7 @@ + //----------------------------------------------------------------------------- + // CHeapObj + +-void* CHeapObj::operator new(size_t size){ ++void* CHeapObj::operator new(size_t size) throw() { + return (void *) malloc(size); + } + +--- hotspot/src/share/vm/adlc/arena.hpp ++++ hotspot/src/share/vm/adlc/arena.hpp +@@ -42,7 +42,7 @@ + + class CHeapObj { + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + void* new_array(size_t size); + }; +@@ -53,7 +53,7 @@ + + class ValueObj { + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + }; + +@@ -61,7 +61,7 @@ + + class AllStatic { + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + }; + +@@ -70,7 +70,7 @@ + // Linked list of raw memory chunks + class Chunk: public CHeapObj { + public: +- void* operator new(size_t size, size_t length); ++ void* operator new(size_t size, size_t length) throw(); + void operator delete(void* p, size_t length); + Chunk(size_t length); + +--- hotspot/src/share/vm/adlc/main.cpp ++++ hotspot/src/share/vm/adlc/main.cpp +@@ -508,7 +508,7 @@ + + // VS2005 has its own definition, identical to this one. + #if !defined(_WIN32) || defined(_WIN64) || _MSC_VER < 1400 +-void *operator new( size_t size, int, const char *, int ) { ++void *operator new( size_t size, int, const char *, int ) throw() { + return ::operator new( size ); + } + #endif +--- hotspot/src/share/vm/asm/codeBuffer.hpp ++++ hotspot/src/share/vm/asm/codeBuffer.hpp +@@ -290,7 +290,7 @@ + // CodeBuffers must be allocated on the stack except for a single + // special case during expansion which is handled internally. This + // is done to guarantee proper cleanup of resources. +- void* operator new(size_t size) { return ResourceObj::operator new(size); } ++ void* operator new(size_t size) throw() { return ResourceObj::operator new(size); } + void operator delete(void* p) { ShouldNotCallThis(); } + + public: +--- hotspot/src/share/vm/c1/c1_Compilation.hpp ++++ hotspot/src/share/vm/c1/c1_Compilation.hpp +@@ -263,8 +263,8 @@ + // Base class for objects allocated by the compiler in the compilation arena + class CompilationResourceObj ALLOCATION_SUPER_CLASS_SPEC { + public: +- void* operator new(size_t size) { return Compilation::current()->arena()->Amalloc(size); } +- void* operator new(size_t size, Arena* arena) { ++ void* operator new(size_t size) throw() { return Compilation::current()->arena()->Amalloc(size); } ++ void* operator new(size_t size, Arena* arena) throw() { + return arena->Amalloc(size); + } + void operator delete(void* p) {} // nothing to do +--- hotspot/src/share/vm/c1/c1_Instruction.hpp ++++ hotspot/src/share/vm/c1/c1_Instruction.hpp +@@ -311,7 +311,7 @@ + } + + public: +- void* operator new(size_t size) { ++ void* operator new(size_t size) throw() { + Compilation* c = Compilation::current(); + void* res = c->arena()->Amalloc(size); + ((Instruction*)res)->_id = c->get_next_id(); +@@ -1529,7 +1529,7 @@ + friend class SuxAndWeightAdjuster; + + public: +- void* operator new(size_t size) { ++ void* operator new(size_t size) throw() { + Compilation* c = Compilation::current(); + void* res = c->arena()->Amalloc(size); + ((BlockBegin*)res)->_id = c->get_next_id(); +--- hotspot/src/share/vm/code/codeBlob.cpp ++++ hotspot/src/share/vm/code/codeBlob.cpp +@@ -242,7 +242,7 @@ + } + + +-void* BufferBlob::operator new(size_t s, unsigned size) { ++void* BufferBlob::operator new(size_t s, unsigned size) throw() { + void* p = CodeCache::allocate(size); + return p; + } +@@ -344,14 +344,14 @@ + } + + +-void* RuntimeStub::operator new(size_t s, unsigned size) { ++void* RuntimeStub::operator new(size_t s, unsigned size) throw() { + void* p = CodeCache::allocate(size); + if (!p) fatal("Initial size of CodeCache is too small"); + return p; + } + + // operator new shared by all singletons: +-void* SingletonBlob::operator new(size_t s, unsigned size) { ++void* SingletonBlob::operator new(size_t s, unsigned size) throw() { + void* p = CodeCache::allocate(size); + if (!p) fatal("Initial size of CodeCache is too small"); + return p; +--- hotspot/src/share/vm/code/codeBlob.hpp ++++ hotspot/src/share/vm/code/codeBlob.hpp +@@ -213,7 +213,7 @@ + BufferBlob(const char* name, int size); + BufferBlob(const char* name, int size, CodeBuffer* cb); + +- void* operator new(size_t s, unsigned size); ++ void* operator new(size_t s, unsigned size) throw(); + + public: + // Creation +@@ -287,7 +287,7 @@ + bool caller_must_gc_arguments + ); + +- void* operator new(size_t s, unsigned size); ++ void* operator new(size_t s, unsigned size) throw(); + + public: + // Creation +@@ -325,7 +325,7 @@ + friend class VMStructs; + + protected: +- void* operator new(size_t s, unsigned size); ++ void* operator new(size_t s, unsigned size) throw(); + + public: + SingletonBlob( +--- hotspot/src/share/vm/code/debugInfoRec.cpp ++++ hotspot/src/share/vm/code/debugInfoRec.cpp +@@ -38,7 +38,7 @@ + int _length; // number of bytes in the stream + int _hash; // hash of stream bytes (for quicker reuse) + +- void* operator new(size_t ignore, DebugInformationRecorder* dir) { ++ void* operator new(size_t ignore, DebugInformationRecorder* dir) throw() { + assert(ignore == sizeof(DIR_Chunk), ""); + if (dir->_next_chunk >= dir->_next_chunk_limit) { + const int CHUNK = 100; +--- hotspot/src/share/vm/code/nmethod.cpp ++++ hotspot/src/share/vm/code/nmethod.cpp +@@ -784,7 +784,7 @@ + } + #endif // def HAVE_DTRACE_H + +-void* nmethod::operator new(size_t size, int nmethod_size) { ++void* nmethod::operator new(size_t size, int nmethod_size) throw() { + // Always leave some room in the CodeCache for I2C/C2I adapters + if (CodeCache::largest_free_block() < CodeCacheMinimumFreeSpace) return NULL; + return CodeCache::allocate(nmethod_size); +--- hotspot/src/share/vm/code/nmethod.hpp ++++ hotspot/src/share/vm/code/nmethod.hpp +@@ -263,7 +263,7 @@ + int comp_level); + + // helper methods +- void* operator new(size_t size, int nmethod_size); ++ void* operator new(size_t size, int nmethod_size) throw(); + + const char* reloc_string_for(u_char* begin, u_char* end); + // Returns true if this thread changed the state of the nmethod or +--- hotspot/src/share/vm/code/relocInfo.hpp ++++ hotspot/src/share/vm/code/relocInfo.hpp +@@ -686,7 +686,7 @@ + } + + public: +- void* operator new(size_t size, const RelocationHolder& holder) { ++ void* operator new(size_t size, const RelocationHolder& holder) throw() { + if (size > sizeof(holder._relocbuf)) guarantee_size(); + assert((void* const *)holder.reloc() == &holder._relocbuf[0], "ptrs must agree"); + return holder.reloc(); +--- hotspot/src/share/vm/code/vtableStubs.cpp ++++ hotspot/src/share/vm/code/vtableStubs.cpp +@@ -49,7 +49,7 @@ + static int num_vtable_chunks = 0; + + +-void* VtableStub::operator new(size_t size, int code_size) { ++void* VtableStub::operator new(size_t size, int code_size) throw() { + assert(size == sizeof(VtableStub), "mismatched size"); + num_vtable_chunks++; + // compute real VtableStub size (rounded to nearest word) +--- hotspot/src/share/vm/code/vtableStubs.hpp ++++ hotspot/src/share/vm/code/vtableStubs.hpp +@@ -46,7 +46,7 @@ + bool _is_vtable_stub; // True if vtable stub, false, is itable stub + /* code follows here */ // The vtableStub code + +- void* operator new(size_t size, int code_size); ++ void* operator new(size_t size, int code_size) throw(); + + VtableStub(bool is_vtable_stub, int index) + : _next(NULL), _is_vtable_stub(is_vtable_stub), +--- hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp ++++ hotspot/src/share/vm/gc_implementation/shared/gcUtil.hpp +@@ -144,9 +144,9 @@ + _padded_avg(0.0), _deviation(0.0), _padding(padding) {} + + // Placement support +- void* operator new(size_t ignored, void* p) { return p; } ++ void* operator new(size_t ignored, void* p) throw() { return p; } + // Allocator +- void* operator new(size_t size) { return CHeapObj::operator new(size); } ++ void* operator new(size_t size) throw() { return CHeapObj::operator new(size); } + + // Accessor + float padded_average() const { return _padded_avg; } +--- hotspot/src/share/vm/libadt/port.hpp ++++ hotspot/src/share/vm/libadt/port.hpp +@@ -163,7 +163,7 @@ + extern void *safe_calloc (const char *file, unsigned line, unsigned nitems, unsigned size); + extern void *safe_realloc(const char *file, unsigned line, void *ptr, unsigned size); + extern char *safe_strdup (const char *file, unsigned line, const char *src); +-inline void *operator new( size_t size ) { return malloc(size); } ++inline void *operator new( size_t size ) throw() { return malloc(size); } + inline void operator delete( void *ptr ) { free(ptr); } + #endif + +--- hotspot/src/share/vm/memory/allocation.cpp ++++ hotspot/src/share/vm/memory/allocation.cpp +@@ -43,11 +43,11 @@ + # include "os_bsd.inline.hpp" + #endif + +-void* CHeapObj::operator new(size_t size){ ++void* CHeapObj::operator new(size_t size) throw() { + return (void *) AllocateHeap(size, "CHeapObj-new"); + } + +-void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) { ++void* CHeapObj::operator new (size_t size, const std::nothrow_t& nothrow_constant) throw() { + char* p = (char*) os::malloc(size); + #ifdef ASSERT + if (PrintMallocFree) trace_heap_malloc(size, "CHeapObj-new", p); +@@ -59,12 +59,12 @@ + FreeHeap(p); + } + +-void* StackObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; ++void* StackObj::operator new(size_t size) throw() { ShouldNotCallThis(); return 0; }; + void StackObj::operator delete(void* p) { ShouldNotCallThis(); }; +-void* _ValueObj::operator new(size_t size) { ShouldNotCallThis(); return 0; }; ++void* _ValueObj::operator new(size_t size) throw() { ShouldNotCallThis(); return 0; }; + void _ValueObj::operator delete(void* p) { ShouldNotCallThis(); }; + +-void* ResourceObj::operator new(size_t size, allocation_type type) { ++void* ResourceObj::operator new(size_t size, allocation_type type) throw() { + address res; + switch (type) { + case C_HEAP: +@@ -311,7 +311,7 @@ + //-------------------------------------------------------------------------------------- + // Chunk implementation + +-void* Chunk::operator new(size_t requested_size, AllocFailType alloc_failmode, size_t length) { ++void* Chunk::operator new(size_t requested_size, AllocFailType alloc_failmode, size_t length) throw() { + // requested_size is equal to sizeof(Chunk) but in order for the arena + // allocations to come out aligned as expected the size must be aligned + // to expected arean alignment. +@@ -576,7 +576,7 @@ + // src/share/native/sun/awt/font/fontmanager/textcache/hsMemory.cpp::hsSoftNew + // define CATCH_OPERATOR_NEW_USAGE if you want to use this. + #ifdef CATCH_OPERATOR_NEW_USAGE +-void* operator new(size_t size){ ++void* operator new(size_t size) throw() { + static bool warned = false; + if (!warned && warn_new_operator) + warning("should not call global (default) operator new"); +--- hotspot/src/share/vm/memory/allocation.hpp ++++ hotspot/src/share/vm/memory/allocation.hpp +@@ -106,8 +106,8 @@ + + class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { + public: +- void* operator new(size_t size); +- void* operator new (size_t size, const std::nothrow_t& nothrow_constant); ++ void* operator new(size_t size) throw(); ++ void* operator new (size_t size, const std::nothrow_t& nothrow_constant) throw(); + void operator delete(void* p); + void* new_array(size_t size); + }; +@@ -117,7 +117,7 @@ + + class StackObj ALLOCATION_SUPER_CLASS_SPEC { + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + }; + +@@ -141,7 +141,7 @@ + // + class _ValueObj { + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + }; + +@@ -163,7 +163,7 @@ + Chunk* _next; // Next Chunk in list + const size_t _len; // Size of this Chunk + public: +- void* operator new(size_t size, AllocFailType alloc_failmode, size_t length); ++ void* operator new(size_t size, AllocFailType alloc_failmode, size_t length) throw(); + void operator delete(void* p); + Chunk(size_t length); + +@@ -392,19 +392,19 @@ + #endif // ASSERT + + public: +- void* operator new(size_t size, allocation_type type); +- void* operator new(size_t size, Arena *arena) { ++ void* operator new(size_t size, allocation_type type) throw(); ++ void* operator new(size_t size, Arena *arena) throw() { + address res = (address)arena->Amalloc(size); + DEBUG_ONLY(set_allocation_type(res, ARENA);) + return res; + } +- void* operator new(size_t size) { ++ void* operator new(size_t size) throw() { + address res = (address)resource_allocate_bytes(size); + DEBUG_ONLY(set_allocation_type(res, RESOURCE_AREA);) + return res; + } + +- void* operator new(size_t size, const std::nothrow_t& nothrow_constant) { ++ void* operator new(size_t size, const std::nothrow_t& nothrow_constant) throw() { + address res = (address)resource_allocate_bytes(size, AllocFailStrategy::RETURN_NULL); + DEBUG_ONLY(if (res != NULL) set_allocation_type(res, RESOURCE_AREA);) + return res; +--- hotspot/src/share/vm/memory/memRegion.hpp ++++ hotspot/src/share/vm/memory/memRegion.hpp +@@ -99,13 +99,13 @@ + + class MemRegionClosureRO: public MemRegionClosure { + public: +- void* operator new(size_t size, ResourceObj::allocation_type type) { ++ void* operator new(size_t size, ResourceObj::allocation_type type) throw() { + return ResourceObj::operator new(size, type); + } +- void* operator new(size_t size, Arena *arena) { ++ void* operator new(size_t size, Arena *arena) throw() { + return ResourceObj::operator new(size, arena); + } +- void* operator new(size_t size) { ++ void* operator new(size_t size) throw() { + return ResourceObj::operator new(size); + } + +--- hotspot/src/share/vm/oops/klass.cpp ++++ hotspot/src/share/vm/oops/klass.cpp +@@ -181,7 +181,7 @@ + } + + void* Klass_vtbl::operator new(size_t ignored, KlassHandle& klass, +- int size, TRAPS) { ++ int size, TRAPS) throw() { + // The vtable pointer is installed during the execution of + // constructors in the call to permanent_obj_allocate(). Delay + // the installation of the klass pointer into the new klass "k" +--- hotspot/src/share/vm/oops/klass.hpp ++++ hotspot/src/share/vm/oops/klass.hpp +@@ -167,7 +167,7 @@ + bool null_vtbl() { return *(intptr_t*)this == 0; } + + protected: +- void* operator new(size_t ignored, KlassHandle& klass, int size, TRAPS); ++ void* operator new(size_t ignored, KlassHandle& klass, int size, TRAPS) throw(); + }; + + +--- hotspot/src/share/vm/oops/symbol.cpp ++++ hotspot/src/share/vm/oops/symbol.cpp +@@ -36,7 +36,7 @@ + } + } + +-void* Symbol::operator new(size_t size, int len) { ++void* Symbol::operator new(size_t size, int len) throw() { + return (void *) AllocateHeap(object_size(len) * HeapWordSize, "symbol"); + } + +--- hotspot/src/share/vm/oops/symbol.hpp ++++ hotspot/src/share/vm/oops/symbol.hpp +@@ -121,7 +121,7 @@ + } + + Symbol(const u1* name, int length); +- void* operator new(size_t size, int len); ++ void* operator new(size_t size, int len) throw(); + + public: + // Low-level access (used with care, since not GC-safe) +--- hotspot/src/share/vm/opto/callGenerator.hpp ++++ hotspot/src/share/vm/opto/callGenerator.hpp +@@ -240,7 +240,7 @@ + // Because WarmInfo objects live over the entire lifetime of the + // Compile object, they are allocated into the comp_arena, which + // does not get resource marked or reset during the compile process +- void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); } ++ void *operator new( size_t x, Compile* C ) throw() { return C->comp_arena()->Amalloc(x); } + void operator delete( void * ) { } // fast deallocation + + static WarmCallInfo* always_hot(); +--- hotspot/src/share/vm/opto/callnode.hpp ++++ hotspot/src/share/vm/opto/callnode.hpp +@@ -215,7 +215,7 @@ + // Because JVMState objects live over the entire lifetime of the + // Compile object, they are allocated into the comp_arena, which + // does not get resource marked or reset during the compile process +- void *operator new( size_t x, Compile* C ) { return C->comp_arena()->Amalloc(x); } ++ void *operator new( size_t x, Compile* C ) throw() { return C->comp_arena()->Amalloc(x); } + void operator delete( void * ) { } // fast deallocation + + // Create a new JVMState, ready for abstract interpretation. +--- hotspot/src/share/vm/opto/machnode.hpp ++++ hotspot/src/share/vm/opto/machnode.hpp +@@ -58,7 +58,7 @@ + class MachOper : public ResourceObj { + public: + // Allocate right next to the MachNodes in the same arena +- void *operator new( size_t x, Compile* C ) { return C->node_arena()->Amalloc_D(x); } ++ void *operator new( size_t x, Compile* C ) throw() { return C->node_arena()->Amalloc_D(x); } + + // Opcode + virtual uint opcode() const = 0; +--- hotspot/src/share/vm/opto/node.hpp ++++ hotspot/src/share/vm/opto/node.hpp +@@ -207,7 +207,7 @@ + + // New Operator that takes a Compile pointer, this will eventually + // be the "new" New operator. +- inline void* operator new( size_t x, Compile* C) { ++ inline void* operator new( size_t x, Compile* C) throw() { + Node* n = (Node*)C->node_arena()->Amalloc_D(x); + #ifdef ASSERT + n->_in = (Node**)n; // magic cookie for assertion check +@@ -218,7 +218,7 @@ + + // New Operator that takes a Compile pointer, this will eventually + // be the "new" New operator. +- inline void* operator new( size_t x, Compile* C, int y) { ++ inline void* operator new( size_t x, Compile* C, int y) throw() { + Node* n = (Node*)C->node_arena()->Amalloc_D(x + y*sizeof(void*)); + n->_in = (Node**)(((char*)n) + x); + #ifdef ASSERT +--- hotspot/src/share/vm/opto/type.hpp ++++ hotspot/src/share/vm/opto/type.hpp +@@ -144,7 +144,7 @@ + + public: + +- inline void* operator new( size_t x ) { ++ inline void* operator new( size_t x ) throw() { + Compile* compile = Compile::current(); + compile->set_type_last_size(x); + void *temp = compile->type_arena()->Amalloc_D(x); +--- hotspot/src/share/vm/runtime/fprofiler.cpp ++++ hotspot/src/share/vm/runtime/fprofiler.cpp +@@ -264,7 +264,7 @@ + + public: + +- void* operator new(size_t size, ThreadProfiler* tp); ++ void* operator new(size_t size, ThreadProfiler* tp) throw(); + void operator delete(void* p); + + ProfilerNode() { +@@ -371,7 +371,7 @@ + } + }; + +-void* ProfilerNode::operator new(size_t size, ThreadProfiler* tp){ ++void* ProfilerNode::operator new(size_t size, ThreadProfiler* tp) throw() { + void* result = (void*) tp->area_top; + tp->area_top += size; + +--- hotspot/src/share/vm/runtime/interfaceSupport.hpp ++++ hotspot/src/share/vm/runtime/interfaceSupport.hpp +@@ -67,7 +67,7 @@ + } + + private: +- inline void* operator new(size_t size, void* ptr) { ++ inline void* operator new(size_t size, void* ptr) throw() { + return ptr; + } + }; +--- hotspot/src/share/vm/runtime/park.cpp ++++ hotspot/src/share/vm/runtime/park.cpp +@@ -140,7 +140,7 @@ + // well as bank access imbalance on Niagara-like platforms, + // although Niagara's hash function should help. + +-void * ParkEvent::operator new (size_t sz) { ++void * ParkEvent::operator new (size_t sz) throw() { + return (void *) ((intptr_t (CHeapObj::operator new (sz + 256)) + 256) & -256) ; + } + +--- hotspot/src/share/vm/runtime/park.hpp ++++ hotspot/src/share/vm/runtime/park.hpp +@@ -166,7 +166,7 @@ + // aligned on 256-byte address boundaries. This ensures that the least + // significant byte of a ParkEvent address is always 0. + +- void * operator new (size_t sz) ; ++ void * operator new (size_t sz) throw() ; + void operator delete (void * a) ; + + public: +--- hotspot/src/share/vm/runtime/thread.cpp ++++ hotspot/src/share/vm/runtime/thread.cpp +@@ -170,7 +170,7 @@ + // ======= Thread ======== + + // Support for forcing alignment of thread objects for biased locking +-void* Thread::operator new(size_t size) { ++void* Thread::operator new(size_t size) throw() { + if (UseBiasedLocking) { + const int alignment = markOopDesc::biased_lock_alignment; + size_t aligned_size = size + (alignment - sizeof(intptr_t)); +--- hotspot/src/share/vm/runtime/thread.hpp ++++ hotspot/src/share/vm/runtime/thread.hpp +@@ -104,7 +104,7 @@ + // Support for forcing alignment of thread objects for biased locking + void* _real_malloc_address; + public: +- void* operator new(size_t size); ++ void* operator new(size_t size) throw(); + void operator delete(void* p); + private: + --- hotspot/src/share/vm/utilities/macros.hpp +++ hotspot/src/share/vm/utilities/macros.hpp @@ -177,6 +177,14 @@