From b78e96713bacb9e0aee0ecb46bd82a718ba603af Mon Sep 17 00:00:00 2001 From: Kim Barrett Date: Wed, 16 Sep 2015 16:25:02 +0200 Subject: [PATCH 01/17] 8136627: Backout JDK-8133818 Additional number of processed references printed with -XX:+PrintReferenceGC after JDK-8047125 Reviewed-by: brutisso --- hotspot/src/share/vm/gc/shared/gcTrace.cpp | 2 - .../share/vm/gc/shared/referenceProcessor.cpp | 38 +++++------- .../share/vm/gc/shared/referenceProcessor.hpp | 8 +-- .../vm/gc/shared/referenceProcessorStats.hpp | 22 +------ hotspot/src/share/vm/memory/referenceType.hpp | 6 +- hotspot/src/share/vm/prims/jvmtiExport.cpp | 4 +- hotspot/src/share/vm/prims/jvmtiExport.hpp | 2 +- hotspot/src/share/vm/prims/jvmtiTagMap.cpp | 26 ++++---- hotspot/src/share/vm/prims/jvmtiTagMap.hpp | 6 +- hotspot/src/share/vm/runtime/jniHandles.cpp | 14 ++--- hotspot/src/share/vm/runtime/jniHandles.hpp | 4 +- .../test/gc/logging/TestPrintReferences.java | 59 ------------------- 12 files changed, 47 insertions(+), 144 deletions(-) delete mode 100644 hotspot/test/gc/logging/TestPrintReferences.java diff --git a/hotspot/src/share/vm/gc/shared/gcTrace.cpp b/hotspot/src/share/vm/gc/shared/gcTrace.cpp index 8b830573546..e73eb386848 100644 --- a/hotspot/src/share/vm/gc/shared/gcTrace.cpp +++ b/hotspot/src/share/vm/gc/shared/gcTrace.cpp @@ -88,8 +88,6 @@ void GCTracer::report_gc_reference_stats(const ReferenceProcessorStats& rps) con send_reference_stats_event(REF_WEAK, rps.weak_count()); send_reference_stats_event(REF_FINAL, rps.final_count()); send_reference_stats_event(REF_PHANTOM, rps.phantom_count()); - send_reference_stats_event(REF_CLEANER, rps.cleaner_count()); - send_reference_stats_event(REF_JNI, rps.jni_weak_ref_count()); } #if INCLUDE_SERVICES diff --git a/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp index 59db7a75da0..0eecaf10469 100644 --- a/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.cpp @@ -243,13 +243,10 @@ ReferenceProcessorStats ReferenceProcessor::process_discovered_references( process_discovered_reflist(_discoveredPhantomRefs, NULL, false, is_alive, keep_alive, complete_gc, task_executor); - } - - // Cleaners - size_t cleaner_count = 0; - { - GCTraceTime tt("Cleaners", trace_time, false, gc_timer, gc_id); - cleaner_count = + // Process cleaners, but include them in phantom statistics. We expect + // Cleaner references to be temporary, and don't want to deal with + // possible incompatibilities arising from making it more visible. + phantom_count += process_discovered_reflist(_discoveredCleanerRefs, NULL, true, is_alive, keep_alive, complete_gc, task_executor); } @@ -259,17 +256,15 @@ ReferenceProcessorStats ReferenceProcessor::process_discovered_references( // that is not how the JDK1.2 specification is. See #4126360. Native code can // thus use JNI weak references to circumvent the phantom references and // resurrect a "post-mortem" object. - size_t jni_weak_ref_count = 0; { GCTraceTime tt("JNI Weak Reference", trace_time, false, gc_timer, gc_id); if (task_executor != NULL) { task_executor->set_single_threaded_mode(); } - jni_weak_ref_count = - process_phaseJNI(is_alive, keep_alive, complete_gc); + process_phaseJNI(is_alive, keep_alive, complete_gc); } - return ReferenceProcessorStats(soft_count, weak_count, final_count, phantom_count, cleaner_count, jni_weak_ref_count); + return ReferenceProcessorStats(soft_count, weak_count, final_count, phantom_count); } #ifndef PRODUCT @@ -296,17 +291,17 @@ uint ReferenceProcessor::count_jni_refs() { } #endif -size_t ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive, - OopClosure* keep_alive, - VoidClosure* complete_gc) { - DEBUG_ONLY(size_t check_count = count_jni_refs();) - size_t count = JNIHandles::weak_oops_do(is_alive, keep_alive); - assert(count == check_count, "Counts didn't match"); - complete_gc->do_void(); +void ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive, + OopClosure* keep_alive, + VoidClosure* complete_gc) { +#ifndef PRODUCT if (PrintGCDetails && PrintReferenceGC) { - gclog_or_tty->print(", " SIZE_FORMAT " refs", count); + unsigned int count = count_jni_refs(); + gclog_or_tty->print(", %u refs", count); } - return count; +#endif + JNIHandles::weak_oops_do(is_alive, keep_alive); + complete_gc->do_void(); } @@ -946,10 +941,9 @@ inline DiscoveredList* ReferenceProcessor::get_discovered_list(ReferenceType rt) list = &_discoveredCleanerRefs[id]; break; case REF_NONE: - case REF_JNI: // we should not reach here if we are an InstanceRefKlass default: - guarantee(false, err_msg("rt should not be %d", rt)); + ShouldNotReachHere(); } if (TraceReferenceGC && PrintGCDetails) { gclog_or_tty->print_cr("Thread %d gets list " INTPTR_FORMAT, id, p2i(list)); diff --git a/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp index 79a77cfd7a9..add86a1e928 100644 --- a/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessor.hpp @@ -247,7 +247,7 @@ class ReferenceProcessor : public CHeapObj { DiscoveredList* _discoveredCleanerRefs; public: - static int number_of_subclasses_of_ref() { return REF_LISTS_COUNT; } + static int number_of_subclasses_of_ref() { return (REF_CLEANER - REF_OTHER); } uint num_q() { return _num_q; } uint max_num_q() { return _max_num_q; } @@ -271,9 +271,9 @@ class ReferenceProcessor : public CHeapObj { VoidClosure* complete_gc, AbstractRefProcTaskExecutor* task_executor); - size_t process_phaseJNI(BoolObjectClosure* is_alive, - OopClosure* keep_alive, - VoidClosure* complete_gc); + void process_phaseJNI(BoolObjectClosure* is_alive, + OopClosure* keep_alive, + VoidClosure* complete_gc); // Work methods used by the method process_discovered_reflist // Phase1: keep alive all those referents that are otherwise diff --git a/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp b/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp index b857119abfc..472430e818b 100644 --- a/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp +++ b/hotspot/src/share/vm/gc/shared/referenceProcessorStats.hpp @@ -36,30 +36,22 @@ class ReferenceProcessorStats { size_t _weak_count; size_t _final_count; size_t _phantom_count; - size_t _cleaner_count; - size_t _jni_weak_ref_count; public: ReferenceProcessorStats() : _soft_count(0), _weak_count(0), _final_count(0), - _phantom_count(0), - _cleaner_count(0), - _jni_weak_ref_count(0) {} + _phantom_count(0) {} ReferenceProcessorStats(size_t soft_count, size_t weak_count, size_t final_count, - size_t phantom_count, - size_t cleaner_count, - size_t jni_weak_ref_count) : + size_t phantom_count) : _soft_count(soft_count), _weak_count(weak_count), _final_count(final_count), - _phantom_count(phantom_count), - _cleaner_count(cleaner_count), - _jni_weak_ref_count(jni_weak_ref_count) + _phantom_count(phantom_count) {} size_t soft_count() const { @@ -77,13 +69,5 @@ class ReferenceProcessorStats { size_t phantom_count() const { return _phantom_count; } - - size_t cleaner_count() const { - return _cleaner_count; - } - - size_t jni_weak_ref_count() const { - return _jni_weak_ref_count; - } }; #endif diff --git a/hotspot/src/share/vm/memory/referenceType.hpp b/hotspot/src/share/vm/memory/referenceType.hpp index 54b6229685a..a54e8238e87 100644 --- a/hotspot/src/share/vm/memory/referenceType.hpp +++ b/hotspot/src/share/vm/memory/referenceType.hpp @@ -32,15 +32,11 @@ enum ReferenceType { REF_NONE, // Regular class REF_OTHER, // Subclass of java/lang/ref/Reference, but not subclass of one of the classes below - ///////////////// Only the types below have their own discovered lists REF_SOFT, // Subclass of java/lang/ref/SoftReference REF_WEAK, // Subclass of java/lang/ref/WeakReference REF_FINAL, // Subclass of java/lang/ref/FinalReference REF_PHANTOM, // Subclass of java/lang/ref/PhantomReference - REF_CLEANER, // Subclass of sun/misc/Cleaner - ///////////////// Only the types in the above range have their own discovered lists - REF_JNI, // JNI weak refs - REF_LISTS_COUNT = REF_CLEANER - REF_OTHER // Number of discovered lists + REF_CLEANER // Subclass of sun/misc/Cleaner }; #endif // SHARE_VM_MEMORY_REFERENCETYPE_HPP diff --git a/hotspot/src/share/vm/prims/jvmtiExport.cpp b/hotspot/src/share/vm/prims/jvmtiExport.cpp index a46fee00a95..4e1faf37204 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.cpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.cpp @@ -2181,8 +2181,8 @@ void JvmtiExport::oops_do(OopClosure* f) { JvmtiVMObjectAllocEventCollector::oops_do_for_all_threads(f); } -size_t JvmtiExport::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { - return JvmtiTagMap::weak_oops_do(is_alive, f); +void JvmtiExport::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { + JvmtiTagMap::weak_oops_do(is_alive, f); } void JvmtiExport::gc_epilogue() { diff --git a/hotspot/src/share/vm/prims/jvmtiExport.hpp b/hotspot/src/share/vm/prims/jvmtiExport.hpp index 3b490173198..4b1ff34cf61 100644 --- a/hotspot/src/share/vm/prims/jvmtiExport.hpp +++ b/hotspot/src/share/vm/prims/jvmtiExport.hpp @@ -366,7 +366,7 @@ class JvmtiExport : public AllStatic { static void clear_detected_exception (JavaThread* thread) NOT_JVMTI_RETURN; static void oops_do(OopClosure* f) NOT_JVMTI_RETURN; - static size_t weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN_(0); + static void weak_oops_do(BoolObjectClosure* b, OopClosure* f) NOT_JVMTI_RETURN; static void gc_epilogue() NOT_JVMTI_RETURN; static void transition_pending_onload_raw_monitors() NOT_JVMTI_RETURN; diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp index cb75bc027a7..3181fc5af38 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.cpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.cpp @@ -3284,35 +3284,32 @@ void JvmtiTagMap::follow_references(jint heap_filter, } -size_t JvmtiTagMap::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { +void JvmtiTagMap::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { // No locks during VM bring-up (0 threads) and no safepoints after main // thread creation and before VMThread creation (1 thread); initial GC // verification can happen in that window which gets to here. assert(Threads::number_of_threads() <= 1 || SafepointSynchronize::is_at_safepoint(), "must be executed at a safepoint"); - size_t count = 0; if (JvmtiEnv::environments_might_exist()) { JvmtiEnvIterator it; for (JvmtiEnvBase* env = it.first(); env != NULL; env = it.next(env)) { JvmtiTagMap* tag_map = env->tag_map(); if (tag_map != NULL && !tag_map->is_empty()) { - count += tag_map->do_weak_oops(is_alive, f); + tag_map->do_weak_oops(is_alive, f); } } } - return count; } -size_t JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { +void JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { // does this environment have the OBJECT_FREE event enabled bool post_object_free = env()->is_enabled(JVMTI_EVENT_OBJECT_FREE); // counters used for trace message - size_t freed = 0; - size_t moved = 0; - size_t stayed = 0; + int freed = 0; + int moved = 0; JvmtiTagHashmap* hashmap = this->hashmap(); @@ -3321,7 +3318,7 @@ size_t JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { // if the hashmap is empty then we can skip it if (hashmap->_entry_count == 0) { - return 0; + return; } // now iterate through each entry in the table @@ -3383,7 +3380,6 @@ size_t JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { } else { // object didn't move prev = entry; - stayed++; } } @@ -3402,12 +3398,10 @@ size_t JvmtiTagMap::do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f) { // stats if (TraceJVMTIObjectTagging) { - size_t post_total = hashmap->_entry_count; - size_t pre_total = post_total + freed; + int post_total = hashmap->_entry_count; + int pre_total = post_total + freed; - tty->print_cr("(" SIZE_FORMAT "->" SIZE_FORMAT ", " SIZE_FORMAT " freed, " SIZE_FORMAT " stayed, " SIZE_FORMAT " moved)", - pre_total, post_total, freed, stayed, moved); + tty->print_cr("(%d->%d, %d freed, %d total moves)", + pre_total, post_total, freed, moved); } - - return (freed + stayed + moved); } diff --git a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp index e13c860b99a..196abda21b8 100644 --- a/hotspot/src/share/vm/prims/jvmtiTagMap.hpp +++ b/hotspot/src/share/vm/prims/jvmtiTagMap.hpp @@ -60,7 +60,7 @@ class JvmtiTagMap : public CHeapObj { inline Mutex* lock() { return &_lock; } inline JvmtiEnv* env() const { return _env; } - size_t do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f); + void do_weak_oops(BoolObjectClosure* is_alive, OopClosure* f); // iterate over all entries in this tag map void entry_iterate(JvmtiTagHashmapEntryClosure* closure); @@ -122,8 +122,8 @@ class JvmtiTagMap : public CHeapObj { jint* count_ptr, jobject** object_result_ptr, jlong** tag_result_ptr); - static size_t weak_oops_do(BoolObjectClosure* is_alive, - OopClosure* f) NOT_JVMTI_RETURN_(0); + static void weak_oops_do( + BoolObjectClosure* is_alive, OopClosure* f) NOT_JVMTI_RETURN; }; #endif // SHARE_VM_PRIMS_JVMTITAGMAP_HPP diff --git a/hotspot/src/share/vm/runtime/jniHandles.cpp b/hotspot/src/share/vm/runtime/jniHandles.cpp index ea54f02f62b..9ce7ce8ae44 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.cpp +++ b/hotspot/src/share/vm/runtime/jniHandles.cpp @@ -124,8 +124,8 @@ void JNIHandles::oops_do(OopClosure* f) { } -size_t JNIHandles::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { - return _weak_global_handles->weak_oops_do(is_alive, f); +void JNIHandles::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { + _weak_global_handles->weak_oops_do(is_alive, f); } @@ -380,9 +380,8 @@ void JNIHandleBlock::oops_do(OopClosure* f) { } -size_t JNIHandleBlock::weak_oops_do(BoolObjectClosure* is_alive, - OopClosure* f) { - size_t count = 0; +void JNIHandleBlock::weak_oops_do(BoolObjectClosure* is_alive, + OopClosure* f) { for (JNIHandleBlock* current = this; current != NULL; current = current->_next) { assert(current->pop_frame_link() == NULL, "blocks holding weak global JNI handles should not have pop frame link set"); @@ -391,7 +390,6 @@ size_t JNIHandleBlock::weak_oops_do(BoolObjectClosure* is_alive, oop value = *root; // traverse heap pointers only, not deleted handles or free list pointers if (value != NULL && Universe::heap()->is_in_reserved(value)) { - count++; if (is_alive->do_object_b(value)) { // The weakly referenced object is alive, update pointer f->do_oop(root); @@ -414,9 +412,7 @@ size_t JNIHandleBlock::weak_oops_do(BoolObjectClosure* is_alive, * JVMTI data structures may also contain weak oops. The iteration of them * is placed here so that we don't need to add it to each of the collectors. */ - count += JvmtiExport::weak_oops_do(is_alive, f); - - return count; + JvmtiExport::weak_oops_do(is_alive, f); } diff --git a/hotspot/src/share/vm/runtime/jniHandles.hpp b/hotspot/src/share/vm/runtime/jniHandles.hpp index 6052882478c..069a1f35cfa 100644 --- a/hotspot/src/share/vm/runtime/jniHandles.hpp +++ b/hotspot/src/share/vm/runtime/jniHandles.hpp @@ -85,7 +85,7 @@ class JNIHandles : AllStatic { // Traversal of regular global handles static void oops_do(OopClosure* f); // Traversal of weak global handles. Unreachable oops are cleared. - static size_t weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); + static void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); }; @@ -153,7 +153,7 @@ class JNIHandleBlock : public CHeapObj { // Traversal of regular handles void oops_do(OopClosure* f); // Traversal of weak handles. Unreachable oops are cleared. - size_t weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); + void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); // Checked JNI support void set_planned_capacity(size_t planned_capacity) { _planned_capacity = planned_capacity; } diff --git a/hotspot/test/gc/logging/TestPrintReferences.java b/hotspot/test/gc/logging/TestPrintReferences.java deleted file mode 100644 index 8dcc80f3a56..00000000000 --- a/hotspot/test/gc/logging/TestPrintReferences.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test TestPrintReferences - * @bug 8133818 - * @summary Validate the reference processing logging - * @key gc - * @library /testlibrary - * @modules java.base/sun.misc - * java.management - */ - -import jdk.test.lib.ProcessTools; -import jdk.test.lib.OutputAnalyzer; - -public class TestPrintReferences { - public static void main(String[] args) throws Exception { - ProcessBuilder pb_enabled = - ProcessTools.createJavaProcessBuilder("-XX:+PrintGCDetails", "-XX:+PrintReferenceGC", "-Xmx10M", GCTest.class.getName()); - OutputAnalyzer output = new OutputAnalyzer(pb_enabled.start()); - - output.shouldMatch( - "#[0-9]+: \\[SoftReference, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]" + - "#[0-9]+: \\[WeakReference, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]" + - "#[0-9]+: \\[FinalReference, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]" + - "#[0-9]+: \\[PhantomReference, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]" + - "#[0-9]+: \\[Cleaners, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]" + - "#[0-9]+: \\[JNI Weak Reference, [0-9]+ refs, [0-9]+\\.[0-9]+ secs\\]"); - - output.shouldHaveExitValue(0); - } - - static class GCTest { - public static void main(String [] args) { - System.gc(); - } - } -} From 34a6b439884f141910bb401015dc04d10cae7d8c Mon Sep 17 00:00:00 2001 From: Mikael Gerdin Date: Thu, 17 Sep 2015 16:07:06 +0200 Subject: [PATCH 02/17] 8136701: Remove YOUNG_LIST_VERBOSE code from G1CollectedHeap Reviewed-by: stefank, jwilhelm --- .../src/share/vm/gc/g1/g1CollectedHeap.cpp | 35 ------------------- 1 file changed, 35 deletions(-) diff --git a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp index 89dc4674120..2ba451f94d7 100644 --- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp @@ -73,13 +73,6 @@ size_t G1CollectedHeap::_humongous_object_threshold_in_words = 0; -// turn it on so that the contents of the young list (scan-only / -// to-be-collected) are printed at "strategic" points before / during -// / after the collection --- this is useful for debugging -#define YOUNG_LIST_VERBOSE 0 -// CURRENT STATUS -// This file is under construction. Search for "FIXME". - // INVARIANTS/NOTES // // All allocation activity covered by the G1CollectedHeap interface is @@ -4079,29 +4072,12 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { // the possible verification above. double sample_start_time_sec = os::elapsedTime(); -#if YOUNG_LIST_VERBOSE - gclog_or_tty->print_cr("\nBefore recording pause start.\nYoung_list:"); - _young_list->print(); - g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); -#endif // YOUNG_LIST_VERBOSE - g1_policy()->record_collection_pause_start(sample_start_time_sec); -#if YOUNG_LIST_VERBOSE - gclog_or_tty->print_cr("\nAfter recording pause start.\nYoung_list:"); - _young_list->print(); -#endif // YOUNG_LIST_VERBOSE - if (collector_state()->during_initial_mark_pause()) { concurrent_mark()->checkpointRootsInitialPre(); } -#if YOUNG_LIST_VERBOSE - gclog_or_tty->print_cr("\nBefore choosing collection set.\nYoung_list:"); - _young_list->print(); - g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); -#endif // YOUNG_LIST_VERBOSE - double time_remaining_ms = g1_policy()->finalize_young_cset_part(target_pause_time_ms); g1_policy()->finalize_old_cset_part(time_remaining_ms); @@ -4157,11 +4133,6 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { assert(check_young_list_empty(false /* check_heap */), "young list should be empty"); -#if YOUNG_LIST_VERBOSE - gclog_or_tty->print_cr("Before recording survivors.\nYoung List:"); - _young_list->print(); -#endif // YOUNG_LIST_VERBOSE - g1_policy()->record_survivor_regions(_young_list->survivor_length(), _young_list->first_survivor_region(), _young_list->last_survivor_region()); @@ -4197,12 +4168,6 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) { allocate_dummy_regions(); -#if YOUNG_LIST_VERBOSE - gclog_or_tty->print_cr("\nEnd of the pause.\nYoung_list:"); - _young_list->print(); - g1_policy()->print_collection_set(g1_policy()->inc_cset_head(), gclog_or_tty); -#endif // YOUNG_LIST_VERBOSE - _allocator->init_mutator_alloc_region(); { From e7ed6bff905eec1696d7fab3625d5d14aa39c4e5 Mon Sep 17 00:00:00 2001 From: Harold Seigel Date: Fri, 18 Sep 2015 07:01:23 -0400 Subject: [PATCH 03/17] 8132904: Type checking verifier fails to reject assignment from array to an interface Only allow assignment if interface is Cloneable or Serializable. Reviewed-by: kamg, gtriantafill, jiangli --- hotspot/src/share/vm/classfile/verificationType.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hotspot/src/share/vm/classfile/verificationType.cpp b/hotspot/src/share/vm/classfile/verificationType.cpp index 188d5fbce09..96f4970be08 100644 --- a/hotspot/src/share/vm/classfile/verificationType.cpp +++ b/hotspot/src/share/vm/classfile/verificationType.cpp @@ -70,9 +70,12 @@ bool VerificationType::is_reference_assignable_from( if (this_class->is_interface() && (!from_field_is_protected || from.name() != vmSymbols::java_lang_Object())) { // If we are not trying to access a protected field or method in - // java.lang.Object then we treat interfaces as java.lang.Object, - // including java.lang.Cloneable and java.io.Serializable. - return true; + // java.lang.Object then, for arrays, we only allow assignability + // to interfaces java.lang.Cloneable and java.io.Serializable. + // Otherwise, we treat interfaces as java.lang.Object. + return !from.is_array() || + this_class == SystemDictionary::Cloneable_klass() || + this_class == SystemDictionary::Serializable_klass(); } else if (from.is_object()) { Klass* from_class = SystemDictionary::resolve_or_fail( from.name(), Handle(THREAD, klass->class_loader()), From bbc043a7f27fd3bd6a220c58e9deaa238bae6949 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Fri, 18 Sep 2015 13:41:11 -0700 Subject: [PATCH 04/17] 8135085: Change Method::_intrinsic_id from u1 to u2 Convert Method::_intrinsic_id from u1 to u2 to expand id range over 255. Reviewed-by: coleenp, iklam, jiangli --- hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp | 6 ++++-- hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp | 6 ++++-- hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp | 4 +++- hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp | 5 +++-- hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp | 6 ++++-- hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp | 4 +++- hotspot/src/cpu/x86/vm/interp_masm_x86.cpp | 4 +++- hotspot/src/cpu/x86/vm/methodHandles_x86.cpp | 4 +++- hotspot/src/share/vm/oops/method.hpp | 6 +++--- hotspot/src/share/vm/runtime/vmStructs.cpp | 2 +- 10 files changed, 31 insertions(+), 16 deletions(-) diff --git a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp index 344e0c0bf31..8f0f543ae9d 100644 --- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -1608,6 +1608,8 @@ void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, test_method_data_pointer(mdp, profile_continue); if (MethodData::profile_return_jsr292_only()) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + // If we don't profile all invoke bytecodes we must make sure // it's a bytecode we indeed profile. We can't go back to the // begining of the ProfileData we intend to update to check its @@ -1620,7 +1622,7 @@ void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, cmp(rscratch1, Bytecodes::_invokehandle); br(Assembler::EQ, do_profile); get_method(tmp); - ldrb(rscratch1, Address(tmp, Method::intrinsic_id_offset_in_bytes())); + ldrh(rscratch1, Address(tmp, Method::intrinsic_id_offset_in_bytes())); cmp(rscratch1, vmIntrinsics::_compiledLambdaForm); br(Assembler::NE, profile_continue); diff --git a/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp b/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp index 2cc0c6ba18b..cf2563f8623 100644 --- a/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp +++ b/hotspot/src/cpu/aarch64/vm/methodHandles_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -188,9 +188,11 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* address entry_point = __ pc(); if (VerifyMethodHandles) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + Label L; BLOCK_COMMENT("verify_intrinsic_id {"); - __ ldrb(rscratch1, Address(rmethod, Method::intrinsic_id_offset_in_bytes())); + __ ldrh(rscratch1, Address(rmethod, Method::intrinsic_id_offset_in_bytes())); __ cmp(rscratch1, (int) iid); __ br(Assembler::EQ, L); if (iid == vmIntrinsics::_linkToVirtual || diff --git a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp index 2c95de9b782..f32d8e590c1 100644 --- a/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp +++ b/hotspot/src/cpu/ppc/vm/interp_masm_ppc_64.cpp @@ -1817,13 +1817,15 @@ void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, test_method_data_pointer(profile_continue); if (MethodData::profile_return_jsr292_only()) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + // If we don't profile all invoke bytecodes we must make sure // it's a bytecode we indeed profile. We can't go back to the // begining of the ProfileData we intend to update to check its // type because we're right after it and we don't known its // length. lbz(tmp1, 0, R14_bcp); - lbz(tmp2, Method::intrinsic_id_offset_in_bytes(), R19_method); + lhz(tmp2, Method::intrinsic_id_offset_in_bytes(), R19_method); cmpwi(CCR0, tmp1, Bytecodes::_invokedynamic); cmpwi(CCR1, tmp1, Bytecodes::_invokehandle); cror(CCR0, Assembler::equal, CCR1, Assembler::equal); diff --git a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp index 4d33108b5d9..5c9d2f1622a 100644 --- a/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp +++ b/hotspot/src/cpu/ppc/vm/methodHandles_ppc.cpp @@ -224,11 +224,12 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* address entry_point = __ pc(); if (VerifyMethodHandles) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + Label L; BLOCK_COMMENT("verify_intrinsic_id {"); __ load_sized_value(temp1, Method::intrinsic_id_offset_in_bytes(), R19_method, - sizeof(u1), /*is_signed*/ false); - // assert(sizeof(u1) == sizeof(Method::_intrinsic_id), ""); + sizeof(u2), /*is_signed*/ false); __ cmpwi(CCR1, temp1, (int) iid); __ beq(CCR1, L); if (iid == vmIntrinsics::_linkToVirtual || diff --git a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp index 44ad8d91dae..e69dba4d531 100644 --- a/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/interp_masm_sparc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2021,6 +2021,8 @@ void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, test_method_data_pointer(profile_continue); if (MethodData::profile_return_jsr292_only()) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + // If we don't profile all invoke bytecodes we must make sure // it's a bytecode we indeed profile. We can't go back to the // begining of the ProfileData we intend to update to check its @@ -2031,7 +2033,7 @@ void InterpreterMacroAssembler::profile_return_type(Register ret, Register tmp1, cmp_and_br_short(tmp1, Bytecodes::_invokedynamic, equal, pn, do_profile); cmp(tmp1, Bytecodes::_invokehandle); br(equal, false, pn, do_profile); - delayed()->ldub(Lmethod, Method::intrinsic_id_offset_in_bytes(), tmp1); + delayed()->lduh(Lmethod, Method::intrinsic_id_offset_in_bytes(), tmp1); cmp_and_br_short(tmp1, vmIntrinsics::_compiledLambdaForm, notEqual, pt, profile_continue); bind(do_profile); diff --git a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp index f50150bc5f9..ba1f5c90753 100644 --- a/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/methodHandles_sparc.cpp @@ -229,9 +229,11 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* address entry_point = __ pc(); if (VerifyMethodHandles) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + Label L; BLOCK_COMMENT("verify_intrinsic_id {"); - __ ldub(Address(G5_method, Method::intrinsic_id_offset_in_bytes()), O1_scratch); + __ lduh(Address(G5_method, Method::intrinsic_id_offset_in_bytes()), O1_scratch); __ cmp_and_br_short(O1_scratch, (int) iid, Assembler::equal, Assembler::pt, L); if (iid == vmIntrinsics::_linkToVirtual || iid == vmIntrinsics::_linkToSpecial) { diff --git a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp index c6ec4048aa7..5501b91530c 100644 --- a/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp +++ b/hotspot/src/cpu/x86/vm/interp_masm_x86.cpp @@ -169,6 +169,8 @@ void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, test_method_data_pointer(mdp, profile_continue); if (MethodData::profile_return_jsr292_only()) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + // If we don't profile all invoke bytecodes we must make sure // it's a bytecode we indeed profile. We can't go back to the // begining of the ProfileData we intend to update to check its @@ -180,7 +182,7 @@ void InterpreterMacroAssembler::profile_return_type(Register mdp, Register ret, cmpb(Address(_bcp_register, 0), Bytecodes::_invokehandle); jcc(Assembler::equal, do_profile); get_method(tmp); - cmpb(Address(tmp, Method::intrinsic_id_offset_in_bytes()), vmIntrinsics::_compiledLambdaForm); + cmpw(Address(tmp, Method::intrinsic_id_offset_in_bytes()), vmIntrinsics::_compiledLambdaForm); jcc(Assembler::notEqual, profile_continue); bind(do_profile); diff --git a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp index 63d46978367..1a476e80c75 100644 --- a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp +++ b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp @@ -222,9 +222,11 @@ address MethodHandles::generate_method_handle_interpreter_entry(MacroAssembler* address entry_point = __ pc(); if (VerifyMethodHandles) { + assert(Method::intrinsic_id_size_in_bytes() == 2, "assuming Method::_intrinsic_id is u2"); + Label L; BLOCK_COMMENT("verify_intrinsic_id {"); - __ cmpb(Address(rbx_method, Method::intrinsic_id_offset_in_bytes()), (int) iid); + __ cmpw(Address(rbx_method, Method::intrinsic_id_offset_in_bytes()), (int) iid); __ jcc(Assembler::equal, L); if (iid == vmIntrinsics::_linkToVirtual || iid == vmIntrinsics::_linkToSpecial) { diff --git a/hotspot/src/share/vm/oops/method.hpp b/hotspot/src/share/vm/oops/method.hpp index 539e2978858..2cec504aba9 100644 --- a/hotspot/src/share/vm/oops/method.hpp +++ b/hotspot/src/share/vm/oops/method.hpp @@ -72,7 +72,7 @@ class Method : public Metadata { int _result_index; // C++ interpreter needs for converting results to/from stack #endif u2 _method_size; // size of this object - u1 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) + u2 _intrinsic_id; // vmSymbols::intrinsic_id (0 == _none) // Flags enum Flags { @@ -653,7 +653,7 @@ class Method : public Metadata { // for code generation static int method_data_offset_in_bytes() { return offset_of(Method, _method_data); } static int intrinsic_id_offset_in_bytes() { return offset_of(Method, _intrinsic_id); } - static int intrinsic_id_size_in_bytes() { return sizeof(u1); } + static int intrinsic_id_size_in_bytes() { return sizeof(u2); } // Static methods that are used to implement member methods where an exposed this pointer // is needed due to possible GCs @@ -777,7 +777,7 @@ class Method : public Metadata { // Support for inlining of intrinsic methods vmIntrinsics::ID intrinsic_id() const { return (vmIntrinsics::ID) _intrinsic_id; } - void set_intrinsic_id(vmIntrinsics::ID id) { _intrinsic_id = (u1) id; } + void set_intrinsic_id(vmIntrinsics::ID id) { _intrinsic_id = (u2) id; } // Helper routines for intrinsic_id() and vmIntrinsics::method(). void init_intrinsic_id(); // updates from _none if a match diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp index 335f1df5026..23df8077b6a 100644 --- a/hotspot/src/share/vm/runtime/vmStructs.cpp +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp @@ -383,7 +383,7 @@ typedef CompactHashtable SymbolCompactHashTable; nonstatic_field(Method, _access_flags, AccessFlags) \ nonstatic_field(Method, _vtable_index, int) \ nonstatic_field(Method, _method_size, u2) \ - nonstatic_field(Method, _intrinsic_id, u1) \ + nonstatic_field(Method, _intrinsic_id, u2) \ nonproduct_nonstatic_field(Method, _compiled_invocation_count, int) \ volatile_nonstatic_field(Method, _code, nmethod*) \ nonstatic_field(Method, _i2i_entry, address) \ From e5b80181d89b6e6f4cdfde5703d68afcc5290fee Mon Sep 17 00:00:00 2001 From: Ioi Lam Date: Fri, 18 Sep 2015 09:48:49 -0700 Subject: [PATCH 05/17] 8065155: Refactor Hotspot mapfiles Moved common exported functions to make/share/makefiles/mapfile-vers Reviewed-by: ihse, bdelsart --- hotspot/make/aix/makefiles/mapfile-vers-debug | 163 ----------------- .../make/aix/makefiles/mapfile-vers-product | 161 ----------------- hotspot/make/aix/makefiles/vm.make | 6 +- .../bsd/makefiles/mapfile-vers-darwin-debug | 164 +----------------- .../bsd/makefiles/mapfile-vers-darwin-product | 162 ----------------- hotspot/make/bsd/makefiles/mapfile-vers-debug | 162 ----------------- .../make/bsd/makefiles/mapfile-vers-product | 162 ----------------- hotspot/make/bsd/makefiles/vm.make | 23 ++- .../make/linux/makefiles/mapfile-vers-debug | 162 ----------------- .../make/linux/makefiles/mapfile-vers-product | 162 ----------------- hotspot/make/linux/makefiles/vm.make | 18 +- hotspot/make/share/makefiles/mapfile-vers | 162 +++++++++++++++++ hotspot/make/solaris/makefiles/mapfile-vers | 162 ----------------- hotspot/make/solaris/makefiles/vm.make | 18 +- 14 files changed, 206 insertions(+), 1481 deletions(-) create mode 100644 hotspot/make/share/makefiles/mapfile-vers diff --git a/hotspot/make/aix/makefiles/mapfile-vers-debug b/hotspot/make/aix/makefiles/mapfile-vers-debug index 841585d27d8..048af4535d5 100644 --- a/hotspot/make/aix/makefiles/mapfile-vers-debug +++ b/hotspot/make/aix/makefiles/mapfile-vers-debug @@ -26,169 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetProtectionDomain; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # debug JVM diff --git a/hotspot/make/aix/makefiles/mapfile-vers-product b/hotspot/make/aix/makefiles/mapfile-vers-product index 7b0ab9194fe..1fa9c284d8b 100644 --- a/hotspot/make/aix/makefiles/mapfile-vers-product +++ b/hotspot/make/aix/makefiles/mapfile-vers-product @@ -26,167 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetProtectionDomain; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # miscellaneous functions diff --git a/hotspot/make/aix/makefiles/vm.make b/hotspot/make/aix/makefiles/vm.make index ecd46d1c371..11bb0294ede 100644 --- a/hotspot/make/aix/makefiles/vm.make +++ b/hotspot/make/aix/makefiles/vm.make @@ -220,10 +220,12 @@ JVM_OBJ_FILES = $(Obj_Files) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) -mapfile : $(MAPFILE) vm.def +MAPFILE_SHARE := $(GAMMADIR)/make/share/makefiles/mapfile-vers + +mapfile : $(MAPFILE) $(MAPFILE_SHARE) vm.def rm -f $@ awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ - { system ("cat vm.def"); } \ + { system ("cat ${MAPFILE_SHARE} vm.def"); } \ else \ { print $$0 } \ }' > $@ < $(MAPFILE) diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug index 8740963b410..f92fe181903 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug +++ b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-debug @@ -24,171 +24,9 @@ # Only used for OSX/Darwin builds # Define public interface. - # _JNI - _JNI_CreateJavaVM - _JNI_GetCreatedJavaVMs - _JNI_GetDefaultJavaVMInitArgs - - # _JVM - _JVM_ActiveProcessorCount - _JVM_ArrayCopy - _JVM_AssertionStatusDirectives - _JVM_ClassDepth - _JVM_ClassLoaderDepth - _JVM_Clone - _JVM_ConstantPoolGetClassAt - _JVM_ConstantPoolGetClassAtIfLoaded - _JVM_ConstantPoolGetDoubleAt - _JVM_ConstantPoolGetFieldAt - _JVM_ConstantPoolGetFieldAtIfLoaded - _JVM_ConstantPoolGetFloatAt - _JVM_ConstantPoolGetIntAt - _JVM_ConstantPoolGetLongAt - _JVM_ConstantPoolGetMethodAt - _JVM_ConstantPoolGetMethodAtIfLoaded - _JVM_ConstantPoolGetMemberRefInfoAt - _JVM_ConstantPoolGetSize - _JVM_ConstantPoolGetStringAt - _JVM_ConstantPoolGetUTF8At - _JVM_CountStackFrames - _JVM_CurrentClassLoader - _JVM_CurrentLoadedClass - _JVM_CurrentThread - _JVM_CurrentTimeMillis - _JVM_DefineClass - _JVM_DefineClassWithSource - _JVM_DefineClassWithSourceCond - _JVM_DesiredAssertionStatus - _JVM_DoPrivileged - _JVM_DumpAllStacks - _JVM_DumpThreads - _JVM_FillInStackTrace - _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromBootLoader - _JVM_FindLibraryEntry - _JVM_FindLoadedClass - _JVM_FindPrimitiveClass - _JVM_FindSignal - _JVM_FreeMemory - _JVM_GC - _JVM_GetAllThreads - _JVM_GetArrayElement - _JVM_GetArrayLength - _JVM_GetCPClassNameUTF - _JVM_GetCPFieldClassNameUTF - _JVM_GetCPFieldModifiers - _JVM_GetCPFieldNameUTF - _JVM_GetCPFieldSignatureUTF - _JVM_GetCPMethodClassNameUTF - _JVM_GetCPMethodModifiers - _JVM_GetCPMethodNameUTF - _JVM_GetCPMethodSignatureUTF - _JVM_GetCallerClass - _JVM_GetClassAccessFlags - _JVM_GetClassAnnotations - _JVM_GetClassCPEntriesCount - _JVM_GetClassCPTypes - _JVM_GetClassConstantPool - _JVM_GetClassContext - _JVM_GetClassDeclaredConstructors - _JVM_GetClassDeclaredFields - _JVM_GetClassDeclaredMethods - _JVM_GetClassFieldsCount - _JVM_GetClassInterfaces - _JVM_GetClassMethodsCount - _JVM_GetClassModifiers - _JVM_GetClassName - _JVM_GetClassNameUTF - _JVM_GetClassSignature - _JVM_GetClassSigners - _JVM_GetClassTypeAnnotations - _JVM_GetDeclaredClasses - _JVM_GetDeclaringClass - _JVM_GetSimpleBinaryName - _JVM_GetEnclosingMethodInfo - _JVM_GetFieldIxModifiers - _JVM_GetFieldTypeAnnotations - _JVM_GetInheritedAccessControlContext - _JVM_GetInterfaceVersion - _JVM_GetManagement - _JVM_GetMethodIxArgsSize - _JVM_GetMethodIxByteCode - _JVM_GetMethodIxByteCodeLength - _JVM_GetMethodIxExceptionIndexes - _JVM_GetMethodIxExceptionTableEntry - _JVM_GetMethodIxExceptionTableLength - _JVM_GetMethodIxExceptionsCount - _JVM_GetMethodIxLocalsCount - _JVM_GetMethodIxMaxStack - _JVM_GetMethodIxModifiers - _JVM_GetMethodIxNameUTF - _JVM_GetMethodIxSignatureUTF - _JVM_GetMethodParameters - _JVM_GetMethodTypeAnnotations - _JVM_GetNanoTimeAdjustment - _JVM_GetPrimitiveArrayElement - _JVM_GetProtectionDomain - _JVM_GetStackAccessControlContext - _JVM_GetStackTraceDepth - _JVM_GetStackTraceElement - _JVM_GetSystemPackage - _JVM_GetSystemPackages - _JVM_GetTemporaryDirectory - _JVM_GetVersionInfo - _JVM_Halt - _JVM_HoldsLock - _JVM_IHashCode - _JVM_InitAgentProperties - _JVM_InitProperties - _JVM_InternString - _JVM_Interrupt - _JVM_InvokeMethod - _JVM_IsArrayClass - _JVM_IsConstructorIx - _JVM_IsInterface - _JVM_IsInterrupted - _JVM_IsPrimitiveClass - _JVM_IsSameClassPackage - _JVM_IsSupportedJNIVersion - _JVM_IsThreadAlive - _JVM_IsVMGeneratedMethodIx - _JVM_LatestUserDefinedLoader - _JVM_LoadLibrary - _JVM_MaxObjectInspectionAge - _JVM_MaxMemory - _JVM_MonitorNotify - _JVM_MonitorNotifyAll - _JVM_MonitorWait - _JVM_NanoTime - _JVM_NativePath - _JVM_NewArray - _JVM_NewInstanceFromConstructor - _JVM_NewMultiArray - _JVM_RaiseSignal - _JVM_RawMonitorCreate - _JVM_RawMonitorDestroy - _JVM_RawMonitorEnter - _JVM_RawMonitorExit - _JVM_RegisterSignal - _JVM_ReleaseUTF - _JVM_ResumeThread - _JVM_SetArrayElement - _JVM_SetClassSigners - _JVM_SetNativeThreadName - _JVM_SetPrimitiveArrayElement - _JVM_SetThreadPriority - _JVM_Sleep - _JVM_StartThread - _JVM_StopThread - _JVM_SuspendThread - _JVM_SupportsCX8 - _JVM_TotalMemory - _JVM_UnloadLibrary - _JVM_Yield _JVM_handle_bsd_signal - # miscellaneous functions + # miscellaneous functions _jio_fprintf _jio_printf _jio_snprintf diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product index d7df2cb7b1d..47b8549c2ba 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product +++ b/hotspot/make/bsd/makefiles/mapfile-vers-darwin-product @@ -24,168 +24,6 @@ # Only used for OSX/Darwin builds # Define public interface. - # _JNI - _JNI_CreateJavaVM - _JNI_GetCreatedJavaVMs - _JNI_GetDefaultJavaVMInitArgs - - # _JVM - _JVM_ActiveProcessorCount - _JVM_ArrayCopy - _JVM_AssertionStatusDirectives - _JVM_ClassDepth - _JVM_ClassLoaderDepth - _JVM_Clone - _JVM_ConstantPoolGetClassAt - _JVM_ConstantPoolGetClassAtIfLoaded - _JVM_ConstantPoolGetDoubleAt - _JVM_ConstantPoolGetFieldAt - _JVM_ConstantPoolGetFieldAtIfLoaded - _JVM_ConstantPoolGetFloatAt - _JVM_ConstantPoolGetIntAt - _JVM_ConstantPoolGetLongAt - _JVM_ConstantPoolGetMethodAt - _JVM_ConstantPoolGetMethodAtIfLoaded - _JVM_ConstantPoolGetMemberRefInfoAt - _JVM_ConstantPoolGetSize - _JVM_ConstantPoolGetStringAt - _JVM_ConstantPoolGetUTF8At - _JVM_CountStackFrames - _JVM_CurrentClassLoader - _JVM_CurrentLoadedClass - _JVM_CurrentThread - _JVM_CurrentTimeMillis - _JVM_DefineClass - _JVM_DefineClassWithSource - _JVM_DefineClassWithSourceCond - _JVM_DesiredAssertionStatus - _JVM_DoPrivileged - _JVM_DumpAllStacks - _JVM_DumpThreads - _JVM_FillInStackTrace - _JVM_FindClassFromCaller - _JVM_FindClassFromClass - _JVM_FindClassFromBootLoader - _JVM_FindLibraryEntry - _JVM_FindLoadedClass - _JVM_FindPrimitiveClass - _JVM_FindSignal - _JVM_FreeMemory - _JVM_GC - _JVM_GetAllThreads - _JVM_GetArrayElement - _JVM_GetArrayLength - _JVM_GetCPClassNameUTF - _JVM_GetCPFieldClassNameUTF - _JVM_GetCPFieldModifiers - _JVM_GetCPFieldNameUTF - _JVM_GetCPFieldSignatureUTF - _JVM_GetCPMethodClassNameUTF - _JVM_GetCPMethodModifiers - _JVM_GetCPMethodNameUTF - _JVM_GetCPMethodSignatureUTF - _JVM_GetCallerClass - _JVM_GetClassAccessFlags - _JVM_GetClassAnnotations - _JVM_GetClassCPEntriesCount - _JVM_GetClassCPTypes - _JVM_GetClassConstantPool - _JVM_GetClassContext - _JVM_GetClassDeclaredConstructors - _JVM_GetClassDeclaredFields - _JVM_GetClassDeclaredMethods - _JVM_GetClassFieldsCount - _JVM_GetClassInterfaces - _JVM_GetClassMethodsCount - _JVM_GetClassModifiers - _JVM_GetClassName - _JVM_GetClassNameUTF - _JVM_GetClassSignature - _JVM_GetClassSigners - _JVM_GetClassTypeAnnotations - _JVM_GetDeclaredClasses - _JVM_GetDeclaringClass - _JVM_GetSimpleBinaryName - _JVM_GetEnclosingMethodInfo - _JVM_GetFieldIxModifiers - _JVM_GetFieldTypeAnnotations - _JVM_GetInheritedAccessControlContext - _JVM_GetInterfaceVersion - _JVM_GetManagement - _JVM_GetMethodIxArgsSize - _JVM_GetMethodIxByteCode - _JVM_GetMethodIxByteCodeLength - _JVM_GetMethodIxExceptionIndexes - _JVM_GetMethodIxExceptionTableEntry - _JVM_GetMethodIxExceptionTableLength - _JVM_GetMethodIxExceptionsCount - _JVM_GetMethodIxLocalsCount - _JVM_GetMethodIxMaxStack - _JVM_GetMethodIxModifiers - _JVM_GetMethodIxNameUTF - _JVM_GetMethodIxSignatureUTF - _JVM_GetMethodParameters - _JVM_GetMethodTypeAnnotations - _JVM_GetNanoTimeAdjustment - _JVM_GetPrimitiveArrayElement - _JVM_GetProtectionDomain - _JVM_GetStackAccessControlContext - _JVM_GetStackTraceDepth - _JVM_GetStackTraceElement - _JVM_GetSystemPackage - _JVM_GetSystemPackages - _JVM_GetTemporaryDirectory - _JVM_GetVersionInfo - _JVM_Halt - _JVM_HoldsLock - _JVM_IHashCode - _JVM_InitAgentProperties - _JVM_InitProperties - _JVM_InternString - _JVM_Interrupt - _JVM_InvokeMethod - _JVM_IsArrayClass - _JVM_IsConstructorIx - _JVM_IsInterface - _JVM_IsInterrupted - _JVM_IsPrimitiveClass - _JVM_IsSameClassPackage - _JVM_IsSupportedJNIVersion - _JVM_IsThreadAlive - _JVM_IsVMGeneratedMethodIx - _JVM_LatestUserDefinedLoader - _JVM_LoadLibrary - _JVM_MaxObjectInspectionAge - _JVM_MaxMemory - _JVM_MonitorNotify - _JVM_MonitorNotifyAll - _JVM_MonitorWait - _JVM_NanoTime - _JVM_NativePath - _JVM_NewArray - _JVM_NewInstanceFromConstructor - _JVM_NewMultiArray - _JVM_RaiseSignal - _JVM_RawMonitorCreate - _JVM_RawMonitorDestroy - _JVM_RawMonitorEnter - _JVM_RawMonitorExit - _JVM_RegisterSignal - _JVM_ReleaseUTF - _JVM_ResumeThread - _JVM_SetArrayElement - _JVM_SetClassSigners - _JVM_SetNativeThreadName - _JVM_SetPrimitiveArrayElement - _JVM_SetThreadPriority - _JVM_Sleep - _JVM_StartThread - _JVM_StopThread - _JVM_SuspendThread - _JVM_SupportsCX8 - _JVM_TotalMemory - _JVM_UnloadLibrary - _JVM_Yield _JVM_handle_bsd_signal # miscellaneous functions diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-debug b/hotspot/make/bsd/makefiles/mapfile-vers-debug index af2fe0b90bc..1fa9c284d8b 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-debug +++ b/hotspot/make/bsd/makefiles/mapfile-vers-debug @@ -26,168 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # miscellaneous functions diff --git a/hotspot/make/bsd/makefiles/mapfile-vers-product b/hotspot/make/bsd/makefiles/mapfile-vers-product index af2fe0b90bc..1fa9c284d8b 100644 --- a/hotspot/make/bsd/makefiles/mapfile-vers-product +++ b/hotspot/make/bsd/makefiles/mapfile-vers-product @@ -26,168 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # miscellaneous functions diff --git a/hotspot/make/bsd/makefiles/vm.make b/hotspot/make/bsd/makefiles/vm.make index fc6bd323c60..562d1f45729 100644 --- a/hotspot/make/bsd/makefiles/vm.make +++ b/hotspot/make/bsd/makefiles/vm.make @@ -234,10 +234,29 @@ JVM_OBJ_FILES = $(Obj_Files) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) -mapfile : $(MAPFILE) vm.def mapfile_ext +MAPFILE_SHARE := $(GAMMADIR)/make/share/makefiles/mapfile-vers + +MAPFILE_EXT_SRC := $(HS_ALT_MAKE)/share/makefiles/mapfile-ext +ifneq ("$(wildcard $(MAPFILE_EXT_SRC))","") +MAPFILE_EXT := $(MAPFILE_EXT_SRC) +endif + +# For Darwin: add _ prefix and remove trailing ; +mapfile_extra: $(MAPFILE_SHARE) $(MAPFILE_EXT) + rm -f $@ +ifeq ($(OS_VENDOR), Darwin) + cat $(MAPFILE_SHARE) $(MAPFILE_EXT) | \ + sed -e 's/#.*//g' -e 's/[ ]*//g' -e 's/;//g' | \ + awk '{ if ($$0 ~ ".") { print "\t\t_" $$0 } }' \ + > $@ +else + cat $(MAPFILE_SHARE) $(MAPFILE_EXT) > $@ +endif + +mapfile : $(MAPFILE) mapfile_extra vm.def rm -f $@ awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ - { system ("cat mapfile_ext"); system ("cat vm.def"); } \ + { system ("cat mapfile_extra vm.def"); } \ else \ { print $$0 } \ }' > $@ < $(MAPFILE) diff --git a/hotspot/make/linux/makefiles/mapfile-vers-debug b/hotspot/make/linux/makefiles/mapfile-vers-debug index af2fe0b90bc..1fa9c284d8b 100644 --- a/hotspot/make/linux/makefiles/mapfile-vers-debug +++ b/hotspot/make/linux/makefiles/mapfile-vers-debug @@ -26,168 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # miscellaneous functions diff --git a/hotspot/make/linux/makefiles/mapfile-vers-product b/hotspot/make/linux/makefiles/mapfile-vers-product index af2fe0b90bc..1fa9c284d8b 100644 --- a/hotspot/make/linux/makefiles/mapfile-vers-product +++ b/hotspot/make/linux/makefiles/mapfile-vers-product @@ -26,168 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NanoTime; - JVM_NativePath; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_linux_signal; # miscellaneous functions diff --git a/hotspot/make/linux/makefiles/vm.make b/hotspot/make/linux/makefiles/vm.make index 950f6a12f33..6f1cbe4e035 100644 --- a/hotspot/make/linux/makefiles/vm.make +++ b/hotspot/make/linux/makefiles/vm.make @@ -232,10 +232,17 @@ JVM_OBJ_FILES = $(Obj_Files) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) -mapfile : $(MAPFILE) vm.def mapfile_ext +MAPFILE_SHARE := $(GAMMADIR)/make/share/makefiles/mapfile-vers + +MAPFILE_EXT_SRC := $(HS_ALT_MAKE)/share/makefiles/mapfile-ext +ifneq ("$(wildcard $(MAPFILE_EXT_SRC))","") +MAPFILE_EXT := $(MAPFILE_EXT_SRC) +endif + +mapfile : $(MAPFILE) $(MAPFILE_SHARE) vm.def $(MAPFILE_EXT) rm -f $@ awk '{ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") \ - { system ("cat mapfile_ext"); system ("cat vm.def"); } \ + { system ("cat ${MAPFILE_SHARE} $(MAPFILE_EXT) vm.def"); } \ else \ { print $$0 } \ }' > $@ < $(MAPFILE) @@ -259,13 +266,6 @@ ifneq ($(VM_DEF_EXT),) cat $(VM_DEF_EXT) >> $@ endif -mapfile_ext: - rm -f $@ - touch $@ - if [ -f $(HS_ALT_MAKE)/linux/makefiles/mapfile-ext ]; then \ - cat $(HS_ALT_MAKE)/linux/makefiles/mapfile-ext > $@; \ - fi - ifeq ($(JVM_VARIANT_ZEROSHARK), true) STATIC_CXX = false else diff --git a/hotspot/make/share/makefiles/mapfile-vers b/hotspot/make/share/makefiles/mapfile-vers new file mode 100644 index 00000000000..57b5ad37c41 --- /dev/null +++ b/hotspot/make/share/makefiles/mapfile-vers @@ -0,0 +1,162 @@ + # JNI + JNI_CreateJavaVM; + JNI_GetCreatedJavaVMs; + JNI_GetDefaultJavaVMInitArgs; + + # JVM + JVM_ActiveProcessorCount; + JVM_ArrayCopy; + JVM_AssertionStatusDirectives; + JVM_ClassDepth; + JVM_ClassLoaderDepth; + JVM_Clone; + JVM_ConstantPoolGetClassAt; + JVM_ConstantPoolGetClassAtIfLoaded; + JVM_ConstantPoolGetDoubleAt; + JVM_ConstantPoolGetFieldAt; + JVM_ConstantPoolGetFieldAtIfLoaded; + JVM_ConstantPoolGetFloatAt; + JVM_ConstantPoolGetIntAt; + JVM_ConstantPoolGetLongAt; + JVM_ConstantPoolGetMethodAt; + JVM_ConstantPoolGetMethodAtIfLoaded; + JVM_ConstantPoolGetMemberRefInfoAt; + JVM_ConstantPoolGetSize; + JVM_ConstantPoolGetStringAt; + JVM_ConstantPoolGetUTF8At; + JVM_CountStackFrames; + JVM_CurrentClassLoader; + JVM_CurrentLoadedClass; + JVM_CurrentThread; + JVM_CurrentTimeMillis; + JVM_DefineClass; + JVM_DefineClassWithSource; + JVM_DefineClassWithSourceCond; + JVM_DesiredAssertionStatus; + JVM_DoPrivileged; + JVM_DumpAllStacks; + JVM_DumpThreads; + JVM_FillInStackTrace; + JVM_FindClassFromCaller; + JVM_FindClassFromClass; + JVM_FindClassFromBootLoader; + JVM_FindLibraryEntry; + JVM_FindLoadedClass; + JVM_FindPrimitiveClass; + JVM_FindSignal; + JVM_FreeMemory; + JVM_GC; + JVM_GetAllThreads; + JVM_GetArrayElement; + JVM_GetArrayLength; + JVM_GetCPClassNameUTF; + JVM_GetCPFieldClassNameUTF; + JVM_GetCPFieldModifiers; + JVM_GetCPFieldNameUTF; + JVM_GetCPFieldSignatureUTF; + JVM_GetCPMethodClassNameUTF; + JVM_GetCPMethodModifiers; + JVM_GetCPMethodNameUTF; + JVM_GetCPMethodSignatureUTF; + JVM_GetCallerClass; + JVM_GetClassAccessFlags; + JVM_GetClassAnnotations; + JVM_GetClassCPEntriesCount; + JVM_GetClassCPTypes; + JVM_GetClassConstantPool; + JVM_GetClassContext; + JVM_GetClassDeclaredConstructors; + JVM_GetClassDeclaredFields; + JVM_GetClassDeclaredMethods; + JVM_GetClassFieldsCount; + JVM_GetClassInterfaces; + JVM_GetClassMethodsCount; + JVM_GetClassModifiers; + JVM_GetClassName; + JVM_GetClassNameUTF; + JVM_GetClassSignature; + JVM_GetClassSigners; + JVM_GetClassTypeAnnotations; + JVM_GetDeclaredClasses; + JVM_GetDeclaringClass; + JVM_GetSimpleBinaryName; + JVM_GetEnclosingMethodInfo; + JVM_GetFieldIxModifiers; + JVM_GetFieldTypeAnnotations; + JVM_GetInheritedAccessControlContext; + JVM_GetInterfaceVersion; + JVM_GetManagement; + JVM_GetMethodIxArgsSize; + JVM_GetMethodIxByteCode; + JVM_GetMethodIxByteCodeLength; + JVM_GetMethodIxExceptionIndexes; + JVM_GetMethodIxExceptionTableEntry; + JVM_GetMethodIxExceptionTableLength; + JVM_GetMethodIxExceptionsCount; + JVM_GetMethodIxLocalsCount; + JVM_GetMethodIxMaxStack; + JVM_GetMethodIxModifiers; + JVM_GetMethodIxNameUTF; + JVM_GetMethodIxSignatureUTF; + JVM_GetMethodParameters; + JVM_GetMethodTypeAnnotations; + JVM_GetNanoTimeAdjustment; + JVM_GetPrimitiveArrayElement; + JVM_GetProtectionDomain; + JVM_GetStackAccessControlContext; + JVM_GetStackTraceDepth; + JVM_GetStackTraceElement; + JVM_GetSystemPackage; + JVM_GetSystemPackages; + JVM_GetTemporaryDirectory; + JVM_GetVersionInfo; + JVM_Halt; + JVM_HoldsLock; + JVM_IHashCode; + JVM_InitAgentProperties; + JVM_InitProperties; + JVM_InternString; + JVM_Interrupt; + JVM_InvokeMethod; + JVM_IsArrayClass; + JVM_IsConstructorIx; + JVM_IsInterface; + JVM_IsInterrupted; + JVM_IsPrimitiveClass; + JVM_IsSameClassPackage; + JVM_IsSupportedJNIVersion; + JVM_IsThreadAlive; + JVM_IsVMGeneratedMethodIx; + JVM_LatestUserDefinedLoader; + JVM_LoadLibrary; + JVM_MaxObjectInspectionAge; + JVM_MaxMemory; + JVM_MonitorNotify; + JVM_MonitorNotifyAll; + JVM_MonitorWait; + JVM_NanoTime; + JVM_NativePath; + JVM_NewArray; + JVM_NewInstanceFromConstructor; + JVM_NewMultiArray; + JVM_RaiseSignal; + JVM_RawMonitorCreate; + JVM_RawMonitorDestroy; + JVM_RawMonitorEnter; + JVM_RawMonitorExit; + JVM_RegisterSignal; + JVM_ReleaseUTF; + JVM_ResumeThread; + JVM_SetArrayElement; + JVM_SetClassSigners; + JVM_SetNativeThreadName; + JVM_SetPrimitiveArrayElement; + JVM_SetThreadPriority; + JVM_Sleep; + JVM_StartThread; + JVM_StopThread; + JVM_SuspendThread; + JVM_SupportsCX8; + JVM_TotalMemory; + JVM_UnloadLibrary; + JVM_Yield; diff --git a/hotspot/make/solaris/makefiles/mapfile-vers b/hotspot/make/solaris/makefiles/mapfile-vers index 47e1f535d22..3de0dd99af5 100644 --- a/hotspot/make/solaris/makefiles/mapfile-vers +++ b/hotspot/make/solaris/makefiles/mapfile-vers @@ -26,168 +26,6 @@ SUNWprivate_1.1 { global: - # JNI - JNI_CreateJavaVM; - JNI_GetCreatedJavaVMs; - JNI_GetDefaultJavaVMInitArgs; - - # JVM - JVM_ActiveProcessorCount; - JVM_ArrayCopy; - JVM_AssertionStatusDirectives; - JVM_ClassDepth; - JVM_ClassLoaderDepth; - JVM_Clone; - JVM_ConstantPoolGetClassAt; - JVM_ConstantPoolGetClassAtIfLoaded; - JVM_ConstantPoolGetDoubleAt; - JVM_ConstantPoolGetFieldAt; - JVM_ConstantPoolGetFieldAtIfLoaded; - JVM_ConstantPoolGetFloatAt; - JVM_ConstantPoolGetIntAt; - JVM_ConstantPoolGetLongAt; - JVM_ConstantPoolGetMethodAt; - JVM_ConstantPoolGetMethodAtIfLoaded; - JVM_ConstantPoolGetMemberRefInfoAt; - JVM_ConstantPoolGetSize; - JVM_ConstantPoolGetStringAt; - JVM_ConstantPoolGetUTF8At; - JVM_CountStackFrames; - JVM_CurrentClassLoader; - JVM_CurrentLoadedClass; - JVM_CurrentThread; - JVM_CurrentTimeMillis; - JVM_DefineClass; - JVM_DefineClassWithSource; - JVM_DefineClassWithSourceCond; - JVM_DesiredAssertionStatus; - JVM_DoPrivileged; - JVM_DumpAllStacks; - JVM_DumpThreads; - JVM_FillInStackTrace; - JVM_FindClassFromCaller; - JVM_FindClassFromClass; - JVM_FindClassFromBootLoader; - JVM_FindLibraryEntry; - JVM_FindLoadedClass; - JVM_FindPrimitiveClass; - JVM_FindSignal; - JVM_FreeMemory; - JVM_GC; - JVM_GetAllThreads; - JVM_GetArrayElement; - JVM_GetArrayLength; - JVM_GetCPClassNameUTF; - JVM_GetCPFieldClassNameUTF; - JVM_GetCPFieldModifiers; - JVM_GetCPFieldNameUTF; - JVM_GetCPFieldSignatureUTF; - JVM_GetCPMethodClassNameUTF; - JVM_GetCPMethodModifiers; - JVM_GetCPMethodNameUTF; - JVM_GetCPMethodSignatureUTF; - JVM_GetCallerClass; - JVM_GetClassAccessFlags; - JVM_GetClassAnnotations; - JVM_GetClassCPEntriesCount; - JVM_GetClassCPTypes; - JVM_GetClassConstantPool; - JVM_GetClassContext; - JVM_GetClassDeclaredConstructors; - JVM_GetClassDeclaredFields; - JVM_GetClassDeclaredMethods; - JVM_GetClassFieldsCount; - JVM_GetClassInterfaces; - JVM_GetClassMethodsCount; - JVM_GetClassModifiers; - JVM_GetClassName; - JVM_GetClassNameUTF; - JVM_GetClassSignature; - JVM_GetClassSigners; - JVM_GetClassTypeAnnotations; - JVM_GetDeclaredClasses; - JVM_GetDeclaringClass; - JVM_GetSimpleBinaryName; - JVM_GetEnclosingMethodInfo; - JVM_GetFieldIxModifiers; - JVM_GetFieldTypeAnnotations; - JVM_GetInheritedAccessControlContext; - JVM_GetInterfaceVersion; - JVM_GetManagement; - JVM_GetMethodIxArgsSize; - JVM_GetMethodIxByteCode; - JVM_GetMethodIxByteCodeLength; - JVM_GetMethodIxExceptionIndexes; - JVM_GetMethodIxExceptionTableEntry; - JVM_GetMethodIxExceptionTableLength; - JVM_GetMethodIxExceptionsCount; - JVM_GetMethodIxLocalsCount; - JVM_GetMethodIxMaxStack; - JVM_GetMethodIxModifiers; - JVM_GetMethodIxNameUTF; - JVM_GetMethodIxSignatureUTF; - JVM_GetMethodParameters; - JVM_GetMethodTypeAnnotations; - JVM_GetNanoTimeAdjustment; - JVM_GetPrimitiveArrayElement; - JVM_GetProtectionDomain; - JVM_GetStackAccessControlContext; - JVM_GetStackTraceDepth; - JVM_GetStackTraceElement; - JVM_GetSystemPackage; - JVM_GetSystemPackages; - JVM_GetTemporaryDirectory; - JVM_GetVersionInfo; - JVM_Halt; - JVM_HoldsLock; - JVM_IHashCode; - JVM_InitAgentProperties; - JVM_InitProperties; - JVM_InternString; - JVM_Interrupt; - JVM_InvokeMethod; - JVM_IsArrayClass; - JVM_IsConstructorIx; - JVM_IsInterface; - JVM_IsInterrupted; - JVM_IsPrimitiveClass; - JVM_IsSameClassPackage; - JVM_IsSupportedJNIVersion; - JVM_IsThreadAlive; - JVM_IsVMGeneratedMethodIx; - JVM_LatestUserDefinedLoader; - JVM_LoadLibrary; - JVM_MaxObjectInspectionAge; - JVM_MaxMemory; - JVM_MonitorNotify; - JVM_MonitorNotifyAll; - JVM_MonitorWait; - JVM_NativePath; - JVM_NanoTime; - JVM_NewArray; - JVM_NewInstanceFromConstructor; - JVM_NewMultiArray; - JVM_RaiseSignal; - JVM_RawMonitorCreate; - JVM_RawMonitorDestroy; - JVM_RawMonitorEnter; - JVM_RawMonitorExit; - JVM_RegisterSignal; - JVM_ReleaseUTF; - JVM_ResumeThread; - JVM_SetArrayElement; - JVM_SetClassSigners; - JVM_SetNativeThreadName; - JVM_SetPrimitiveArrayElement; - JVM_SetThreadPriority; - JVM_Sleep; - JVM_StartThread; - JVM_StopThread; - JVM_SuspendThread; - JVM_SupportsCX8; - JVM_TotalMemory; - JVM_UnloadLibrary; - JVM_Yield; JVM_handle_solaris_signal; # miscellaneous functions diff --git a/hotspot/make/solaris/makefiles/vm.make b/hotspot/make/solaris/makefiles/vm.make index 4f435ba9f15..799a3dbee69 100644 --- a/hotspot/make/solaris/makefiles/vm.make +++ b/hotspot/make/solaris/makefiles/vm.make @@ -241,13 +241,19 @@ JVM_OBJ_FILES = $(Obj_Files) $(DTRACE_OBJS) vm_version.o: $(filter-out vm_version.o,$(JVM_OBJ_FILES)) -mapfile : $(MAPFILE) $(MAPFILE_DTRACE_OPT) vm.def mapfile_ext +MAPFILE_SHARE := $(GAMMADIR)/make/share/makefiles/mapfile-vers + +MAPFILE_EXT_SRC := $(HS_ALT_MAKE)/share/makefiles/mapfile-ext +ifneq ("$(wildcard $(MAPFILE_EXT_SRC))","") +MAPFILE_EXT := $(MAPFILE_EXT_SRC) +endif + +mapfile : $(MAPFILE) $(MAPFILE_SHARE) vm.def $(MAPFILE_EXT) rm -f $@ cat $(MAPFILE) $(MAPFILE_DTRACE_OPT) \ | $(NAWK) '{ \ if ($$0 ~ "INSERT VTABLE SYMBOLS HERE") { \ - system ("cat mapfile_ext"); \ - system ("cat vm.def"); \ + system ("cat ${MAPFILE_SHARE} $(MAPFILE_EXT) vm.def"); \ } else { \ print $$0; \ } \ @@ -260,12 +266,6 @@ mapfile_extended : mapfile $(MAPFILE_DTRACE_OPT) vm.def: $(Obj_Files) sh $(GAMMADIR)/make/solaris/makefiles/build_vm_def.sh *.o > $@ -mapfile_ext: - rm -f $@ - touch $@ - if [ -f $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext ]; then \ - cat $(HS_ALT_MAKE)/solaris/makefiles/mapfile-ext > $@; \ - fi ifeq ($(LINK_INTO),AOUT) LIBJVM.o = From 26254f46451592662dd8eb8dd90536e85ec22eb4 Mon Sep 17 00:00:00 2001 From: Volker Simonis Date: Mon, 21 Sep 2015 10:45:41 +0200 Subject: [PATCH 06/17] 8135179: Fix conversion warning after 8067341 Add required casts. Reviewed-by: tschatzl, goetz --- hotspot/src/share/vm/gc/g1/g1EvacStats.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hotspot/src/share/vm/gc/g1/g1EvacStats.cpp b/hotspot/src/share/vm/gc/g1/g1EvacStats.cpp index 009c6dc5151..e228d473ed4 100644 --- a/hotspot/src/share/vm/gc/g1/g1EvacStats.cpp +++ b/hotspot/src/share/vm/gc/g1/g1EvacStats.cpp @@ -93,7 +93,7 @@ void G1EvacStats::adjust_desired_plab_sz() { size_t const used_for_waste_calculation = used() > _region_end_waste ? used() - _region_end_waste : 0; size_t const total_waste_allowed = used_for_waste_calculation * TargetPLABWastePct; - size_t const cur_plab_sz = (double)total_waste_allowed / G1LastPLABAverageOccupancy; + size_t const cur_plab_sz = (size_t)((double)total_waste_allowed / G1LastPLABAverageOccupancy); // Take historical weighted average _filter.sample(cur_plab_sz); // Clip from above and below, and align to object boundary From 23813ce92ef9ff3998ff820bbfd59ceaa74cc64c Mon Sep 17 00:00:00 2001 From: Derek White Date: Fri, 11 Sep 2015 15:31:03 -0400 Subject: [PATCH 07/17] 8066821: Enhance command line processing to manage deprecating and obsoleting -XX command line arguments Add support for alias options and automatically expiring deprecated options Reviewed-by: dholmes, kbarrett, acorn --- hotspot/src/share/vm/runtime/arguments.cpp | 745 +++++++++++------- hotspot/src/share/vm/runtime/arguments.hpp | 26 +- hotspot/src/share/vm/runtime/globals.hpp | 9 +- hotspot/src/share/vm/runtime/java.hpp | 8 + hotspot/test/TEST.groups | 1 - .../TestDefaultMaxRAMFraction.java | 46 -- .../gc/startup_warnings/TestNoParNew.java | 48 -- .../gc/startup_warnings/TestParNewCMS.java | 2 +- .../CommandLine/ObsoleteFlagErrorMessage.java | 2 +- .../runtime/CommandLine/VMAliasOptions.java | 66 ++ .../CommandLine/VMDeprecatedOptions.java | 80 ++ hotspot/test/runtime/NMT/AutoshutdownNMT.java | 2 +- .../test/lib/cli/CommandLineOptionTest.java | 85 ++ 13 files changed, 736 insertions(+), 384 deletions(-) delete mode 100644 hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java delete mode 100644 hotspot/test/gc/startup_warnings/TestNoParNew.java create mode 100644 hotspot/test/runtime/CommandLine/VMAliasOptions.java create mode 100644 hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index f2c94d2e9b0..c2307e85d6e 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -118,7 +118,7 @@ char* Arguments::_ext_dirs = NULL; // part of the option string. static bool match_option(const JavaVMOption *option, const char* name, const char** tail) { - int len = (int)strlen(name); + size_t len = strlen(name); if (strncmp(option->optionString, name, len) == 0) { *tail = option->optionString + len; return true; @@ -219,11 +219,9 @@ void Arguments::init_system_properties() { void Arguments::init_version_specific_system_properties() { enum { bufsz = 16 }; char buffer[bufsz]; - const char* spec_vendor = "Sun Microsystems Inc."; - uint32_t spec_version = 0; + const char* spec_vendor = "Oracle Corporation"; + uint32_t spec_version = JDK_Version::current().major_version(); - spec_vendor = "Oracle Corporation"; - spec_version = JDK_Version::current().major_version(); jio_snprintf(buffer, bufsz, "1." UINT32_FORMAT, spec_version); PropertyList_add(&_system_properties, @@ -234,75 +232,290 @@ void Arguments::init_version_specific_system_properties() { new SystemProperty("java.vm.vendor", VM_Version::vm_vendor(), false)); } -/** - * Provide a slightly more user-friendly way of eliminating -XX flags. - * When a flag is eliminated, it can be added to this list in order to - * continue accepting this flag on the command-line, while issuing a warning - * and ignoring the value. Once the JDK version reaches the 'accept_until' - * limit, we flatly refuse to admit the existence of the flag. This allows - * a flag to die correctly over JDK releases using HSX. - * But now that HSX is no longer supported only options with a future - * accept_until value need to be listed, and the list can be pruned - * on each major release. +/* + * -XX argument processing: + * + * -XX arguments are defined in several places, such as: + * globals.hpp, globals_.hpp, globals_.hpp, _globals.hpp, or _globals.hpp. + * -XX arguments are parsed in parse_argument(). + * -XX argument bounds checking is done in check_vm_args_consistency(). + * + * Over time -XX arguments may change. There are mechanisms to handle common cases: + * + * ALIASED: An option that is simply another name for another option. This is often + * part of the process of deprecating a flag, but not all aliases need + * to be deprecated. + * + * Create an alias for an option by adding the old and new option names to the + * "aliased_jvm_flags" table. Delete the old variable from globals.hpp (etc). + * + * DEPRECATED: An option that is supported, but a warning is printed to let the user know that + * support may be removed in the future. Both regular and aliased options may be + * deprecated. + * + * Add a deprecation warning for an option (or alias) by adding an entry in the + * "special_jvm_flags" table and setting the "deprecated_in" field. + * Often an option "deprecated" in one major release will + * be made "obsolete" in the next. In this case the entry should also have it's + * "obsolete_in" field set. + * + * OBSOLETE: An option that has been removed (and deleted from globals.hpp), but is still accepted + * on the command line. A warning is printed to let the user know that option might not + * be accepted in the future. + * + * Add an obsolete warning for an option by adding an entry in the "special_jvm_flags" + * table and setting the "obsolete_in" field. + * + * EXPIRED: A deprecated or obsolete option that has an "accept_until" version less than or equal + * to the current JDK version. The system will flatly refuse to admit the existence of + * the flag. This allows a flag to die automatically over JDK releases. + * + * Note that manual cleanup of expired options should be done at major JDK version upgrades: + * - Newly expired options should be removed from the special_jvm_flags and aliased_jvm_flags tables. + * - Newly obsolete or expired deprecated options should have their global variable + * definitions removed (from globals.hpp, etc) and related implementations removed. + * + * Recommended approach for removing options: + * + * To remove options commonly used by customers (e.g. product, commercial -XX options), use + * the 3-step model adding major release numbers to the deprecate, obsolete and expire columns. + * + * To remove internal options (e.g. diagnostic, experimental, develop options), use + * a 2-step model adding major release numbers to the obsolete and expire columns. + * + * To change the name of an option, use the alias table as well as a 2-step + * model adding major release numbers to the deprecate and expire columns. + * Think twice about aliasing commonly used customer options. + * + * There are times when it is appropriate to leave a future release number as undefined. + * + * Tests: Aliases should be tested in VMAliasOptions.java. + * Deprecated options should be tested in VMDeprecatedOptions.java. */ + +// Obsolete or deprecated -XX flag. typedef struct { const char* name; - JDK_Version obsoleted_in; // when the flag went away - JDK_Version accept_until; // which version to start denying the existence -} ObsoleteFlag; + JDK_Version deprecated_in; // When the deprecation warning started (or "undefined"). + JDK_Version obsolete_in; // When the obsolete warning started (or "undefined"). + JDK_Version expired_in; // When the option expires (or "undefined"). +} SpecialFlag; -static ObsoleteFlag obsolete_jvm_flags[] = { - { "UseOldInlining", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "SafepointPollOffset", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "UseBoundThreads", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "DefaultThreadPriority", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "NoYieldsInMicrolock", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "BackEdgeThreshold", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "UseNewReflection", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "ReflectionWrapResolutionErrors",JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "VerifyReflectionBytecodes", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "AutoShutdownNMT", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "NmethodSweepFraction", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "NmethodSweepCheckInterval", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "CodeCacheMinimumFreeSpace", JDK_Version::jdk(9), JDK_Version::jdk(10) }, +// The special_jvm_flags table declares options that are being deprecated and/or obsoleted. The +// "deprecated_in" or "obsolete_in" fields may be set to "undefined", but not both. +// When the JDK version reaches 'deprecated_in' limit, the JVM will process this flag on +// the command-line as usual, but will issue a warning. +// When the JDK version reaches 'obsolete_in' limit, the JVM will continue accepting this flag on +// the command-line, while issuing a warning and ignoring the flag value. +// Once the JDK version reaches 'expired_in' limit, the JVM will flatly refuse to admit the +// existence of the flag. +// +// MANUAL CLEANUP ON JDK VERSION UPDATES: +// This table ensures that the handling of options will update automatically when the JDK +// version is incremented, but the source code needs to be cleanup up manually: +// - As "deprecated" options age into "obsolete" or "expired" options, the associated "globals" +// variable should be removed, as well as users of the variable. +// - As "deprecated" options age into "obsolete" options, move the entry into the +// "Obsolete Flags" section of the table. +// - All expired options should be removed from the table. +static SpecialFlag const special_jvm_flags[] = { + // -------------- Deprecated Flags -------------- + // --- Non-alias flags - sorted by obsolete_in then expired_in: + { "MaxGCMinorPauseMillis", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, + { "UseParNewGC", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + + // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: + { "DefaultMaxRAMFraction", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, + { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, + { "CMSMarkStackSizeMax", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + { "CMSMarkStackSize", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + { "G1MarkStackSize", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + { "ParallelMarkingThreads", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + { "ParallelCMSThreads", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(10) }, + + // -------------- Obsolete Flags - sorted by expired_in -------------- + { "UseOldInlining", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "SafepointPollOffset", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "UseBoundThreads", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "DefaultThreadPriority", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "NoYieldsInMicrolock", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "BackEdgeThreshold", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "UseNewReflection", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "ReflectionWrapResolutionErrors",JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "VerifyReflectionBytecodes", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "AutoShutdownNMT", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "NmethodSweepFraction", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "NmethodSweepCheckInterval", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "CodeCacheMinimumFreeSpace", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, #ifndef ZERO - { "UseFastAccessorMethods", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "UseFastEmptyMethods", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "UseFastAccessorMethods", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "UseFastEmptyMethods", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, #endif // ZERO - { "UseCompilerSafepoints", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "AdaptiveSizePausePolicy", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "ParallelGCRetainPLAB", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "ThreadSafetyMargin", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "LazyBootClassLoader", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "StarvationMonitorInterval", JDK_Version::jdk(9), JDK_Version::jdk(10) }, - { "PreInflateSpin", JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "UseCompilerSafepoints", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "AdaptiveSizePausePolicy", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "ParallelGCRetainPLAB", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "ThreadSafetyMargin", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "LazyBootClassLoader", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "StarvationMonitorInterval", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + { "PreInflateSpin", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(10) }, + +#ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS + { "dep > obs", JDK_Version::jdk(9), JDK_Version::jdk(8), JDK_Version::undefined() }, + { "dep > exp ", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::jdk(8) }, + { "obs > exp ", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::jdk(8) }, + { "not deprecated or obsolete", JDK_Version::undefined(), JDK_Version::undefined(), JDK_Version::jdk(9) }, + { "dup option", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, + { "dup option", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, + { "BytecodeVerificationRemote", JDK_Version::undefined(), JDK_Version::jdk(9), JDK_Version::undefined() }, +#endif + { NULL, JDK_Version(0), JDK_Version(0) } }; -// Returns true if the flag is obsolete and fits into the range specified -// for being ignored. In the case that the flag is ignored, the 'version' -// value is filled in with the version number when the flag became -// obsolete so that that value can be displayed to the user. -bool Arguments::is_newly_obsolete(const char *s, JDK_Version* version) { - int i = 0; - assert(version != NULL, "Must provide a version buffer"); - while (obsolete_jvm_flags[i].name != NULL) { - const ObsoleteFlag& flag_status = obsolete_jvm_flags[i]; - // =xxx form - // [-|+] form - size_t len = strlen(flag_status.name); - if ((strncmp(flag_status.name, s, len) == 0) && - (strlen(s) == len)){ - if (JDK_Version::current().compare(flag_status.accept_until) == -1) { - *version = flag_status.obsoleted_in; - return true; - } +// Flags that are aliases for other flags. +typedef struct { + const char* alias_name; + const char* real_name; +} AliasedFlag; + +static AliasedFlag const aliased_jvm_flags[] = { + { "DefaultMaxRAMFraction", "MaxRAMFraction" }, + { "CMSMarkStackSizeMax", "MarkStackSizeMax" }, + { "CMSMarkStackSize", "MarkStackSize" }, + { "G1MarkStackSize", "MarkStackSize" }, + { "ParallelMarkingThreads", "ConcGCThreads" }, + { "ParallelCMSThreads", "ConcGCThreads" }, + { "CreateMinidumpOnCrash", "CreateCoredumpOnCrash" }, + { NULL, NULL} +}; + +// Return true if "v" is less than "other", where "other" may be "undefined". +static bool version_less_than(JDK_Version v, JDK_Version other) { + assert(!v.is_undefined(), "must be defined"); + if (!other.is_undefined() && v.compare(other) >= 0) { + return false; + } else { + return true; + } +} + +static bool lookup_special_flag(const char *flag_name, SpecialFlag& flag) { + for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { + if ((strcmp(special_jvm_flags[i].name, flag_name) == 0)) { + flag = special_jvm_flags[i]; + return true; } - i++; } return false; } +bool Arguments::is_obsolete_flag(const char *flag_name, JDK_Version* version) { + assert(version != NULL, "Must provide a version buffer"); + SpecialFlag flag; + if (lookup_special_flag(flag_name, flag)) { + if (!flag.obsolete_in.is_undefined()) { + if (version_less_than(JDK_Version::current(), flag.expired_in)) { + *version = flag.obsolete_in; + return true; + } + } + } + return false; +} + +int Arguments::is_deprecated_flag(const char *flag_name, JDK_Version* version) { + assert(version != NULL, "Must provide a version buffer"); + SpecialFlag flag; + if (lookup_special_flag(flag_name, flag)) { + if (!flag.deprecated_in.is_undefined()) { + if (version_less_than(JDK_Version::current(), flag.obsolete_in) && + version_less_than(JDK_Version::current(), flag.expired_in)) { + *version = flag.deprecated_in; + return 1; + } else { + return -1; + } + } + } + return 0; +} + +const char* Arguments::real_flag_name(const char *flag_name) { + for (size_t i = 0; aliased_jvm_flags[i].alias_name != NULL; i++) { + const AliasedFlag& flag_status = aliased_jvm_flags[i]; + if (strcmp(flag_status.alias_name, flag_name) == 0) { + return flag_status.real_name; + } + } + return flag_name; +} + +#ifndef PRODUCT +static bool lookup_special_flag(const char *flag_name, size_t skip_index) { + for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { + if ((i != skip_index) && (strcmp(special_jvm_flags[i].name, flag_name) == 0)) { + return true; + } + } + return false; +} + +static bool verify_special_jvm_flags() { + bool success = true; + for (size_t i = 0; special_jvm_flags[i].name != NULL; i++) { + const SpecialFlag& flag = special_jvm_flags[i]; + if (lookup_special_flag(flag.name, i)) { + warning("Duplicate special flag declaration \"%s\"", flag.name); + success = false; + } + if (flag.deprecated_in.is_undefined() && + flag.obsolete_in.is_undefined()) { + warning("Special flag entry \"%s\" must declare version deprecated and/or obsoleted in.", flag.name); + success = false; + } + + if (!flag.deprecated_in.is_undefined()) { + if (!version_less_than(flag.deprecated_in, flag.obsolete_in)) { + warning("Special flag entry \"%s\" must be deprecated before obsoleted.", flag.name); + success = false; + } + + if (!version_less_than(flag.deprecated_in, flag.expired_in)) { + warning("Special flag entry \"%s\" must be deprecated before expired.", flag.name); + success = false; + } + } + + if (!flag.obsolete_in.is_undefined()) { + if (!version_less_than(flag.obsolete_in, flag.expired_in)) { + warning("Special flag entry \"%s\" must be obsoleted before expired.", flag.name); + success = false; + } + + // if flag has become obsolete it should not have a "globals" flag defined anymore. + if (!version_less_than(JDK_Version::current(), flag.obsolete_in)) { + if (Flag::find_flag(flag.name) != NULL) { + warning("Global variable for obsolete special flag entry \"%s\" should be removed", flag.name); + success = false; + } + } + } + + if (!flag.expired_in.is_undefined()) { + // if flag has become expired it should not have a "globals" flag defined anymore. + if (!version_less_than(JDK_Version::current(), flag.expired_in)) { + if (Flag::find_flag(flag.name) != NULL) { + warning("Global variable for expired flag entry \"%s\" should be removed", flag.name); + success = false; + } + } + } + + } + return success; +} +#endif + // Constructs the system class path (aka boot class path) from the following // components, in order: // @@ -571,7 +784,7 @@ void Arguments::describe_range_error(ArgsRange errcode) { } } -static bool set_bool_flag(char* name, bool value, Flag::Flags origin) { +static bool set_bool_flag(const char* name, bool value, Flag::Flags origin) { if (CommandLineFlags::boolAtPut(name, &value, origin) == Flag::SUCCESS) { return true; } else { @@ -579,7 +792,7 @@ static bool set_bool_flag(char* name, bool value, Flag::Flags origin) { } } -static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) { +static bool set_fp_numeric_flag(const char* name, char* value, Flag::Flags origin) { double v; if (sscanf(value, "%lf", &v) != 1) { return false; @@ -591,7 +804,7 @@ static bool set_fp_numeric_flag(char* name, char* value, Flag::Flags origin) { return false; } -static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) { +static bool set_numeric_flag(const char* name, char* value, Flag::Flags origin) { julong v; int int_v; intx intx_v; @@ -640,14 +853,14 @@ static bool set_numeric_flag(char* name, char* value, Flag::Flags origin) { return false; } -static bool set_string_flag(char* name, const char* value, Flag::Flags origin) { +static bool set_string_flag(const char* name, const char* value, Flag::Flags origin) { if (CommandLineFlags::ccstrAtPut(name, &value, origin) != Flag::SUCCESS) return false; // Contract: CommandLineFlags always returns a pointer that needs freeing. FREE_C_HEAP_ARRAY(char, value); return true; } -static bool append_to_string_flag(char* name, const char* new_value, Flag::Flags origin) { +static bool append_to_string_flag(const char* name, const char* new_value, Flag::Flags origin) { const char* old_value = ""; if (CommandLineFlags::ccstrAt(name, &old_value) != Flag::SUCCESS) return false; size_t old_len = old_value != NULL ? strlen(old_value) : 0; @@ -675,6 +888,33 @@ static bool append_to_string_flag(char* name, const char* new_value, Flag::Flags return true; } +const char* Arguments::handle_aliases_and_deprecation(const char* arg, bool warn) { + const char* real_name = real_flag_name(arg); + JDK_Version since = JDK_Version(); + switch (is_deprecated_flag(arg, &since)) { + case -1: + return NULL; // obsolete or expired, don't process normally + case 0: + return real_name; + case 1: { + if (warn) { + char version[256]; + since.to_string(version, sizeof(version)); + if (real_name != arg) { + warning("Option %s was deprecated in version %s and will likely be removed in a future release. Use option %s instead.", + arg, version, real_name); + } else { + warning("Option %s was deprecated in version %s and will likely be removed in a future release.", + arg, version); + } + } + return real_name; + } + } + ShouldNotReachHere(); + return NULL; +} + bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { // range of acceptable characters spelled out for portability reasons @@ -682,27 +922,46 @@ bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { #define BUFLEN 255 char name[BUFLEN+1]; char dummy; + const char* real_name; + bool warn_if_deprecated = true; if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { - return set_bool_flag(name, false, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + return set_bool_flag(real_name, false, origin); } if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) { - return set_bool_flag(name, true, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + return set_bool_flag(real_name, true, origin); } char punct; if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') { const char* value = strchr(arg, '=') + 1; - Flag* flag = Flag::find_flag(name, strlen(name)); + Flag* flag; + + // this scanf pattern matches both strings (handled here) and numbers (handled later)) + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + flag = Flag::find_flag(real_name); if (flag != NULL && flag->is_ccstr()) { if (flag->ccstr_accumulates()) { - return append_to_string_flag(name, value, origin); + return append_to_string_flag(real_name, value, origin); } else { if (value[0] == '\0') { value = NULL; } - return set_string_flag(name, value, origin); + return set_string_flag(real_name, value, origin); } + } else { + warn_if_deprecated = false; // if arg is deprecated, we've already done warning... } } @@ -712,7 +971,11 @@ bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { if (value[0] == '\0') { value = NULL; } - return set_string_flag(name, value, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + return set_string_flag(real_name, value, origin); } #define SIGNED_FP_NUMBER_RANGE "[-0123456789.]" @@ -723,13 +986,21 @@ bool Arguments::parse_argument(const char* arg, Flag::Flags origin) { if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_NUMBER_RANGE "." "%" XSTR(BUFLEN) NUMBER_RANGE "%c", name, value, value2, &dummy) == 3) { // Looks like a floating-point number -- try again with more lenient format string if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) SIGNED_FP_NUMBER_RANGE "%c", name, value, &dummy) == 2) { - return set_fp_numeric_flag(name, value, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + return set_fp_numeric_flag(real_name, value, origin); } } #define VALUE_RANGE "[-kmgtxKMGTX0123456789abcdefABCDEF]" if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "=" "%" XSTR(BUFLEN) VALUE_RANGE "%c", name, value, &dummy) == 2) { - return set_numeric_flag(name, value, origin); + real_name = handle_aliases_and_deprecation(name, warn_if_deprecated); + if (real_name == NULL) { + return false; + } + return set_numeric_flag(real_name, value, origin); } return false; @@ -837,8 +1108,8 @@ void Arguments::print_jvm_args_on(outputStream* st) { } bool Arguments::process_argument(const char* arg, - jboolean ignore_unrecognized, Flag::Flags origin) { - + jboolean ignore_unrecognized, + Flag::Flags origin) { JDK_Version since = JDK_Version(); if (parse_argument(arg, origin) || ignore_unrecognized) { @@ -864,10 +1135,10 @@ bool Arguments::process_argument(const char* arg, strncpy(stripped_argname, argname, arg_len); stripped_argname[arg_len] = '\0'; // strncpy may not null terminate. - if (is_newly_obsolete(stripped_argname, &since)) { + if (is_obsolete_flag(stripped_argname, &since)) { char version[256]; since.to_string(version, sizeof(version)); - warning("ignoring option %s; support was removed in %s", stripped_argname, version); + warning("Ignoring option %s; support was removed in %s", stripped_argname, version); return true; } } @@ -1235,7 +1506,7 @@ void Arguments::set_tiered_flags() { static void disable_adaptive_size_policy(const char* collector_name) { if (UseAdaptiveSizePolicy) { if (FLAG_IS_CMDLINE(UseAdaptiveSizePolicy)) { - warning("disabling UseAdaptiveSizePolicy; it is incompatible with %s.", + warning("Disabling UseAdaptiveSizePolicy; it is incompatible with %s.", collector_name); } FLAG_SET_DEFAULT(UseAdaptiveSizePolicy, false); @@ -1707,7 +1978,6 @@ void Arguments::set_gc_specific_flags() { } else if (UseG1GC) { set_g1_gc_flags(); } - check_deprecated_gc_flags(); if (AssumeMP && !UseSerialGC) { if (FLAG_IS_DEFAULT(ParallelGCThreads) && ParallelGCThreads == 1) { warning("If the number of processors is expected to increase from one, then" @@ -1737,11 +2007,6 @@ julong Arguments::limit_by_allocatable_memory(julong limit) { static const size_t DefaultHeapBaseMinAddress = HeapBaseMinAddress; void Arguments::set_heap_size() { - if (!FLAG_IS_DEFAULT(DefaultMaxRAMFraction)) { - // Deprecated flag - FLAG_SET_CMDLINE(uintx, MaxRAMFraction, DefaultMaxRAMFraction); - } - const julong phys_mem = FLAG_IS_DEFAULT(MaxRAM) ? MIN2(os::physical_memory(), (julong)MaxRAM) : (julong)MaxRAM; @@ -1844,6 +2109,122 @@ void Arguments::set_heap_size() { } } +// This option inspects the machine and attempts to set various +// parameters to be optimal for long-running, memory allocation +// intensive jobs. It is intended for machines with large +// amounts of cpu and memory. +jint Arguments::set_aggressive_heap_flags() { + // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit + // VM, but we may not be able to represent the total physical memory + // available (like having 8gb of memory on a box but using a 32bit VM). + // Thus, we need to make sure we're using a julong for intermediate + // calculations. + julong initHeapSize; + julong total_memory = os::physical_memory(); + + if (total_memory < (julong) 256 * M) { + jio_fprintf(defaultStream::error_stream(), + "You need at least 256mb of memory to use -XX:+AggressiveHeap\n"); + vm_exit(1); + } + + // The heap size is half of available memory, or (at most) + // all of possible memory less 160mb (leaving room for the OS + // when using ISM). This is the maximum; because adaptive sizing + // is turned on below, the actual space used may be smaller. + + initHeapSize = MIN2(total_memory / (julong) 2, + total_memory - (julong) 160 * M); + + initHeapSize = limit_by_allocatable_memory(initHeapSize); + + if (FLAG_IS_DEFAULT(MaxHeapSize)) { + if (FLAG_SET_CMDLINE(size_t, MaxHeapSize, initHeapSize) != Flag::SUCCESS) { + return JNI_EINVAL; + } + if (FLAG_SET_CMDLINE(size_t, InitialHeapSize, initHeapSize) != Flag::SUCCESS) { + return JNI_EINVAL; + } + // Currently the minimum size and the initial heap sizes are the same. + set_min_heap_size(initHeapSize); + } + if (FLAG_IS_DEFAULT(NewSize)) { + // Make the young generation 3/8ths of the total heap. + if (FLAG_SET_CMDLINE(size_t, NewSize, + ((julong) MaxHeapSize / (julong) 8) * (julong) 3) != Flag::SUCCESS) { + return JNI_EINVAL; + } + if (FLAG_SET_CMDLINE(size_t, MaxNewSize, NewSize) != Flag::SUCCESS) { + return JNI_EINVAL; + } + } + +#if !defined(_ALLBSD_SOURCE) && !defined(AIX) // UseLargePages is not yet supported on BSD and AIX. + FLAG_SET_DEFAULT(UseLargePages, true); +#endif + + // Increase some data structure sizes for efficiency + if (FLAG_SET_CMDLINE(size_t, BaseFootPrintEstimate, MaxHeapSize) != Flag::SUCCESS) { + return JNI_EINVAL; + } + if (FLAG_SET_CMDLINE(bool, ResizeTLAB, false) != Flag::SUCCESS) { + return JNI_EINVAL; + } + if (FLAG_SET_CMDLINE(size_t, TLABSize, 256 * K) != Flag::SUCCESS) { + return JNI_EINVAL; + } + + // See the OldPLABSize comment below, but replace 'after promotion' + // with 'after copying'. YoungPLABSize is the size of the survivor + // space per-gc-thread buffers. The default is 4kw. + if (FLAG_SET_CMDLINE(size_t, YoungPLABSize, 256 * K) != Flag::SUCCESS) { // Note: this is in words + return JNI_EINVAL; + } + + // OldPLABSize is the size of the buffers in the old gen that + // UseParallelGC uses to promote live data that doesn't fit in the + // survivor spaces. At any given time, there's one for each gc thread. + // The default size is 1kw. These buffers are rarely used, since the + // survivor spaces are usually big enough. For specjbb, however, there + // are occasions when there's lots of live data in the young gen + // and we end up promoting some of it. We don't have a definite + // explanation for why bumping OldPLABSize helps, but the theory + // is that a bigger PLAB results in retaining something like the + // original allocation order after promotion, which improves mutator + // locality. A minor effect may be that larger PLABs reduce the + // number of PLAB allocation events during gc. The value of 8kw + // was arrived at by experimenting with specjbb. + if (FLAG_SET_CMDLINE(size_t, OldPLABSize, 8 * K) != Flag::SUCCESS) { // Note: this is in words + return JNI_EINVAL; + } + + // Enable parallel GC and adaptive generation sizing + if (FLAG_SET_CMDLINE(bool, UseParallelGC, true) != Flag::SUCCESS) { + return JNI_EINVAL; + } + FLAG_SET_DEFAULT(ParallelGCThreads, + Abstract_VM_Version::parallel_worker_threads()); + + // Encourage steady state memory management + if (FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100) != Flag::SUCCESS) { + return JNI_EINVAL; + } + + // This appears to improve mutator locality + if (FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false) != Flag::SUCCESS) { + return JNI_EINVAL; + } + + // Get around early Solaris scheduling bug + // (affinity vs other jobs on system) + // but disallow DR and offlining (5008695). + if (FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true) != Flag::SUCCESS) { + return JNI_EINVAL; + } + + return JNI_OK; +} + // This must be called after ergonomics. void Arguments::set_bytecode_flags() { if (!RewriteBytecodes) { @@ -2027,20 +2408,6 @@ bool Arguments::check_gc_consistency() { return true; } -void Arguments::check_deprecated_gc_flags() { - if (FLAG_IS_CMDLINE(UseParNewGC)) { - warning("The UseParNewGC flag is deprecated and will likely be removed in a future release"); - } - if (FLAG_IS_CMDLINE(MaxGCMinorPauseMillis)) { - warning("Using MaxGCMinorPauseMillis as minor pause goal is deprecated" - "and will likely be removed in future release"); - } - if (FLAG_IS_CMDLINE(DefaultMaxRAMFraction)) { - warning("DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. " - "Use MaxRAMFraction instead."); - } -} - // Check the consistency of vm_init_args bool Arguments::check_vm_args_consistency() { // Method for adding checks for flag consistency. @@ -2576,7 +2943,7 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, // All these options are deprecated in JDK 9 and will be removed in a future release char version[256]; JDK_Version::jdk(9).to_string(version, sizeof(version)); - warning("ignoring option %s; support was removed in %s", option->optionString, version); + warning("Ignoring option %s; support was removed in %s", option->optionString, version); } else if (match_option(option, "-XX:CodeCacheExpansionSize=", &tail)) { julong long_CodeCacheExpansionSize = 0; ArgsRange errcode = parse_memory_size(tail, &long_CodeCacheExpansionSize, os::vm_page_size()); @@ -2843,120 +3210,10 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, _abort_hook = CAST_TO_FN_PTR(abort_hook_t, option->extraInfo); // -XX:+AggressiveHeap } else if (match_option(option, "-XX:+AggressiveHeap")) { - - // This option inspects the machine and attempts to set various - // parameters to be optimal for long-running, memory allocation - // intensive jobs. It is intended for machines with large - // amounts of cpu and memory. - - // initHeapSize is needed since _initial_heap_size is 4 bytes on a 32 bit - // VM, but we may not be able to represent the total physical memory - // available (like having 8gb of memory on a box but using a 32bit VM). - // Thus, we need to make sure we're using a julong for intermediate - // calculations. - julong initHeapSize; - julong total_memory = os::physical_memory(); - - if (total_memory < (julong)256*M) { - jio_fprintf(defaultStream::error_stream(), - "You need at least 256mb of memory to use -XX:+AggressiveHeap\n"); - vm_exit(1); + jint result = set_aggressive_heap_flags(); + if (result != JNI_OK) { + return result; } - - // The heap size is half of available memory, or (at most) - // all of possible memory less 160mb (leaving room for the OS - // when using ISM). This is the maximum; because adaptive sizing - // is turned on below, the actual space used may be smaller. - - initHeapSize = MIN2(total_memory / (julong)2, - total_memory - (julong)160*M); - - initHeapSize = limit_by_allocatable_memory(initHeapSize); - - if (FLAG_IS_DEFAULT(MaxHeapSize)) { - if (FLAG_SET_CMDLINE(size_t, MaxHeapSize, initHeapSize) != Flag::SUCCESS) { - return JNI_EINVAL; - } - if (FLAG_SET_CMDLINE(size_t, InitialHeapSize, initHeapSize) != Flag::SUCCESS) { - return JNI_EINVAL; - } - // Currently the minimum size and the initial heap sizes are the same. - set_min_heap_size(initHeapSize); - } - if (FLAG_IS_DEFAULT(NewSize)) { - // Make the young generation 3/8ths of the total heap. - if (FLAG_SET_CMDLINE(size_t, NewSize, - ((julong)MaxHeapSize / (julong)8) * (julong)3) != Flag::SUCCESS) { - return JNI_EINVAL; - } - if (FLAG_SET_CMDLINE(size_t, MaxNewSize, NewSize) != Flag::SUCCESS) { - return JNI_EINVAL; - } - } - -#if !defined(_ALLBSD_SOURCE) && !defined(AIX) // UseLargePages is not yet supported on BSD and AIX. - FLAG_SET_DEFAULT(UseLargePages, true); -#endif - - // Increase some data structure sizes for efficiency - if (FLAG_SET_CMDLINE(size_t, BaseFootPrintEstimate, MaxHeapSize) != Flag::SUCCESS) { - return JNI_EINVAL; - } - if (FLAG_SET_CMDLINE(bool, ResizeTLAB, false) != Flag::SUCCESS) { - return JNI_EINVAL; - } - if (FLAG_SET_CMDLINE(size_t, TLABSize, 256*K) != Flag::SUCCESS) { - return JNI_EINVAL; - } - - // See the OldPLABSize comment below, but replace 'after promotion' - // with 'after copying'. YoungPLABSize is the size of the survivor - // space per-gc-thread buffers. The default is 4kw. - if (FLAG_SET_CMDLINE(size_t, YoungPLABSize, 256*K) != Flag::SUCCESS) { // Note: this is in words - return JNI_EINVAL; - } - - // OldPLABSize is the size of the buffers in the old gen that - // UseParallelGC uses to promote live data that doesn't fit in the - // survivor spaces. At any given time, there's one for each gc thread. - // The default size is 1kw. These buffers are rarely used, since the - // survivor spaces are usually big enough. For specjbb, however, there - // are occasions when there's lots of live data in the young gen - // and we end up promoting some of it. We don't have a definite - // explanation for why bumping OldPLABSize helps, but the theory - // is that a bigger PLAB results in retaining something like the - // original allocation order after promotion, which improves mutator - // locality. A minor effect may be that larger PLABs reduce the - // number of PLAB allocation events during gc. The value of 8kw - // was arrived at by experimenting with specjbb. - if (FLAG_SET_CMDLINE(size_t, OldPLABSize, 8*K) != Flag::SUCCESS) { // Note: this is in words - return JNI_EINVAL; - } - - // Enable parallel GC and adaptive generation sizing - if (FLAG_SET_CMDLINE(bool, UseParallelGC, true) != Flag::SUCCESS) { - return JNI_EINVAL; - } - FLAG_SET_DEFAULT(ParallelGCThreads, - Abstract_VM_Version::parallel_worker_threads()); - - // Encourage steady state memory management - if (FLAG_SET_CMDLINE(uintx, ThresholdTolerance, 100) != Flag::SUCCESS) { - return JNI_EINVAL; - } - - // This appears to improve mutator locality - if (FLAG_SET_CMDLINE(bool, ScavengeBeforeFullGC, false) != Flag::SUCCESS) { - return JNI_EINVAL; - } - - // Get around early Solaris scheduling bug - // (affinity vs other jobs on system) - // but disallow DR and offlining (5008695). - if (FLAG_SET_CMDLINE(bool, BindGCTaskThreadsToCPUs, true) != Flag::SUCCESS) { - return JNI_EINVAL; - } - // Need to keep consistency of MaxTenuringThreshold and AlwaysTenure/NeverTenure; // and the last option wins. } else if (match_option(option, "-XX:+NeverTenure")) { @@ -3049,52 +3306,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, return JNI_EINVAL; } #endif - } else if (match_option(option, "-XX:CMSMarkStackSize=", &tail) || - match_option(option, "-XX:G1MarkStackSize=", &tail)) { - julong stack_size = 0; - ArgsRange errcode = parse_memory_size(tail, &stack_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid mark stack size: %s\n", option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:MarkStackSize in place of " - "-XX:CMSMarkStackSize or -XX:G1MarkStackSize in the future\n"); - if (FLAG_SET_CMDLINE(size_t, MarkStackSize, stack_size) != Flag::SUCCESS) { - return JNI_EINVAL; - } - } else if (match_option(option, "-XX:CMSMarkStackSizeMax=", &tail)) { - julong max_stack_size = 0; - ArgsRange errcode = parse_memory_size(tail, &max_stack_size, 1); - if (errcode != arg_in_range) { - jio_fprintf(defaultStream::error_stream(), - "Invalid maximum mark stack size: %s\n", - option->optionString); - describe_range_error(errcode); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:MarkStackSizeMax in place of " - "-XX:CMSMarkStackSizeMax in the future\n"); - if (FLAG_SET_CMDLINE(size_t, MarkStackSizeMax, max_stack_size) != Flag::SUCCESS) { - return JNI_EINVAL; - } - } else if (match_option(option, "-XX:ParallelMarkingThreads=", &tail) || - match_option(option, "-XX:ParallelCMSThreads=", &tail)) { - uintx conc_threads = 0; - if (!parse_uintx(tail, &conc_threads, 1)) { - jio_fprintf(defaultStream::error_stream(), - "Invalid concurrent threads: %s\n", option->optionString); - return JNI_EINVAL; - } - jio_fprintf(defaultStream::error_stream(), - "Please use -XX:ConcGCThreads in place of " - "-XX:ParallelMarkingThreads or -XX:ParallelCMSThreads in the future\n"); - if (FLAG_SET_CMDLINE(uint, ConcGCThreads, conc_threads) != Flag::SUCCESS) { - return JNI_EINVAL; - } } else if (match_option(option, "-XX:MaxDirectMemorySize=", &tail)) { julong max_direct_memory_size = 0; ArgsRange errcode = parse_memory_size(tail, &max_direct_memory_size, 0); @@ -3114,19 +3325,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, "ManagementServer is not supported in this VM.\n"); return JNI_ERR; #endif // INCLUDE_MANAGEMENT - // CreateMinidumpOnCrash is removed, and replaced by CreateCoredumpOnCrash - } else if (match_option(option, "-XX:+CreateMinidumpOnCrash")) { - if (FLAG_SET_CMDLINE(bool, CreateCoredumpOnCrash, true) != Flag::SUCCESS) { - return JNI_EINVAL; - } - jio_fprintf(defaultStream::output_stream(), - "CreateMinidumpOnCrash is replaced by CreateCoredumpOnCrash: CreateCoredumpOnCrash is on\n"); - } else if (match_option(option, "-XX:-CreateMinidumpOnCrash")) { - if (FLAG_SET_CMDLINE(bool, CreateCoredumpOnCrash, false) != Flag::SUCCESS) { - return JNI_EINVAL; - } - jio_fprintf(defaultStream::output_stream(), - "CreateMinidumpOnCrash is replaced by CreateCoredumpOnCrash: CreateCoredumpOnCrash is off\n"); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= and -XX:VMOptionsFile= since those cases have // already been handled @@ -3623,7 +3821,7 @@ jint Arguments::parse_options_buffer(const char* name, char* buffer, const size_ void Arguments::set_shared_spaces_flags() { if (DumpSharedSpaces) { if (RequireSharedSpaces) { - warning("cannot dump shared archive while using shared archive"); + warning("Cannot dump shared archive while using shared archive"); } UseSharedSpaces = false; #ifdef _LP64 @@ -3848,6 +4046,7 @@ static void print_options(const JavaVMInitArgs *args) { // Parse entry point called from JNI_CreateJavaVM jint Arguments::parse(const JavaVMInitArgs* args) { + assert(verify_special_jvm_flags(), "deprecated and obsolete flag table inconsistent"); // Initialize ranges and constraints CommandLineFlagRangeList::init(); @@ -3984,7 +4183,7 @@ jint Arguments::parse(const JavaVMInitArgs* args) { if (ScavengeRootsInCode == 0) { if (!FLAG_IS_DEFAULT(ScavengeRootsInCode)) { - warning("forcing ScavengeRootsInCode non-zero"); + warning("Forcing ScavengeRootsInCode non-zero"); } ScavengeRootsInCode = 1; } diff --git a/hotspot/src/share/vm/runtime/arguments.hpp b/hotspot/src/share/vm/runtime/arguments.hpp index 99f78278633..3bd46e75fe2 100644 --- a/hotspot/src/share/vm/runtime/arguments.hpp +++ b/hotspot/src/share/vm/runtime/arguments.hpp @@ -364,6 +364,8 @@ class Arguments : AllStatic { // Aggressive optimization flags. static jint set_aggressive_opts_flags(); + static jint set_aggressive_heap_flags(); + // Argument parsing static void do_pd_flag_adjustments(); static bool parse_argument(const char* arg, Flag::Flags origin); @@ -427,11 +429,24 @@ class Arguments : AllStatic { short* methodsNum, short* methodsMax, char*** methods, bool** allClasses ); - // Returns true if the string s is in the list of flags that have recently - // been made obsolete. If we detect one of these flags on the command - // line, instead of failing we print a warning message and ignore the - // flag. This gives the user a release or so to stop using the flag. - static bool is_newly_obsolete(const char* s, JDK_Version* buffer); + // Returns true if the flag is obsolete (and not yet expired). + // In this case the 'version' buffer is filled in with + // the version number when the flag became obsolete. + static bool is_obsolete_flag(const char* flag_name, JDK_Version* version); + + // Returns 1 if the flag is deprecated (and not yet obsolete or expired). + // In this case the 'version' buffer is filled in with the version number when + // the flag became deprecated. + // Returns -1 if the flag is expired or obsolete. + // Returns 0 otherwise. + static int is_deprecated_flag(const char* flag_name, JDK_Version* version); + + // Return the real name for the flag passed on the command line (either an alias name or "flag_name"). + static const char* real_flag_name(const char *flag_name); + + // Return the "real" name for option arg if arg is an alias, and print a warning if arg is deprecated. + // Return NULL if the arg has expired. + static const char* handle_aliases_and_deprecation(const char* arg, bool warn); static short CompileOnlyClassesNum; static short CompileOnlyClassesMax; @@ -478,7 +493,6 @@ class Arguments : AllStatic { // Check for consistency in the selection of the garbage collector. static bool check_gc_consistency(); // Check user-selected gc - static void check_deprecated_gc_flags(); // Check consistency or otherwise of VM argument settings static bool check_vm_args_consistency(); // Used by os_solaris diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index bfe44edcaed..d690459c988 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -1599,7 +1599,7 @@ public: "(ParallelGC only)") \ \ product(bool, ScavengeBeforeFullGC, true, \ - "Scavenge young generation before each full GC.") \ + "Scavenge youngest generation before each full GC.") \ \ develop(bool, ScavengeWithObjectsInToSpace, false, \ "Allow scavenges to occur when to-space contains objects") \ @@ -2097,7 +2097,7 @@ public: "promotion failure") \ \ notproduct(bool, PromotionFailureALot, false, \ - "Use promotion failure handling on every young generation " \ + "Use promotion failure handling on every youngest generation " \ "collection") \ \ develop(uintx, PromotionFailureALotCount, 1000, \ @@ -2183,11 +2183,6 @@ public: "size") \ range(1, max_uintx) \ \ - product(uintx, DefaultMaxRAMFraction, 4, \ - "Maximum fraction (1/n) of real memory used for maximum heap " \ - "size; deprecated: to be renamed to MaxRAMFraction") \ - range(1, max_uintx) \ - \ product(uintx, MinRAMFraction, 2, \ "Minimum fraction (1/n) of real memory used for maximum heap " \ "size on systems with small physical memory size") \ diff --git a/hotspot/src/share/vm/runtime/java.hpp b/hotspot/src/share/vm/runtime/java.hpp index 703f5060cbf..710aac4d401 100644 --- a/hotspot/src/share/vm/runtime/java.hpp +++ b/hotspot/src/share/vm/runtime/java.hpp @@ -137,6 +137,14 @@ class JDK_Version VALUE_OBJ_CLASS_SPEC { return JDK_Version(major, 0, 0, update_number); } + static JDK_Version undefined() { + return JDK_Version(0); + } + + bool is_undefined() const { + return (_major == 0); + } + uint8_t major_version() const { return _major; } uint8_t minor_version() const { return _minor; } uint8_t micro_version() const { return _micro; } diff --git a/hotspot/test/TEST.groups b/hotspot/test/TEST.groups index 0b8a918ba71..5b1f9adf6b6 100644 --- a/hotspot/test/TEST.groups +++ b/hotspot/test/TEST.groups @@ -190,7 +190,6 @@ needs_full_vm_compact1 = \ gc/g1/TestShrinkToOneRegion.java \ gc/metaspace/G1AddMetaspaceDependency.java \ gc/startup_warnings/TestCMS.java \ - gc/startup_warnings/TestDefaultMaxRAMFraction.java \ gc/startup_warnings/TestDefNewCMS.java \ gc/startup_warnings/TestParallelGC.java \ gc/startup_warnings/TestParallelScavengeSerialOld.java \ diff --git a/hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java b/hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java deleted file mode 100644 index a9f462bdf46..00000000000 --- a/hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved. -* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -* -* This code is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License version 2 only, as -* published by the Free Software Foundation. -* -* This code is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* version 2 for more details (a copy is included in the LICENSE file that -* accompanied this code). -* -* You should have received a copy of the GNU General Public License version -* 2 along with this work; if not, write to the Free Software Foundation, -* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -* -* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -* or visit www.oracle.com if you need additional information or have any -* questions. -*/ - -/* -* @test TestDefaultMaxRAMFraction -* @key gc -* @bug 8021967 -* @summary Test that the deprecated TestDefaultMaxRAMFraction flag print a warning message -* @library /testlibrary -* @modules java.base/sun.misc -* java.management -*/ - -import jdk.test.lib.OutputAnalyzer; -import jdk.test.lib.ProcessTools; - -public class TestDefaultMaxRAMFraction { - public static void main(String[] args) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:DefaultMaxRAMFraction=4", "-version"); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: DefaultMaxRAMFraction is deprecated and will likely be removed in a future release. Use MaxRAMFraction instead."); - output.shouldNotContain("error"); - output.shouldHaveExitValue(0); - } - -} diff --git a/hotspot/test/gc/startup_warnings/TestNoParNew.java b/hotspot/test/gc/startup_warnings/TestNoParNew.java deleted file mode 100644 index 963e858e76e..00000000000 --- a/hotspot/test/gc/startup_warnings/TestNoParNew.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -* Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -* -* This code is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License version 2 only, as -* published by the Free Software Foundation. -* -* This code is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -* version 2 for more details (a copy is included in the LICENSE file that -* accompanied this code). -* -* You should have received a copy of the GNU General Public License version -* 2 along with this work; if not, write to the Free Software Foundation, -* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -* -* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -* or visit www.oracle.com if you need additional information or have any -* questions. -*/ - -/* -* @test TestNoParNew -* @key gc -* @bug 8065972 -* @summary Test that specifying -XX:-UseParNewGC on the command line logs a warning message -* @library /testlibrary -* @modules java.base/sun.misc -* java.management -*/ - -import jdk.test.lib.OutputAnalyzer; -import jdk.test.lib.ProcessTools; - - -public class TestNoParNew { - - public static void main(String args[]) throws Exception { - ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:-UseParNewGC", "-version"); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: The UseParNewGC flag is deprecated and will likely be removed in a future release"); - output.shouldNotContain("error"); - output.shouldHaveExitValue(0); - } - -} diff --git a/hotspot/test/gc/startup_warnings/TestParNewCMS.java b/hotspot/test/gc/startup_warnings/TestParNewCMS.java index 4020f953b6f..6fc0b332e51 100644 --- a/hotspot/test/gc/startup_warnings/TestParNewCMS.java +++ b/hotspot/test/gc/startup_warnings/TestParNewCMS.java @@ -40,7 +40,7 @@ public class TestParNewCMS { public static void main(String args[]) throws Exception { ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-XX:+UseParNewGC", "-XX:+UseConcMarkSweepGC", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("warning: The UseParNewGC flag is deprecated and will likely be removed in a future release"); + output.shouldContain("warning: Option UseParNewGC was deprecated in version"); output.shouldNotContain("error"); output.shouldHaveExitValue(0); } diff --git a/hotspot/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java b/hotspot/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java index aa006990530..b65df44590f 100644 --- a/hotspot/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java +++ b/hotspot/test/runtime/CommandLine/ObsoleteFlagErrorMessage.java @@ -46,7 +46,7 @@ public class ObsoleteFlagErrorMessage { "-XX:NmethodSweepFraction=10", "-version"); OutputAnalyzer output2 = new OutputAnalyzer(pb2.start()); - output2.shouldContain("ignoring option").shouldContain("support was removed"); + output2.shouldContain("Ignoring option").shouldContain("support was removed"); output2.shouldContain("NmethodSweepFraction"); } } diff --git a/hotspot/test/runtime/CommandLine/VMAliasOptions.java b/hotspot/test/runtime/CommandLine/VMAliasOptions.java new file mode 100644 index 00000000000..fbb350611b3 --- /dev/null +++ b/hotspot/test/runtime/CommandLine/VMAliasOptions.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.*; +import jdk.test.lib.cli.*; + +/* + * @test + * @bug 8061611 + * @summary Test that various alias options correctly set the target options. See aliased_jvm_flags in arguments.cpp. + * @library /testlibrary + */ +public class VMAliasOptions { + + /** + * each entry is {[0]: alias name, [1]: alias target, [2]: value to set + * (true/false/n/string)}. + */ + public static final String[][] ALIAS_OPTIONS = { + {"DefaultMaxRAMFraction", "MaxRAMFraction", "1032"}, + {"CMSMarkStackSizeMax", "MarkStackSizeMax", "1032"}, + {"CMSMarkStackSize", "MarkStackSize", "1032"}, + {"G1MarkStackSize", "MarkStackSize", "1032"}, + {"ParallelMarkingThreads", "ConcGCThreads", "2"}, + {"ParallelCMSThreads", "ConcGCThreads", "2"}, + {"CreateMinidumpOnCrash", "CreateCoredumpOnCrash", "false" }, + }; + + static void testAliases(String[][] optionInfo) throws Throwable { + String aliasNames[] = new String[optionInfo.length]; + String optionNames[] = new String[optionInfo.length]; + String expectedValues[] = new String[optionInfo.length]; + for (int i = 0; i < optionInfo.length; i++) { + aliasNames[i] = optionInfo[i][0]; + optionNames[i] = optionInfo[i][1]; + expectedValues[i] = optionInfo[i][2]; + } + + OutputAnalyzer output = CommandLineOptionTest.startVMWithOptions(aliasNames, expectedValues, "-XX:+PrintFlagsFinal"); + CommandLineOptionTest.verifyOptionValuesFromOutput(output, optionNames, expectedValues); + } + + public static void main(String[] args) throws Throwable { + testAliases(ALIAS_OPTIONS); + } +} diff --git a/hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java b/hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java new file mode 100644 index 00000000000..969e93c16fc --- /dev/null +++ b/hotspot/test/runtime/CommandLine/VMDeprecatedOptions.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import jdk.test.lib.*; +import jdk.test.lib.cli.*; + +/* + * @test + * @bug 8066821 + * @summary Test that various options are deprecated. See deprecated_jvm_flags in arguments.cpp. + * @library /testlibrary + */ +public class VMDeprecatedOptions { + + /** + * each entry is {[0]: option name, [1]: value to set + * (true/false/n/string)}. + */ + public static final String[][] DEPRECATED_OPTIONS = { + // deprecated non-alias flags: + {"MaxGCMinorPauseMillis", "1032"}, + {"UseParNewGC", "false"}, + + // deprecated alias flags (see also aliased_jvm_flags): + {"DefaultMaxRAMFraction", "4"}, + {"CMSMarkStackSizeMax", "1032"}, + {"CMSMarkStackSize", "1032"}, + {"G1MarkStackSize", "1032"}, + {"ParallelMarkingThreads", "2"}, + {"ParallelCMSThreads", "2"}, + {"CreateMinidumpOnCrash", "false"} + }; + + static String getDeprecationString(String optionName) { + return "Option " + optionName + + " was deprecated in version [\\S]+ and will likely be removed in a future release"; + } + + static void testDeprecated(String[][] optionInfo) throws Throwable { + String optionNames[] = new String[optionInfo.length]; + String expectedValues[] = new String[optionInfo.length]; + for (int i = 0; i < optionInfo.length; i++) { + optionNames[i] = optionInfo[i][0]; + expectedValues[i] = optionInfo[i][1]; + } + + OutputAnalyzer output = CommandLineOptionTest.startVMWithOptions(optionNames, expectedValues); + + // check for option deprecation messages: + output.shouldHaveExitValue(0); + for (String[] deprecated : optionInfo) { + String match = getDeprecationString(deprecated[0]); + output.shouldMatch(match); + } + } + + public static void main(String[] args) throws Throwable { + testDeprecated(DEPRECATED_OPTIONS); // Make sure that each deprecated option is mentioned in the output. + } +} diff --git a/hotspot/test/runtime/NMT/AutoshutdownNMT.java b/hotspot/test/runtime/NMT/AutoshutdownNMT.java index 3d8fc2d4b18..c7bba5e63da 100644 --- a/hotspot/test/runtime/NMT/AutoshutdownNMT.java +++ b/hotspot/test/runtime/NMT/AutoshutdownNMT.java @@ -41,6 +41,6 @@ public class AutoshutdownNMT { "-XX:-AutoShutdownNMT", "-version"); OutputAnalyzer output = new OutputAnalyzer(pb.start()); - output.shouldContain("ignoring option AutoShutdownNMT"); + output.shouldContain("Ignoring option AutoShutdownNMT"); } } diff --git a/hotspot/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java b/hotspot/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java index d7eb3a21097..031d58a4b54 100644 --- a/hotspot/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java +++ b/hotspot/test/testlibrary/jdk/test/lib/cli/CommandLineOptionTest.java @@ -260,6 +260,73 @@ public abstract class CommandLineOptionTest { } } + /** + * Start VM with given options and values. + * Generates command line option flags from + * {@code optionNames} and {@code optionValues}. + * + * @param optionNames names of options to pass in + * @param optionValues values of option + * @param additionalVMOpts additional options that should be + * passed to JVM. + * @return output from vm process + */ + public static OutputAnalyzer startVMWithOptions(String[] optionNames, + String[] optionValues, + String... additionalVMOpts) throws Throwable { + List vmOpts = new ArrayList<>(); + if (optionNames == null || optionValues == null || optionNames.length != optionValues.length) { + throw new IllegalArgumentException("optionNames and/or optionValues"); + } + + for (int i = 0; i < optionNames.length; i++) { + vmOpts.add(prepareFlag(optionNames[i], optionValues[i])); + } + Collections.addAll(vmOpts, additionalVMOpts); + Collections.addAll(vmOpts, "-version"); + + ProcessBuilder processBuilder = ProcessTools.createJavaProcessBuilder( + vmOpts.toArray(new String[vmOpts.size()])); + + return new OutputAnalyzer(processBuilder.start()); + } + + /** + * Verifies from the output that values of specified JVM options were the same as + * expected values. + * + * @param outputAnalyzer search output for expect options and values. + * @param optionNames names of tested options. + * @param expectedValues expected values of tested options. + * @throws Throwable if verification fails or some other issues occur. + */ + public static void verifyOptionValuesFromOutput(OutputAnalyzer outputAnalyzer, + String[] optionNames, + String[] expectedValues) throws Throwable { + outputAnalyzer.shouldHaveExitValue(0); + for (int i = 0; i < optionNames.length; i++) { + outputAnalyzer.shouldMatch(String.format( + CommandLineOptionTest.PRINT_FLAGS_FINAL_FORMAT, + optionNames[i], expectedValues[i])); + } + } + + /** + * Verifies that value of specified JVM options are the same as + * expected values. + * Generates command line option flags from + * {@code optionNames} and {@code expectedValues}. + * + * @param optionNames names of tested options. + * @param expectedValues expected values of tested options. + * @throws Throwable if verification fails or some other issues occur. + */ + public static void verifyOptionValues(String[] optionNames, + String[] expectedValues) throws Throwable { + OutputAnalyzer outputAnalyzer = startVMWithOptions(optionNames, expectedValues, "-XX:+PrintFlagsFinal"); + verifyOptionValuesFromOutput(outputAnalyzer, optionNames, expectedValues); + } + /** * Verifies that value of specified JVM when type of newly started VM * is the same as the type of current. @@ -311,6 +378,24 @@ public abstract class CommandLineOptionTest { return String.format("-XX:%s=%s", name, value.toString()); } + /** + * Prepares generic command line flag with name {@code name} by setting + * it's value to {@code value}. + * + * @param name the name of option to be prepared + * @param value the value of option ("+" or "-" can be used instead of "true" or "false") + * @return prepared command line flag + */ + public static String prepareFlag(String name, String value) { + if (value.equals("+") || value.equalsIgnoreCase("true")) { + return "-XX:+" + name; + } else if (value.equals("-") || value.equalsIgnoreCase("false")) { + return "-XX:-" + name; + } else { + return "-XX:" + name + "=" + value; + } + } + /** * Returns message that should occur in VM output if option * {@code optionName} if unrecognized. From 1890d7a430e77540598dbaf024fce066179c0080 Mon Sep 17 00:00:00 2001 From: Harold Seigel Date: Tue, 22 Sep 2015 09:48:19 -0400 Subject: [PATCH 08/17] 8135208: VM permits illegal access_flags, versions 51-52 Check access flags for methods that are not class init methods. Reviewed-by: kamg, gtriantafill --- hotspot/src/share/vm/classfile/classFileParser.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp index 3b2f8999c8f..5f17e00415f 100644 --- a/hotspot/src/share/vm/classfile/classFileParser.cpp +++ b/hotspot/src/share/vm/classfile/classFileParser.cpp @@ -1989,6 +1989,10 @@ methodHandle ClassFileParser::parse_method(bool is_interface, flags = JVM_ACC_STATIC; } else if ((flags & JVM_ACC_STATIC) == JVM_ACC_STATIC) { flags &= JVM_ACC_STATIC | JVM_ACC_STRICT; + } else { + // As of major_version 51, a method named without ACC_STATIC is + // just another method. So, do a normal method modifer check. + verify_legal_method_modifiers(flags, is_interface, name, CHECK_(nullHandle)); } } else { verify_legal_method_modifiers(flags, is_interface, name, CHECK_(nullHandle)); From d01e8e3c74d8b0a9d543973eed2a78d5b3d1436e Mon Sep 17 00:00:00 2001 From: Harold Seigel Date: Tue, 22 Sep 2015 14:24:31 -0400 Subject: [PATCH 09/17] 8135265: VM fails on 'empty' interface public ()V method with VerifyError Don't check for calls to super() or this() fro ()V methods if they are in interfaces. Because, they are not ctors. Reviewed-by: acorn, gtriantafill --- hotspot/src/share/vm/classfile/verifier.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/classfile/verifier.cpp b/hotspot/src/share/vm/classfile/verifier.cpp index 6069422643d..a10ef7fc32d 100644 --- a/hotspot/src/share/vm/classfile/verifier.cpp +++ b/hotspot/src/share/vm/classfile/verifier.cpp @@ -1579,9 +1579,11 @@ void ClassVerifier::verify_method(methodHandle m, TRAPS) { return; } // Make sure "this" has been initialized if current method is an - // + // . Note that "" methods in interfaces are just + // normal methods. Interfaces cannot have ctors. if (_method->name() == vmSymbols::object_initializer_name() && - current_frame.flag_this_uninit()) { + current_frame.flag_this_uninit() && + !current_class()->is_interface()) { verify_error(ErrorContext::bad_code(bci), "Constructor must call super() or this() " "before return"); From c28cba034602f9b8fb3adf25267124f63684662b Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Mon, 28 Sep 2015 09:52:19 +0200 Subject: [PATCH 10/17] 8137088: Drop building of interim_java.corba Reviewed-by: alanb, ihse --- common/autoconf/spec.gmk.in | 3 --- make/Main.gmk | 11 +++-------- make/common/RMICompilation.gmk | 11 ----------- 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 94010d215a6..12e5be702f8 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -461,9 +461,6 @@ INTERIM_LANGTOOLS_ARGS = "-Xbootclasspath/p:$(INTERIM_LANGTOOLS_JAR)" -cp $(INTE NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javac.Main NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) com.sun.tools.javadoc.Main -# The interim corba jar is needed for running rmic -INTERIM_CORBA_JAR = $(BUILDTOOLS_OUTPUTDIR)/interim_corba.jar - # Base flags for RC # Guarding this against resetting value. Legacy make files include spec multiple # times. diff --git a/make/Main.gmk b/make/Main.gmk index 3f30e9b7fe4..5e842fdebcd 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -72,9 +72,6 @@ buildtools-langtools: interim-langtools: +($(CD) $(LANGTOOLS_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk) -interim-corba: - +($(CD) $(CORBA_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterim.gmk) - interim-rmic: +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f CompileInterimRmic.gmk) @@ -84,7 +81,7 @@ interim-cldrconverter: buildtools-jdk: +($(CD) $(JDK_TOPDIR)/make && $(MAKE) $(MAKE_ARGS) -f Tools.gmk java-tools) -ALL_TARGETS += buildtools-langtools interim-langtools interim-corba \ +ALL_TARGETS += buildtools-langtools interim-langtools \ interim-rmic interim-cldrconverter buildtools-jdk ################################################################################ @@ -357,13 +354,11 @@ else $(JDK_GENSRC_TARGETS): interim-langtools buildtools-jdk - interim-corba: $(CORBA_GENSRC_TARGETS) - $(GENDATA_TARGETS): interim-langtools buildtools-jdk interim-rmic: interim-langtools - $(RMIC_TARGETS): interim-langtools interim-corba interim-rmic + $(RMIC_TARGETS): interim-langtools interim-rmic $(JAVA_TARGETS): interim-langtools @@ -463,7 +458,7 @@ endif ################################################################################ # Virtual targets without recipes -buildtools: buildtools-langtools interim-langtools interim-corba interim-rmic \ +buildtools: buildtools-langtools interim-langtools interim-rmic \ buildtools-jdk gensrc: $(GENSRC_TARGETS) diff --git a/make/common/RMICompilation.gmk b/make/common/RMICompilation.gmk index 0e67f91d2ff..1ae79734854 100644 --- a/make/common/RMICompilation.gmk +++ b/make/common/RMICompilation.gmk @@ -34,8 +34,6 @@ # STUB_CLASSES_DIR:=Directory in where to put stub classes # RUN_V11:=Set to run rmic with -v1.1 # RUN_V12:=Set to run rmic with -v1.2 -# RUN_IIOP:=Set to run rmic with -iiop -# RUN_IIOP_STDPKG:=Set to run rmic with -iiop -standardPackage # KEEP_GENERATED:=Set to keep generated sources around SetupRMICompilation = $(NamedParamsMacroTemplate) define SetupRMICompilationBody @@ -60,15 +58,6 @@ define SetupRMICompilationBody $1_TIE_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/org/omg/stub/,$$(addsuffix _Tie.class,$$($1_TIE_BASE_FILES))) $1_TIE_STDPKG_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Tie.class,$$($1_TIE_BASE_FILES))) - ifneq (,$$($1_RUN_IIOP)) - $1_TARGETS += $$($1_TIE_FILES) - $1_ARGS += -iiop -emitPermissionCheck - endif - ifneq (,$$($1_RUN_IIOP_STDPKG)) - $1_TARGETS += $$($1_TIE_STDPKG_FILES) - $1_ARGS2 := -iiop -emitPermissionCheck -standardPackage - endif - ifneq (,$$($1_KEEP_GENERATED)) $1_ARGS += -keepgenerated $1_TARGETS += $$(subst .class,.java,$$($1_TARGETS)) From 8b5e47f2c854be9c9bbcc09eba4f8300f5a79805 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Mon, 28 Sep 2015 11:39:13 +0200 Subject: [PATCH 11/17] 8136385: Various build speed improvements for windows Reviewed-by: ihse --- make/common/JavaCompilation.gmk | 26 ++- make/common/MakeBase.gmk | 348 +++++++++--------------------- make/common/NativeCompilation.gmk | 38 ++-- test/make/TestMakeBase.gmk | 19 +- 4 files changed, 139 insertions(+), 292 deletions(-) diff --git a/make/common/JavaCompilation.gmk b/make/common/JavaCompilation.gmk index 0e3ec13642c..8ced9d558c6 100644 --- a/make/common/JavaCompilation.gmk +++ b/make/common/JavaCompilation.gmk @@ -122,9 +122,9 @@ define SetupArchiveBody $1_GREP_INCLUDES:=| ( $(GREP) $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_INCLUDE_PATTERNS)) \ || test "$$$$?" = "1" ) else - $1_GREP_INCLUDE_OUTPUT:=$(RM) $$($1_BIN)/_the.$$($1_JARNAME)_include $$(NEWLINE) \ - $$(call ListPathsSafely,$1_GREP_INCLUDE_PATTERNS,\n, \ - >> $$($1_BIN)/_the.$$($1_JARNAME)_include) + $1_GREP_INCLUDE_OUTPUT = \ + $$(eval $$(call ListPathsSafely,$1_GREP_INCLUDE_PATTERNS, \ + $$($1_BIN)/_the.$$($1_JARNAME)_include)) $1_GREP_INCLUDES:=| ( $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include \ || test "$$$$?" = "1" ) endif @@ -138,9 +138,9 @@ define SetupArchiveBody $1_GREP_EXCLUDES:=| ( $(GREP) -v $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_EXCLUDE_PATTERNS)) \ || test "$$$$?" = "1" ) else - $1_GREP_EXCLUDE_OUTPUT=$(RM) $$($1_BIN)/_the.$$($1_JARNAME)_exclude $$(NEWLINE) \ - $$(call ListPathsSafely,$1_GREP_EXCLUDE_PATTERNS,\n, \ - >> $$($1_BIN)/_the.$$($1_JARNAME)_exclude) + $1_GREP_EXCLUDE_OUTPUT = \ + $$(eval $$(call ListPathsSafely,$1_GREP_EXCLUDE_PATTERNS, \ + $$($1_BIN)/_the.$$($1_JARNAME)_exclude)) $1_GREP_EXCLUDES:=| ( $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude \ || test "$$$$?" = "1" ) endif @@ -190,13 +190,12 @@ define SetupArchiveBody # The EXTRA_FILES_RESOLVED varible must be set in the macro so that it's evaluated # in the recipe when the files are guaranteed to exist. $1_CAPTURE_EXTRA_FILES=\ - $(RM) $$($1_BIN)/_the.$$($1_JARNAME)_contents.extra $$(NEWLINE) \ - $$(eval $1_EXTRA_FILES_RESOLVED:=$$(call DoubleDollar, $$(call DoubleDollar, \ + $$(eval $1_EXTRA_FILES_RESOLVED:=$$(call DoubleDollar, \ $$(wildcard $$(foreach src, $$($1_SRCS), \ - $$(addprefix $$(src)/, $$($1_EXTRA_FILES))) $$($1_EXTRA_FILES))))) \ + $$(addprefix $$(src)/, $$($1_EXTRA_FILES))) $$($1_EXTRA_FILES)))) \ $$(if $$($1_EXTRA_FILES_RESOLVED), \ - $$(call ListPathsSafely,$1_EXTRA_FILES_RESOLVED,\n, \ - >> $$($1_BIN)/_the.$$($1_JARNAME)_contents.extra) $$(NEWLINE) \ + $$(eval $$(call ListPathsSafely,$1_EXTRA_FILES_RESOLVED, \ + $$($1_BIN)/_the.$$($1_JARNAME)_contents.extra)) \ $(SED) $$(foreach src,$$($1_SRCS), -e 's|$$(src)/|-C $$(src) |g') \ $$($1_BIN)/_the.$$($1_JARNAME)_contents.extra \ >> $$($1_BIN)/_the.$$($1_JARNAME)_contents $$(NEWLINE)) @@ -577,7 +576,7 @@ define SetupJavaCompilationBody $$($1_BIN)/_the.$1_batch: $$($1_SRCS) $$($1_DEPENDS) $$($1_VARDEPS_FILE) $(MKDIR) -p $$(@D) $$(dir $$($1_SJAVAC_PORTFILE)) - $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.$1_batch.tmp) + $$(eval $$(call ListPathsSafely,$1_SRCS, $$($1_BIN)/_the.$1_batch.tmp)) $(ECHO) Compiling $1 $(call LogFailures, $$($1_BIN)/_the.$$($1_SAFE_NAME)_batch.log, $$($1_SAFE_NAME), \ $$($1_JVM) $$($1_SJAVAC) \ @@ -636,8 +635,7 @@ define SetupJavaCompilationBody # When not using sjavac, pass along all sources to javac using an @file. $$($1_BIN)/_the.$1_batch: $$($1_SRCS) $$($1_DEPENDS) $$($1_VARDEPS_FILE) $(MKDIR) -p $$(@D) - $(RM) $$($1_BIN)/_the.$1_batch $$($1_BIN)/_the.$1_batch.tmp - $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.$1_batch.tmp) + $$(eval $$(call ListPathsSafely,$1_SRCS, $$($1_BIN)/_the.$1_batch.tmp)) $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.$1_batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files for $1 $(call LogFailures, $$($1_BIN)/_the.$$($1_SAFE_NAME)_batch.log, $$($1_SAFE_NAME), \ $$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) \ diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index ea975f0e4fd..ca1de4e12cf 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -64,6 +64,11 @@ define NEWLINE endef +# In GNU Make 4.0 and higher, there is a file function for writing to files. +ifeq (4.0, $(firstword $(sort 4.0 $(MAKE_VERSION)))) + HAS_FILE_FUNCTION := true +endif + ############################## # Functions ############################## @@ -122,266 +127,111 @@ EscapeDollar = $(subst $$,\$$,$(subst \$$,$$,$(strip $1))) DoubleDollar = $(subst $$,$$$$,$(strip $1)) ################################################################################ +# ListPathsSafely can be used to print command parameters to a file. This is +# typically done if the command line lenght risk being too long for the +# OS/shell. In later make versions, the file function can be used for this +# purpose. For earlier versions, a more complex implementation is provided. +# +# The function ListPathsSafely can be called either directly or, more commonly +# from a recipe line. If called from a recipe, it will be executed in the +# evaluation phase of that recipe, which means that it will write to the file +# before any other line in the recipe has been run. +ifeq ($(HAS_FILE_FUNCTION), true) + # Param 1 - Name of variable containing paths/arguments to output + # Param 2 - File to print to + # Param 3 - Set to true to append to file instead of overwriting + define ListPathsSafely + $$(call MakeDir, $$(dir $$(strip $2))) + $$(file $$(if $$(filter true, $$(strip $3)),>>,>) \ + $$(strip $2),$$(subst $$(SPACE),$$(NEWLINE),$$(strip $$($$(strip $1))))) + endef -# If the variable that you want to send to stdout for piping into a file or otherwise, -# is potentially long, for example the a list of file paths, eg a list of all package directories. -# Then you need to use ListPathsSafely, which optimistically splits the output into several shell -# calls as well as use compression on recurrent file paths segments, to get around the potential -# command line length problem that exists in cygwin and other shells. -compress_pre:=$(strip $(shell $(CAT) $(SRC_ROOT)/make/common/support/ListPathsSafely-pre-compress.incl)) -compress_post:=$(strip $(shell $(CAT) $(SRC_ROOT)/make/common/support/ListPathsSafely-post-compress.incl)) -compress_paths=$(compress_pre)\ +else # HAS_FILE_FUNCTION + + $(eval compress_paths = \ + $(strip $(shell $(CAT) $(SRC_ROOT)/make/common/support/ListPathsSafely-pre-compress.incl))) + compress_paths += \ $(subst $(SRC_ROOT),X97,\ $(subst $(OUTPUT_ROOT),X98,\ $(subst X,X00,\ -$(subst $(SPACE),\n,$(strip $1)))))\ -$(compress_post) + $(subst $(SPACE),\n,$(strip $1))))) + $(eval compress_paths += \ + $(strip $(shell $(CAT) $(SRC_ROOT)/make/common/support/ListPathsSafely-post-compress.incl))) -decompress_paths=$(SED) -f $(SRC_ROOT)/make/common/support/ListPathsSafely-uncompress.sed -e 's|X99|\\n|g' \ + decompress_paths=$(SED) -f $(SRC_ROOT)/make/common/support/ListPathsSafely-uncompress.sed \ + -e 's|X99|\\n|g' \ -e 's|X98|$(OUTPUT_ROOT)|g' -e 's|X97|$(SRC_ROOT)|g' \ - -e 's|X00|X|g' | tr '\n' '$2' + -e 's|X00|X|g' -define ListPathsSafely_If - $(if $(word $3,$($1)),$(eval $1_LPS$3:=$(call compress_paths,$(wordlist $3,$4,$($1))))) -endef + ListPathsSafely_IfPrintf = \ + $(if $(word $3,$($(strip $1))), \ + $(shell $(PRINTF) -- "$(strip $(call EscapeDollar, \ + $(call compress_paths, $(wordlist $3,$4,$($(strip $1))))))\n" \ + | $(decompress_paths) >> $2)) -define ListPathsSafely_Printf - $(if $(strip $($1_LPS$4)),$(if $(findstring $(LOG_LEVEL),trace),,@)printf \ - -- "$(strip $(call EscapeDollar, $($1_LPS$4)))\n" | $(decompress_paths) $3) -endef - -# Receipt example: -# rm -f thepaths -# $(call ListPathsSafely,THEPATHS,\n, >> thepaths) -# The \n argument means translate spaces into \n -# if instead , , (a space) is supplied, then spaces remain spaces. + # Param 1 - Name of variable containing paths/arguments to output + # Param 2 - File to print to + # Param 3 - Set to true to append to file instead of overwriting define ListPathsSafely - $(if $(word 16001,$($1)),$(error Cannot list safely more than 16000 paths. $1 has $(words $($1)) paths!)) - $(ECHO) $(LOG_DEBUG) Writing $(words $($1)) paths to '$3' - $(call ListPathsSafely_If,$1,$2,1,250) - $(call ListPathsSafely_If,$1,$2,251,500) - $(call ListPathsSafely_If,$1,$2,501,750) - $(call ListPathsSafely_If,$1,$2,751,1000) - - $(call ListPathsSafely_If,$1,$2,1001,1250) - $(call ListPathsSafely_If,$1,$2,1251,1500) - $(call ListPathsSafely_If,$1,$2,1501,1750) - $(call ListPathsSafely_If,$1,$2,1751,2000) - - $(call ListPathsSafely_If,$1,$2,2001,2250) - $(call ListPathsSafely_If,$1,$2,2251,2500) - $(call ListPathsSafely_If,$1,$2,2501,2750) - $(call ListPathsSafely_If,$1,$2,2751,3000) - - $(call ListPathsSafely_If,$1,$2,3001,3250) - $(call ListPathsSafely_If,$1,$2,3251,3500) - $(call ListPathsSafely_If,$1,$2,3501,3750) - $(call ListPathsSafely_If,$1,$2,3751,4000) - - $(call ListPathsSafely_If,$1,$2,4001,4250) - $(call ListPathsSafely_If,$1,$2,4251,4500) - $(call ListPathsSafely_If,$1,$2,4501,4750) - $(call ListPathsSafely_If,$1,$2,4751,5000) - - $(call ListPathsSafely_If,$1,$2,5001,5250) - $(call ListPathsSafely_If,$1,$2,5251,5500) - $(call ListPathsSafely_If,$1,$2,5501,5750) - $(call ListPathsSafely_If,$1,$2,5751,6000) - - $(call ListPathsSafely_If,$1,$2,6001,6250) - $(call ListPathsSafely_If,$1,$2,6251,6500) - $(call ListPathsSafely_If,$1,$2,6501,6750) - $(call ListPathsSafely_If,$1,$2,6751,7000) - - $(call ListPathsSafely_If,$1,$2,7001,7250) - $(call ListPathsSafely_If,$1,$2,7251,7500) - $(call ListPathsSafely_If,$1,$2,7501,7750) - $(call ListPathsSafely_If,$1,$2,7751,8000) - - $(call ListPathsSafely_If,$1,$2,8001,8250) - $(call ListPathsSafely_If,$1,$2,8251,8500) - $(call ListPathsSafely_If,$1,$2,8501,8750) - $(call ListPathsSafely_If,$1,$2,8751,9000) - - $(call ListPathsSafely_If,$1,$2,9001,9250) - $(call ListPathsSafely_If,$1,$2,9251,9500) - $(call ListPathsSafely_If,$1,$2,9501,9750) - $(call ListPathsSafely_If,$1,$2,9751,10000) - - $(call ListPathsSafely_If,$1,$2,10001,10250) - $(call ListPathsSafely_If,$1,$2,10251,10500) - $(call ListPathsSafely_If,$1,$2,10501,10750) - $(call ListPathsSafely_If,$1,$2,10751,11000) - - $(call ListPathsSafely_If,$1,$2,11001,11250) - $(call ListPathsSafely_If,$1,$2,11251,11500) - $(call ListPathsSafely_If,$1,$2,11501,11750) - $(call ListPathsSafely_If,$1,$2,11751,12000) - - $(call ListPathsSafely_If,$1,$2,12001,12250) - $(call ListPathsSafely_If,$1,$2,12251,12500) - $(call ListPathsSafely_If,$1,$2,12501,12750) - $(call ListPathsSafely_If,$1,$2,12751,13000) - - $(call ListPathsSafely_If,$1,$2,13001,13250) - $(call ListPathsSafely_If,$1,$2,13251,13500) - $(call ListPathsSafely_If,$1,$2,13501,13750) - $(call ListPathsSafely_If,$1,$2,13751,14000) - - $(call ListPathsSafely_If,$1,$2,14001,14250) - $(call ListPathsSafely_If,$1,$2,14251,14500) - $(call ListPathsSafely_If,$1,$2,14501,14750) - $(call ListPathsSafely_If,$1,$2,14751,15000) - - $(call ListPathsSafely_If,$1,$2,15001,15250) - $(call ListPathsSafely_If,$1,$2,15251,15500) - $(call ListPathsSafely_If,$1,$2,15501,15750) - $(call ListPathsSafely_If,$1,$2,15751,16000) - - $(call ListPathsSafely_Printf,$1,$2,$3,1) - $(call ListPathsSafely_Printf,$1,$2,$3,251) - $(call ListPathsSafely_Printf,$1,$2,$3,501) - $(call ListPathsSafely_Printf,$1,$2,$3,751) - - $(call ListPathsSafely_Printf,$1,$2,$3,1001) - $(call ListPathsSafely_Printf,$1,$2,$3,1251) - $(call ListPathsSafely_Printf,$1,$2,$3,1501) - $(call ListPathsSafely_Printf,$1,$2,$3,1751) - - $(call ListPathsSafely_Printf,$1,$2,$3,2001) - $(call ListPathsSafely_Printf,$1,$2,$3,2251) - $(call ListPathsSafely_Printf,$1,$2,$3,2501) - $(call ListPathsSafely_Printf,$1,$2,$3,2751) - - $(call ListPathsSafely_Printf,$1,$2,$3,3001) - $(call ListPathsSafely_Printf,$1,$2,$3,3251) - $(call ListPathsSafely_Printf,$1,$2,$3,3501) - $(call ListPathsSafely_Printf,$1,$2,$3,3751) - - $(call ListPathsSafely_Printf,$1,$2,$3,4001) - $(call ListPathsSafely_Printf,$1,$2,$3,4251) - $(call ListPathsSafely_Printf,$1,$2,$3,4501) - $(call ListPathsSafely_Printf,$1,$2,$3,4751) - - $(call ListPathsSafely_Printf,$1,$2,$3,5001) - $(call ListPathsSafely_Printf,$1,$2,$3,5251) - $(call ListPathsSafely_Printf,$1,$2,$3,5501) - $(call ListPathsSafely_Printf,$1,$2,$3,5751) - - $(call ListPathsSafely_Printf,$1,$2,$3,6001) - $(call ListPathsSafely_Printf,$1,$2,$3,6251) - $(call ListPathsSafely_Printf,$1,$2,$3,6501) - $(call ListPathsSafely_Printf,$1,$2,$3,6751) - - $(call ListPathsSafely_Printf,$1,$2,$3,7001) - $(call ListPathsSafely_Printf,$1,$2,$3,7251) - $(call ListPathsSafely_Printf,$1,$2,$3,7501) - $(call ListPathsSafely_Printf,$1,$2,$3,7751) - - $(call ListPathsSafely_Printf,$1,$2,$3,8001) - $(call ListPathsSafely_Printf,$1,$2,$3,8251) - $(call ListPathsSafely_Printf,$1,$2,$3,8501) - $(call ListPathsSafely_Printf,$1,$2,$3,8751) - - $(call ListPathsSafely_Printf,$1,$2,$3,9001) - $(call ListPathsSafely_Printf,$1,$2,$3,9251) - $(call ListPathsSafely_Printf,$1,$2,$3,9501) - $(call ListPathsSafely_Printf,$1,$2,$3,9751) - - $(call ListPathsSafely_Printf,$1,$2,$3,10001) - $(call ListPathsSafely_Printf,$1,$2,$3,10251) - $(call ListPathsSafely_Printf,$1,$2,$3,10501) - $(call ListPathsSafely_Printf,$1,$2,$3,10751) - - $(call ListPathsSafely_Printf,$1,$2,$3,11001) - $(call ListPathsSafely_Printf,$1,$2,$3,11251) - $(call ListPathsSafely_Printf,$1,$2,$3,11501) - $(call ListPathsSafely_Printf,$1,$2,$3,11751) - - $(call ListPathsSafely_Printf,$1,$2,$3,12001) - $(call ListPathsSafely_Printf,$1,$2,$3,12251) - $(call ListPathsSafely_Printf,$1,$2,$3,12501) - $(call ListPathsSafely_Printf,$1,$2,$3,12751) - - $(call ListPathsSafely_Printf,$1,$2,$3,13001) - $(call ListPathsSafely_Printf,$1,$2,$3,13251) - $(call ListPathsSafely_Printf,$1,$2,$3,13501) - $(call ListPathsSafely_Printf,$1,$2,$3,13751) - - $(call ListPathsSafely_Printf,$1,$2,$3,14001) - $(call ListPathsSafely_Printf,$1,$2,$3,14251) - $(call ListPathsSafely_Printf,$1,$2,$3,14501) - $(call ListPathsSafely_Printf,$1,$2,$3,14751) - - $(call ListPathsSafely_Printf,$1,$2,$3,15001) - $(call ListPathsSafely_Printf,$1,$2,$3,15251) - $(call ListPathsSafely_Printf,$1,$2,$3,15501) - $(call ListPathsSafely_Printf,$1,$2,$3,15751) -endef - -define ListPathsSafelyNow_IfPrintf - ifneq (,$$(word $4,$$($1))) - $$(eval $1_LPS$4:=$$(call compress_paths,$$(wordlist $4,$5,$$($1)))) - $$(shell printf -- "$$(strip $$($1_LPS$4))\n" | $(decompress_paths) $3) - endif -endef - -# And an non-receipt version: -define ListPathsSafelyNow ifneq (,$$(word 10001,$$($1))) $$(error Cannot list safely more than 10000 paths. $1 has $$(words $$($1)) paths!) endif - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1,250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,251,500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,501,750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,751,1000) + $$(call MakeDir, $$(dir $2)) + ifneq ($$(strip $3), true) + $$(shell $(RM) $$(strip $2)) + endif - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1001,1250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1251,1500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1501,1750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1751,2000) + $$(call ListPathsSafely_IfPrintf,$1,$2,1,250) + $$(call ListPathsSafely_IfPrintf,$1,$2,251,500) + $$(call ListPathsSafely_IfPrintf,$1,$2,501,750) + $$(call ListPathsSafely_IfPrintf,$1,$2,751,1000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2001,2250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2251,2500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2501,2750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2751,3000) + $$(call ListPathsSafely_IfPrintf,$1,$2,1001,1250) + $$(call ListPathsSafely_IfPrintf,$1,$2,1251,1500) + $$(call ListPathsSafely_IfPrintf,$1,$2,1501,1750) + $$(call ListPathsSafely_IfPrintf,$1,$2,1751,2000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3001,3250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3251,3500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3501,3750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3751,4000) + $$(call ListPathsSafely_IfPrintf,$1,$2,2001,2250) + $$(call ListPathsSafely_IfPrintf,$1,$2,2251,2500) + $$(call ListPathsSafely_IfPrintf,$1,$2,2501,2750) + $$(call ListPathsSafely_IfPrintf,$1,$2,2751,3000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4001,4250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4251,4500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4501,4750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4751,5000) + $$(call ListPathsSafely_IfPrintf,$1,$2,3001,3250) + $$(call ListPathsSafely_IfPrintf,$1,$2,3251,3500) + $$(call ListPathsSafely_IfPrintf,$1,$2,3501,3750) + $$(call ListPathsSafely_IfPrintf,$1,$2,3751,4000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5001,5250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5251,5500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5501,5750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5751,6000) + $$(call ListPathsSafely_IfPrintf,$1,$2,4001,4250) + $$(call ListPathsSafely_IfPrintf,$1,$2,4251,4500) + $$(call ListPathsSafely_IfPrintf,$1,$2,4501,4750) + $$(call ListPathsSafely_IfPrintf,$1,$2,4751,5000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6001,6250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6251,6500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6501,6750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6751,7000) + $$(call ListPathsSafely_IfPrintf,$1,$2,5001,5250) + $$(call ListPathsSafely_IfPrintf,$1,$2,5251,5500) + $$(call ListPathsSafely_IfPrintf,$1,$2,5501,5750) + $$(call ListPathsSafely_IfPrintf,$1,$2,5751,6000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7001,7250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7251,7500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7501,7750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7751,8000) + $$(call ListPathsSafely_IfPrintf,$1,$2,6001,6250) + $$(call ListPathsSafely_IfPrintf,$1,$2,6251,6500) + $$(call ListPathsSafely_IfPrintf,$1,$2,6501,6750) + $$(call ListPathsSafely_IfPrintf,$1,$2,6751,7000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8001,8250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8251,8500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8501,8750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8751,9000) + $$(call ListPathsSafely_IfPrintf,$1,$2,7001,7250) + $$(call ListPathsSafely_IfPrintf,$1,$2,7251,7500) + $$(call ListPathsSafely_IfPrintf,$1,$2,7501,7750) + $$(call ListPathsSafely_IfPrintf,$1,$2,7751,8000) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9001,9250) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9251,9500) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9501,9750) - $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9751,10000) + $$(call ListPathsSafely_IfPrintf,$1,$2,8001,8250) + $$(call ListPathsSafely_IfPrintf,$1,$2,8251,8500) + $$(call ListPathsSafely_IfPrintf,$1,$2,8501,8750) + $$(call ListPathsSafely_IfPrintf,$1,$2,8751,9000) + $$(call ListPathsSafely_IfPrintf,$1,$2,9001,9250) + $$(call ListPathsSafely_IfPrintf,$1,$2,9251,9500) + $$(call ListPathsSafely_IfPrintf,$1,$2,9501,9750) + $$(call ListPathsSafely_IfPrintf,$1,$2,9751,10000) endef +endif # HAS_FILE_FUNCTION # The source tips can come from the Mercurial repository, or in the files # $(HGTIP_FILENAME) which contains the tip but is also positioned in the same @@ -727,9 +577,14 @@ ReadFile = \ # Param 1 - Text to write # Param 2 - File to write to +ifeq ($(HAS_FILE_FUNCTION), true) + WriteFile = \ + $(file >$2,$(strip $1)) +else # Use printf to get consistent behavior on all platforms. WriteFile = \ $(shell $(PRINTF) "%s" $(call ShellQuote, $1) > $2) +endif ################################################################################ # DependOnVariable @@ -767,15 +622,16 @@ DependOnVariableFileName = \ # Param 1 - Name of variable # Param 2 - (optional) name of file to store value in DependOnVariableHelper = \ - $(strip $(if $(and $(wildcard $(call DependOnVariableFileName, $1, $2)),\ - $(call equals, $(strip $($1)), \ - $(call ReadFile, $(call DependOnVariableFileName, $1, $2)))),,\ - $(call MakeDir, $(dir $(call DependOnVariableFileName, $1, $2))) \ - $(if $(findstring $(LOG_LEVEL), trace), \ - $(info Variable $1: >$(strip $($1))<) \ - $(info File: >$(call ReadFile, $(call DependOnVariableFileName, $1, $2))<)) \ - $(call WriteFile, $($1), $(call DependOnVariableFileName, $1, $2))) \ - $(call DependOnVariableFileName, $1, $2)) + $(strip \ + $(eval -include $(call DependOnVariableFileName, $1, $2)) \ + $(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\ + $(call MakeDir, $(dir $(call DependOnVariableFileName, $1, $2))) \ + $(if $(findstring $(LOG_LEVEL), trace), \ + $(info NewVariable $1: >$(strip $($1))<) \ + $(info OldVariable $1: >$(strip $($1_old))<)) \ + $(call WriteFile, $1_old:=$($1), $(call DependOnVariableFileName, $1, $2))) \ + $(call DependOnVariableFileName, $1, $2) \ + ) # Main macro # Param 1 - Name of variable diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index 4ae2fc8c47e..75782334f10 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -211,23 +211,25 @@ define add_native_source $(call LogFailures, $$($1_$2_OBJ).log, $$($1_SAFE_NAME)_$$(notdir $2), \ $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2) endif + # Create a dependency target file from the dependency file. + # Solution suggested by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ + ifneq ($$($1_$2_DEP),) + $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) > $$($1_$2_DEP_TARGETS) + endif else # The Visual Studio compiler lacks a feature for generating make dependencies, but by # setting -showIncludes, all included files are printed. These are filtered out and # parsed into make dependences. + # Keep as much as possible on one execution line for best performance on Windows ($(call LogFailures, $$($1_$2_OBJ).log, $$($1_SAFE_NAME)_$$(notdir $2), \ $$($1_$2_COMP) $$($1_$2_FLAGS) -showIncludes $$($1_$2_DEBUG_OUT_FLAGS) \ $(CC_OUT_OPTION)$$($1_$2_OBJ) $2) ; echo $$$$? > $$($1_$2_DEP).exitvalue) \ | $(TEE) $$($1_$2_DEP).raw | $(GREP) -v -e "^Note: including file:" \ -e "^$(notdir $2)$$$$" || test "$$$$?" = "1" ; \ - exit `cat $$($1_$2_DEP).exitvalue` - $(RM) $$($1_$2_DEP).exitvalue - ($(ECHO) $$@: \\ \ - && $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_$2_DEP).raw) | $(SORT) -u > $$($1_$2_DEP) - endif - # Create a dependency target file from the dependency file. - # Solution suggested by http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/ - ifneq ($$($1_$2_DEP),) + exit `cat $$($1_$2_DEP).exitvalue` ; \ + $(RM) $$($1_$2_DEP).exitvalue ; \\ + ($(ECHO) $$@: \\ ; \ + $(SED) $(WINDOWS_SHOWINCLUDE_SED_PATTERN) $$($1_$2_DEP).raw) | $(SORT) -u > $$($1_$2_DEP) ; \ $(SED) $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) > $$($1_$2_DEP_TARGETS) endif endif @@ -628,6 +630,10 @@ define SetupNativeCompilationBody "-map:$$($1_OBJECT_DIR)/$$($1_NOSUFFIX).map" $1_DEBUGINFO_FILES := $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).pdb \ $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).map + # No separate command is needed for debuginfo on windows, instead + # touch target to make sure it has a later time stamp than the debug + # symbol files to avoid unnecessary relinking on rebuild. + $1_CREATE_DEBUGINFO_CMDS := $(TOUCH) $$($1_TARGET) else ifneq ($(findstring $(OPENJDK_TARGET_OS), linux solaris), ) $1_DEBUGINFO_FILES := $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).debuginfo @@ -678,18 +684,13 @@ define SetupNativeCompilationBody $$($1_TARGET): $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_REAL_MAPFILE) \ $$($1_VARDEPS_FILE) - $(ECHO) $(LOG_INFO) "Linking $$($1_BASENAME)" + $(ECHO) $(LOG_INFO) "Linking $$($1_BASENAME)" ; \ $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ $(LD_OUT_OPTION)$$@ \ $$($1_EXPECTED_OBJS) $$($1_RES) \ - $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)) + $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)) ; \ $$($1_CREATE_DEBUGINFO_CMDS) - # Touch target to make sure it has a later time stamp than the debug - # symbol files to avoid unnecessary relinking on rebuild. - ifeq ($(OPENJDK_TARGET_OS), windows) - $(TOUCH) $$@ - endif endif @@ -719,7 +720,7 @@ define SetupNativeCompilationBody $$($1_TARGET): $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_MANIFEST) \ $$($1_VARDEPS_FILE) - $(ECHO) $(LOG_INFO) "Linking executable $$($1_BASENAME)" + $(ECHO) $(LOG_INFO) "Linking executable $$($1_BASENAME)" ; \ $(call LogFailures, $$($1_OBJECT_DIR)/$$($1_SAFE_NAME)_link.log, $$($1_SAFE_NAME)_link, \ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $$($1_SYSROOT_LDFLAGS) \ $(EXE_OUT_OPTION)$$($1_TARGET) \ @@ -738,11 +739,6 @@ define SetupNativeCompilationBody endif endif $$($1_CREATE_DEBUGINFO_CMDS) - # Touch target to make sure it has a later time stamp than the debug - # symbol files to avoid unnecessary relinking on rebuild. - ifeq ($(OPENJDK_TARGET_OS), windows) - $(TOUCH) $$@ - endif endif endef diff --git a/test/make/TestMakeBase.gmk b/test/make/TestMakeBase.gmk index 443f364841b..7e02e4e131d 100644 --- a/test/make/TestMakeBase.gmk +++ b/test/make/TestMakeBase.gmk @@ -213,23 +213,20 @@ VARDEP_VALUE_FILE := $(VARDEP_DIR)/value-file VARDEP_TEST_VAR2 := value3 VARDEP_RETURN_VALUE := $(call DependOnVariable, VARDEP_TEST_VAR2, $(VARDEP_VALUE_FILE)) -ifneq ($(VARDEP_VALUE_FILE), $(VARDEP_RETURN_VALUE)) - $(error Expected: $(VARDEP_VALUE_FILE) - DependOnVariable: $(VARDEP_RETURN_VALUE)) -endif +$(eval $(call assert-equals, $(VARDEP_RETURN_VALUE), $(VARDEP_VALUE_FILE), \ + Wrong filename returned)) VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) -ifneq ($(VARDEP_TEST_VAR2), $(VARDEP_FILE_CONTENTS)) - $(error Expected: $(VARDEP_TEST_VAR2) - DependOnVariable file contained: \ - $(VARDEP_FILE_CONTENTS)) -endif +$(eval $(call assert-equals, $(VARDEP_FILE_CONTENTS), \ + VARDEP_TEST_VAR2_old:=$(VARDEP_TEST_VAR2), \ + Wrong contents in vardeps file)) # Test with a variable value containing some problematic characters VARDEP_TEST_VAR3 := foo '""' "''" bar VARDEP_VALUE_FILE := $(call DependOnVariable, VARDEP_TEST_VAR3) VARDEP_FILE_CONTENTS := $(shell $(CAT) $(VARDEP_VALUE_FILE)) -ifneq ($(VARDEP_TEST_VAR3), $(VARDEP_FILE_CONTENTS)) - $(error Expected: >$(VARDEP_TEST_VAR3)< - DependOnVariable file contained: \ - >$(VARDEP_FILE_CONTENTS)<) -endif +$(eval $(call assert-equals, $(VARDEP_FILE_CONTENTS), \ + VARDEP_TEST_VAR3_old:=$(VARDEP_TEST_VAR3), \ + Wrong contents in vardep file)) TEST_TARGETS += test-vardep From c69db2f9409dfc64488f10f874ae7004ba6fb89f Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Mon, 28 Sep 2015 13:39:10 +0100 Subject: [PATCH 12/17] 8137056: Move SharedSecrets and interface friends out of sun.misc Reviewed-by: alanb, mchung, psandoz, rriggs --- modules.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/modules.xml b/modules.xml index 401b5b0b432..2c8ddccc9a2 100644 --- a/modules.xml +++ b/modules.xml @@ -222,6 +222,16 @@ jdk.internal.jimage.decompressor jdk.dev + + jdk.internal.misc + java.corba + java.desktop + java.logging + java.management + java.naming + java.sql + jdk.management.resource + jdk.internal.org.objectweb.asm java.instrument @@ -265,7 +275,6 @@ java.rmi java.security.jgss java.security.sasl - java.sql java.xml java.xml.ws jdk.charsets From 8f85a8ae8d242f9b292bb1b13d8c43610c8e268c Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Mon, 28 Sep 2015 15:51:29 +0200 Subject: [PATCH 13/17] 8135060: Stop building Xcode projects in install build Reviewed-by: ihse, pbhat, dmalav --- common/autoconf/compare.sh.in | 2 +- common/autoconf/flags.m4 | 5 +---- common/autoconf/generated-configure.sh | 7 ++----- common/autoconf/spec.gmk.in | 2 +- common/bin/compare.sh | 7 ++++++- make/StripBinaries.gmk | 4 ++-- make/common/MakeBase.gmk | 13 ++++++++++++- make/common/NativeCompilation.gmk | 22 ++++++++++++++++++++-- 8 files changed, 45 insertions(+), 17 deletions(-) diff --git a/common/autoconf/compare.sh.in b/common/autoconf/compare.sh.in index 244a6ebbab3..1ae11cd833d 100644 --- a/common/autoconf/compare.sh.in +++ b/common/autoconf/compare.sh.in @@ -60,7 +60,7 @@ RM="@RM@" SED="@SED@" SORT="@SORT@" STAT="@STAT@" -STRIP="@POST_STRIP_CMD@" +STRIP="@STRIP@ @STRIPFLAGS@" TEE="@TEE@" UNIQ="@UNIQ@" UNPACK200="@FIXPATH@ @BOOT_JDK@/bin/unpack200" diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4 index e61638daa14..7ede6b250c9 100644 --- a/common/autoconf/flags.m4 +++ b/common/autoconf/flags.m4 @@ -60,10 +60,7 @@ AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], STRIPFLAGS="-X32_64" fi - if test "x$OPENJDK_TARGET_OS" != xwindows; then - POST_STRIP_CMD="$STRIP $STRIPFLAGS" - fi - AC_SUBST(POST_STRIP_CMD) + AC_SUBST(STRIPFLAGS) if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then CC_OUT_OPTION=-Fo diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 8a25e6ef298..b369e41557a 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -735,7 +735,7 @@ AR_OUT_OPTION LD_OUT_OPTION EXE_OUT_OPTION CC_OUT_OPTION -POST_STRIP_CMD +STRIPFLAGS ARFLAGS COMPILER_TARGET_BITS_FLAG JT_HOME @@ -4359,7 +4359,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1441958217 +DATE_WHEN_GENERATED=1442448271 ############################################################################### # @@ -41053,9 +41053,6 @@ $as_echo "$tool_specified" >&6; } STRIPFLAGS="-X32_64" fi - if test "x$OPENJDK_TARGET_OS" != xwindows; then - POST_STRIP_CMD="$STRIP $STRIPFLAGS" - fi if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 8063ef61f17..7d97eab26b6 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -416,7 +416,7 @@ STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@ EXE_SUFFIX:=@EXE_SUFFIX@ OBJ_SUFFIX:=@OBJ_SUFFIX@ -POST_STRIP_CMD:=@POST_STRIP_CMD@ +STRIPFLAGS:=@STRIPFLAGS@ JAVA_FLAGS:=@JAVA_FLAGS@ JAVA_FLAGS_BIG:=@JAVA_FLAGS_BIG@ diff --git a/common/bin/compare.sh b/common/bin/compare.sh index ce527af478d..4c95ece3bb6 100644 --- a/common/bin/compare.sh +++ b/common/bin/compare.sh @@ -590,7 +590,7 @@ compare_bin_file() { ORIG_THIS_FILE="$THIS_FILE" ORIG_OTHER_FILE="$OTHER_FILE" - if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + if [ "$STRIP_ALL" = "true" ] || [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other @@ -1015,6 +1015,8 @@ if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1 echo "-vv More verbose output, shows diff output of all comparisons" echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" echo "" + echo "--strip Strip all binaries before comparing" + echo "" echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" echo "Example:" echo "bash ./common/bin/compareimages.sh CodePointIM.jar" @@ -1107,6 +1109,9 @@ while [ -n "$1" ]; do shift shift ;; + --strip) + STRIP_ALL=true + ;; *) CMP_NAMES=false CMP_PERMS=false diff --git a/make/StripBinaries.gmk b/make/StripBinaries.gmk index d1ac6f5e8e0..62f3b137763 100644 --- a/make/StripBinaries.gmk +++ b/make/StripBinaries.gmk @@ -38,13 +38,13 @@ $(eval $(call IncludeCustomExtension, , StripBinaries.gmk)) MODULES_CMDS_STRIPPED := $(SUPPORT_OUTPUTDIR)/modules_cmds-stripped MODULES_LIBS_STRIPPED := $(SUPPORT_OUTPUTDIR)/modules_libs-stripped -ifneq ($(POST_STRIP_CMD), ) +ifneq ($(STRIP), ) define StripRecipe $(ECHO) Stripping $(LOG_INFO) $(patsubst $(OUTPUT_ROOT)/%,%,$<) $(MKDIR) -p $(@D) $(CP) $< $@.tmp $(CHMOD) u+w $@.tmp - $(POST_STRIP_CMD) $@.tmp + $(STRIP) $(STRIPFLAGS) $@.tmp $(CHMOD) go-w $@.tmp $(MV) $@.tmp $@ endef diff --git a/make/common/MakeBase.gmk b/make/common/MakeBase.gmk index ea975f0e4fd..b9a9632e2da 100644 --- a/make/common/MakeBase.gmk +++ b/make/common/MakeBase.gmk @@ -674,6 +674,10 @@ define AddFileToCopy $3 += $2 endef +# Returns the value of the first argument +identity = \ + $(strip $1) + # Setup make rules for copying files, with an option to do more complex # processing instead of copying. # @@ -688,6 +692,8 @@ endef # FLATTEN : Set to flatten the directory structure in the DEST dir. # MACRO : Optionally override the default macro used for making the copy. # Default is 'install-file' +# NAME_MACRO : Optionally supply a macro that rewrites the target file name +# based on the source file name SetupCopyFiles = $(NamedParamsMacroTemplate) define SetupCopyFilesBody @@ -700,12 +706,17 @@ define SetupCopyFilesBody $1_SRC := $$(dir $$(firstword $$($1_FILES))) endif + ifeq ($$($1_NAME_MACRO), ) + $1_NAME_MACRO := identity + endif + # Remove any trailing slash from SRC $1_SRC := $$(patsubst %/,%,$$($1_SRC)) $$(foreach f, $$(patsubst $$($1_SRC)/%,%,$$($1_FILES)), \ $$(eval $$(call AddFileToCopy, $$($1_SRC)/$$f, \ - $$($1_DEST)/$$(if $$($1_FLATTEN),$$(notdir $$f),$$f), $1, $$($1_MACRO)))) + $$($1_DEST)/$$(call $$(strip $$($1_NAME_MACRO)),$$(if $$($1_FLATTEN),$$(notdir $$f),$$f)), \ + $1, $$($1_MACRO)))) endef diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index adba62283a1..1f437c74461 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -49,6 +49,7 @@ endif # AS - Assembler # MT - Windows MT tool # RC - Windows RC tool +# STRIP - The tool to use for stripping debug symbols # SYSROOT_CFLAGS - Compiler flags for using the specific sysroot # SYSROOT_LDFLAGS - Linker flags for using the specific sysroot DefineNativeToolchain = $(NamedParamsMacroTemplate) @@ -64,6 +65,7 @@ define DefineNativeToolchainBody $$(call SetIfEmpty, $1_AS, $$($$($1_EXTENDS)_AS)) $$(call SetIfEmpty, $1_MT, $$($$($1_EXTENDS)_MT)) $$(call SetIfEmpty, $1_RC, $$($$($1_EXTENDS)_RC)) + $$(call SetIfEmpty, $1_STRIP, $$($$($1_EXTENDS)_STRIP)) $$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_EXTENDS)_SYSROOT_CFLAGS)) $$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_EXTENDS)_SYSROOT_LDFLAGS)) endif @@ -78,6 +80,7 @@ $(eval $(call DefineNativeToolchain, TOOLCHAIN_DEFAULT, \ AS := $(AS), \ MT := $(MT), \ RC := $(RC), \ + STRIP := $(STRIP), \ SYSROOT_CFLAGS := $(SYSROOT_CFLAGS), \ SYSROOT_LDFLAGS := $(SYSROOT_LDFLAGS), \ )) @@ -265,6 +268,8 @@ endef # LD the linker to use, default is $(LD) # OPTIMIZATION sets optimization level to NONE, LOW, HIGH, HIGHEST # DISABLED_WARNINGS_ Disable the given warnings for the specified toolchain +# STRIP_SYMBOLS Set to true to strip the final binary if the toolchain allows for it +# STRIPFLAGS Optionally change the flags given to the strip command SetupNativeCompilation = $(NamedParamsMacroTemplate) define SetupNativeCompilationBody @@ -367,6 +372,7 @@ define SetupNativeCompilationBody $$(call SetIfEmpty, $1_AS, $$($$($1_TOOLCHAIN)_AS)) $$(call SetIfEmpty, $1_MT, $$($$($1_TOOLCHAIN)_MT)) $$(call SetIfEmpty, $1_RC, $$($$($1_TOOLCHAIN)_RC)) + $$(call SetIfEmpty, $1_STRIP, $$($$($1_TOOLCHAIN)_STRIP)) $$(call SetIfEmpty, $1_SYSROOT_CFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_CFLAGS)) $$(call SetIfEmpty, $1_SYSROOT_LDFLAGS, $$($$($1_TOOLCHAIN)_SYSROOT_LDFLAGS)) @@ -657,6 +663,14 @@ define SetupNativeCompilationBody endif # $1_DEBUG_SYMBOLS endif # !STATIC_LIBRARY + ifeq ($$($1_STRIP_SYMBOLS), true) + ifneq ($$($1_STRIP), ) + # Default to using the global STRIPFLAGS. Allow for overriding with an empty value + $1_STRIPFLAGS ?= $(STRIPFLAGS) + $1_STRIP_CMD := $$($1_STRIP) $$($1_STRIPFLAGS) $$($1_TARGET) + endif + endif + ifneq (,$$($1_LIBRARY)) # Generating a dynamic library. $1_EXTRA_LDFLAGS += $$(call SET_SHARED_LIBRARY_NAME,$$($1_BASENAME)) @@ -667,7 +681,8 @@ define SetupNativeCompilationBody $1_EXTRA_LDFLAGS_SUFFIX += $(GLOBAL_LDFLAGS_SUFFIX) $1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \ - $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) $$($1_CREATE_DEBUGINFO_CMDS) + $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) $$($1_CREATE_DEBUGINFO_CMDS) \ + $$($1_STRIP_CMD) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps) @@ -680,6 +695,7 @@ define SetupNativeCompilationBody $$($1_EXPECTED_OBJS) $$($1_RES) \ $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)) $$($1_CREATE_DEBUGINFO_CMDS) + $$($1_STRIP_CMD) # Touch target to make sure it has a later time stamp than the debug # symbol files to avoid unnecessary relinking on rebuild. ifeq ($(OPENJDK_TARGET_OS), windows) @@ -708,7 +724,8 @@ define SetupNativeCompilationBody $1_VARDEPS := $$($1_LD) $$($1_SYSROOT_LDFLAGS) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) \ $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX) $$($1_MT) \ - $$($1_CODESIGN) $$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) + $$($1_CODESIGN) $$($1_CREATE_DEBUGINFO_CMDS) $$($1_MANIFEST_VERSION) \ + $$($1_STRIP_CMD) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ $$($1_OBJECT_DIR)/$$($1_NOSUFFIX).vardeps) @@ -733,6 +750,7 @@ define SetupNativeCompilationBody endif endif $$($1_CREATE_DEBUGINFO_CMDS) + $$($1_STRIP_CMD) # Touch target to make sure it has a later time stamp than the debug # symbol files to avoid unnecessary relinking on rebuild. ifeq ($(OPENJDK_TARGET_OS), windows) From 1cfadcd46594cce35ecc16560e891ed0433db0f1 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Wed, 30 Sep 2015 11:38:01 +0200 Subject: [PATCH 14/17] 8138627: Better help message in configure for reduced builds (target-bits=32) Reviewed-by: erikj --- common/autoconf/generated-configure.sh | 83 ++++++++++++++++++++++++-- common/autoconf/help.m4 | 2 + common/autoconf/platform.m4 | 14 ++++- 3 files changed, 90 insertions(+), 9 deletions(-) diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index 774139554c0..e3ccaf62b99 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -3886,6 +3886,8 @@ msys_help() { apt_help() { case $1 in + reduced) + PKGHANDLER_COMMAND="sudo apt-get install gcc-multilib g++-multilib" ;; devkit) PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; openjdk) @@ -4362,7 +4364,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1442820958 +DATE_WHEN_GENERATED=1443605847 ############################################################################### # @@ -41543,8 +41545,38 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: Failed to compile stdio.h. This likely implies missing compile dependencies." >&5 $as_echo "$as_me: Failed to compile stdio.h. This likely implies missing compile dependencies." >&6;} if test "x$COMPILE_TYPE" = xreduced; then - { $as_echo "$as_me:${as_lineno-$LINENO}: You are doing a reduced build. Check that you have 32-bit libraries installed." >&5 -$as_echo "$as_me: You are doing a reduced build. Check that you have 32-bit libraries installed." >&6;} + + # Print a helpful message on how to acquire the necessary build dependency. + # reduced is the help tag: freetype, cups, pulse, alsa etc + MISSING_DEPENDENCY=reduced + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + cygwin_help $MISSING_DEPENDENCY + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + msys_help $MISSING_DEPENDENCY + else + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG" >&5 +$as_echo "$as_me: You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG" >&6;} elif test "x$COMPILE_TYPE" = xcross; then { $as_echo "$as_me:${as_lineno-$LINENO}: You are doing a cross-compilation. Check that you have all target platform libraries installed." >&5 $as_echo "$as_me: You are doing a cross-compilation. Check that you have all target platform libraries installed." >&6;} @@ -41603,8 +41635,8 @@ $as_echo "$as_me: WARNING: The number of bits in the target could not be determi # Let's try to implicitely set the compilers target architecture and retry the test { $as_echo "$as_me:${as_lineno-$LINENO}: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&5 $as_echo "$as_me: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)." >&6;} - { $as_echo "$as_me:${as_lineno-$LINENO}: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&5 -$as_echo "$as_me: I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Retrying with platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&5 +$as_echo "$as_me: Retrying with platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}" >&6;} # When we add flags to the "official" CFLAGS etc, we need to # keep track of these additions in ADDED_CFLAGS etc. These @@ -41667,7 +41699,46 @@ _ACEOF TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - as_fn_error $? "The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" "$LINENO" 5 + { $as_echo "$as_me:${as_lineno-$LINENO}: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" >&5 +$as_echo "$as_me: The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)" >&6;} + if test "x$COMPILE_TYPE" = xreduced; then + + # Print a helpful message on how to acquire the necessary build dependency. + # reduced is the help tag: freetype, cups, pulse, alsa etc + MISSING_DEPENDENCY=reduced + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + cygwin_help $MISSING_DEPENDENCY + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + msys_help $MISSING_DEPENDENCY + else + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG" >&5 +$as_echo "$as_me: You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG" >&6;} + elif test "x$COMPILE_TYPE" = xcross; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You are doing a cross-compilation. Check that you have all target platform libraries installed." >&5 +$as_echo "$as_me: You are doing a cross-compilation. Check that you have all target platform libraries installed." >&6;} + fi + as_fn_error $? "Cannot continue." "$LINENO" 5 fi fi fi diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4 index 3bdaf49852f..fcdc6ded2de 100644 --- a/common/autoconf/help.m4 +++ b/common/autoconf/help.m4 @@ -97,6 +97,8 @@ msys_help() { apt_help() { case $1 in + reduced) + PKGHANDLER_COMMAND="sudo apt-get install gcc-multilib g++-multilib" ;; devkit) PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;; openjdk) diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4 index 7ba118f0660..203b6285a06 100644 --- a/common/autoconf/platform.m4 +++ b/common/autoconf/platform.m4 @@ -489,7 +489,8 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], AC_CHECK_HEADERS([stdio.h], , [ AC_MSG_NOTICE([Failed to compile stdio.h. This likely implies missing compile dependencies.]) if test "x$COMPILE_TYPE" = xreduced; then - AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed.]) + HELP_MSG_MISSING_DEPENDENCY([reduced]) + AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG]) elif test "x$COMPILE_TYPE" = xcross; then AC_MSG_NOTICE([You are doing a cross-compilation. Check that you have all target platform libraries installed.]) fi @@ -509,7 +510,7 @@ AC_DEFUN_ONCE([PLATFORM_SETUP_OPENJDK_TARGET_BITS], # This situation may happen on 64-bit platforms where the compiler by default only generates 32-bit objects # Let's try to implicitely set the compilers target architecture and retry the test AC_MSG_NOTICE([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS).]) - AC_MSG_NOTICE([I'll retry after setting the platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}]) + AC_MSG_NOTICE([Retrying with platforms compiler target bits flag to ${COMPILER_TARGET_BITS_FLAG}${OPENJDK_TARGET_CPU_BITS}]) PLATFORM_SET_COMPILER_TARGET_BITS_FLAGS # We have to unset 'ac_cv_sizeof_int_p' first, otherwise AC_CHECK_SIZEOF will use the previously cached value! @@ -524,7 +525,14 @@ _ACEOF TESTED_TARGET_CPU_BITS=`expr 8 \* $ac_cv_sizeof_int_p` if test "x$TESTED_TARGET_CPU_BITS" != "x$OPENJDK_TARGET_CPU_BITS"; then - AC_MSG_ERROR([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + AC_MSG_NOTICE([The tested number of bits in the target ($TESTED_TARGET_CPU_BITS) differs from the number of bits expected to be found in the target ($OPENJDK_TARGET_CPU_BITS)]) + if test "x$COMPILE_TYPE" = xreduced; then + HELP_MSG_MISSING_DEPENDENCY([reduced]) + AC_MSG_NOTICE([You are doing a reduced build. Check that you have 32-bit libraries installed. $HELP_MSG]) + elif test "x$COMPILE_TYPE" = xcross; then + AC_MSG_NOTICE([You are doing a cross-compilation. Check that you have all target platform libraries installed.]) + fi + AC_MSG_ERROR([Cannot continue.]) fi fi fi From eb0e012f6c9b6508aa882f52a713b2eac8d2af53 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Mon, 5 Oct 2015 13:44:40 +0200 Subject: [PATCH 15/17] 8138694: Devkit build on Macosx still requires Xcode to be installed Reviewed-by: ihse, tbell --- common/autoconf/configure.ac | 5 + common/autoconf/flags.m4 | 168 ++++++++++-------- common/autoconf/generated-configure.sh | 231 ++++++++++++++----------- common/autoconf/hotspot-spec.gmk.in | 4 +- common/autoconf/spec.gmk.in | 2 + common/autoconf/toolchain.m4 | 6 + 6 files changed, 246 insertions(+), 170 deletions(-) diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac index ceaee324bea..a69df03b718 100644 --- a/common/autoconf/configure.ac +++ b/common/autoconf/configure.ac @@ -165,6 +165,11 @@ SRCDIRS_SETUP_OUTPUT_DIRS # First determine the toolchain type (compiler family) TOOLCHAIN_DETERMINE_TOOLCHAIN_TYPE +# User supplied flags should be used when configure detects compilers +FLAGS_SETUP_USER_SUPPLIED_FLAGS +# The sysroot cflags are needed for configure to be able to run the compilers +FLAGS_SETUP_SYSROOT_FLAGS + # Then detect the actual binaries needed TOOLCHAIN_PRE_DETECTION TOOLCHAIN_DETECT_TOOLCHAIN_CORE diff --git a/common/autoconf/flags.m4 b/common/autoconf/flags.m4 index e61638daa14..1216fba80f2 100644 --- a/common/autoconf/flags.m4 +++ b/common/autoconf/flags.m4 @@ -23,6 +23,100 @@ # questions. # +# Reset the global CFLAGS/LDFLAGS variables and initialize them with the +# corresponding configure arguments instead +AC_DEFUN_ONCE([FLAGS_SETUP_USER_SUPPLIED_FLAGS], +[ + if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) + fi + + if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) + fi + + if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) + fi + + AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], + [extra flags to be used when compiling jdk c-files])]) + + AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], + [extra flags to be used when compiling jdk c++-files])]) + + AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], + [extra flags to be used when linking jdk])]) + + EXTRA_CFLAGS="$with_extra_cflags" + EXTRA_CXXFLAGS="$with_extra_cxxflags" + EXTRA_LDFLAGS="$with_extra_ldflags" + + # Hotspot needs these set in their legacy form + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $EXTRA_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $EXTRA_CXXFLAGS" + LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $EXTRA_LDFLAGS" + + AC_SUBST(LEGACY_EXTRA_CFLAGS) + AC_SUBST(LEGACY_EXTRA_CXXFLAGS) + AC_SUBST(LEGACY_EXTRA_LDFLAGS) + + # The global CFLAGS and LDLAGS variables are used by configure tests and + # should include the extra parameters + CFLAGS="$EXTRA_CFLAGS" + CXXFLAGS="$EXTRA_CXXFLAGS" + LDFLAGS="$EXTRA_LDFLAGS" + CPPFLAGS="" +]) + +# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so +# that configure can use them while detecting compilers. +# TOOLCHAIN_TYPE is available here. +AC_DEFUN_ONCE([FLAGS_SETUP_SYSROOT_FLAGS], +[ + if test "x$SYSROOT" != "x"; then + if test "x$TOOLCHAIN_TYPE" = xsolstudio; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Solaris Studio does not have a concept of sysroot. Instead we must + # make sure the default include and lib dirs are appended to each + # compile and link command line. + SYSROOT_CFLAGS="-I$SYSROOT/usr/include" + SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ + -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ + -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" + fi + elif test "x$TOOLCHAIN_TYPE" = xgcc; then + SYSROOT_CFLAGS="--sysroot=$SYSROOT" + SYSROOT_LDFLAGS="--sysroot=$SYSROOT" + elif test "x$TOOLCHAIN_TYPE" = xclang; then + SYSROOT_CFLAGS="-isysroot $SYSROOT" + SYSROOT_LDFLAGS="-isysroot $SYSROOT" + fi + # Propagate the sysroot args to hotspot + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" + LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" + # The global CFLAGS and LDFLAGS variables need these for configure to function + CFLAGS="$CFLAGS $SYSROOT_CFLAGS" + CPPFLAGS="$CPPFLAGS $SYSROOT_CFLAGS" + CXXFLAGS="$CXXFLAGS $SYSROOT_CFLAGS" + LDFLAGS="$LDFLAGS $SYSROOT_LDFLAGS" + fi + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # We also need -iframework/System/Library/Frameworks + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -iframework $SYSROOT/System/Library/Frameworks" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -iframework $SYSROOT/System/Library/Frameworks" + # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework + # set this here so it doesn't have to be peppered throughout the forest + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -F $SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -F $SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" + fi + + AC_SUBST(SYSROOT_CFLAGS) + AC_SUBST(SYSROOT_LDFLAGS) +]) + AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], [ # Option used to tell the compiler whether to create 32- or 64-bit executables @@ -113,44 +207,6 @@ AC_DEFUN_ONCE([FLAGS_SETUP_INIT_FLAGS], # silence copyright notice and other headers. COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" fi - - if test "x$SYSROOT" != "x"; then - if test "x$TOOLCHAIN_TYPE" = xsolstudio; then - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Solaris Studio does not have a concept of sysroot. Instead we must - # make sure the default include and lib dirs are appended to each - # compile and link command line. - SYSROOT_CFLAGS="-I$SYSROOT/usr/include" - SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ - -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ - -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" - fi - elif test "x$OPENJDK_TARGET_OS" = xmacosx; then - # Apple only wants -isysroot , but we also need -iframework/System/Library/Frameworks - SYSROOT_CFLAGS="-isysroot \"$SYSROOT\" -iframework\"$SYSROOT/System/Library/Frameworks\"" - SYSROOT_LDFLAGS=$SYSROOT_CFLAGS - elif test "x$TOOLCHAIN_TYPE" = xgcc; then - SYSROOT_CFLAGS="--sysroot=$SYSROOT" - SYSROOT_LDFLAGS="--sysroot=$SYSROOT" - elif test "x$TOOLCHAIN_TYPE" = xclang; then - SYSROOT_CFLAGS="-isysroot \"$SYSROOT\"" - SYSROOT_LDFLAGS="-isysroot \"$SYSROOT\"" - fi - # Propagate the sysroot args to hotspot - LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" - LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" - LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" - fi - - # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework - # set this here so it doesn't have to be peppered throughout the forest - if test "x$OPENJDK_TARGET_OS" = xmacosx; then - SYSROOT_CFLAGS="$SYSROOT_CFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" - SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" - fi - - AC_SUBST(SYSROOT_CFLAGS) - AC_SUBST(SYSROOT_LDFLAGS) ]) AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_LIBS], @@ -480,39 +536,9 @@ AC_DEFUN_ONCE([FLAGS_SETUP_COMPILER_FLAGS_FOR_JDK], CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" fi - if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then - AC_MSG_WARN([Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags]) - fi - - if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then - AC_MSG_WARN([Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags]) - fi - - if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then - AC_MSG_WARN([Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags]) - fi - - AC_ARG_WITH(extra-cflags, [AS_HELP_STRING([--with-extra-cflags], - [extra flags to be used when compiling jdk c-files])]) - - AC_ARG_WITH(extra-cxxflags, [AS_HELP_STRING([--with-extra-cxxflags], - [extra flags to be used when compiling jdk c++-files])]) - - AC_ARG_WITH(extra-ldflags, [AS_HELP_STRING([--with-extra-ldflags], - [extra flags to be used when linking jdk])]) - - CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" - CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" - LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" - - # Hotspot needs these set in their legacy form - LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $with_extra_cflags" - LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $with_extra_cxxflags" - LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $with_extra_ldflags" - - AC_SUBST(LEGACY_EXTRA_CFLAGS) - AC_SUBST(LEGACY_EXTRA_CXXFLAGS) - AC_SUBST(LEGACY_EXTRA_LDFLAGS) + CFLAGS_JDK="${CFLAGS_JDK} $EXTRA_CFLAGS" + CXXFLAGS_JDK="${CXXFLAGS_JDK} $EXTRA_CXXFLAGS" + LDFLAGS_JDK="${LDFLAGS_JDK} $EXTRA_LDFLAGS" ############################################################################### # diff --git a/common/autoconf/generated-configure.sh b/common/autoconf/generated-configure.sh index e3ccaf62b99..07e6d3e6cf6 100644 --- a/common/autoconf/generated-configure.sh +++ b/common/autoconf/generated-configure.sh @@ -705,9 +705,6 @@ CXXFLAGS_JDKLIB CFLAGS_JDKEXE CFLAGS_JDKLIB MACOSX_VERSION_MIN -LEGACY_EXTRA_LDFLAGS -LEGACY_EXTRA_CXXFLAGS -LEGACY_EXTRA_CFLAGS CXX_O_FLAG_NONE CXX_O_FLAG_DEBUG CXX_O_FLAG_NORM @@ -728,8 +725,6 @@ SET_SHARED_LIBRARY_ORIGIN SET_EXECUTABLE_ORIGIN CXX_FLAG_REORDER C_FLAG_REORDER -SYSROOT_LDFLAGS -SYSROOT_CFLAGS RC_FLAGS AR_OUT_OPTION LD_OUT_OPTION @@ -747,6 +742,8 @@ HOTSPOT_LD HOTSPOT_CXX HOTSPOT_RC HOTSPOT_MT +BUILD_SYSROOT_LDFLAGS +BUILD_SYSROOT_CFLAGS BUILD_LD BUILD_CXX BUILD_CC @@ -793,6 +790,11 @@ VS_LIB VS_INCLUDE VS_PATH CYGWIN_LINK +SYSROOT_LDFLAGS +SYSROOT_CFLAGS +LEGACY_EXTRA_LDFLAGS +LEGACY_EXTRA_CXXFLAGS +LEGACY_EXTRA_CFLAGS EXE_SUFFIX OBJ_SUFFIX STATIC_LIBRARY @@ -1078,11 +1080,11 @@ with_override_nashorn with_override_jdk with_import_hotspot with_toolchain_type -with_toolchain_version -with_jtreg with_extra_cflags with_extra_cxxflags with_extra_ldflags +with_toolchain_version +with_jtreg enable_warnings_as_errors enable_debug_symbols enable_zip_debug_info @@ -1937,14 +1939,14 @@ Optional Packages: source --with-toolchain-type the toolchain type (or family) to use, use '--help' to show possible values [platform dependent] + --with-extra-cflags extra flags to be used when compiling jdk c-files + --with-extra-cxxflags extra flags to be used when compiling jdk c++-files + --with-extra-ldflags extra flags to be used when linking jdk --with-toolchain-version the version of the toolchain to look for, use '--help' to show possible values [platform dependent] --with-jtreg Regression Test Harness [probed] - --with-extra-cflags extra flags to be used when compiling jdk c-files - --with-extra-cxxflags extra flags to be used when compiling jdk c++-files - --with-extra-ldflags extra flags to be used when linking jdk --with-x use the X Window System --with-cups specify prefix directory for the cups package (expecting the headers under PATH/include) @@ -3767,6 +3769,15 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # questions. # +# Reset the global CFLAGS/LDFLAGS variables and initialize them with the +# corresponding configure arguments instead + + +# Setup the sysroot flags and add them to global CFLAGS and LDFLAGS so +# that configure can use them while detecting compilers. +# TOOLCHAIN_TYPE is available here. + + @@ -4364,7 +4375,7 @@ VS_SDK_PLATFORM_NAME_2013= #CUSTOM_AUTOCONF_INCLUDE # Do not change or remove the following line, it is needed for consistency checks: -DATE_WHEN_GENERATED=1443605847 +DATE_WHEN_GENERATED=1444045451 ############################################################################### # @@ -26827,6 +26838,109 @@ $as_echo "$as_me: Using user selected toolchain $TOOLCHAIN_TYPE ($TOOLCHAIN_DESC fi +# User supplied flags should be used when configure detects compilers + + if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags" >&5 +$as_echo "$as_me: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags" >&2;} + fi + + if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags" >&5 +$as_echo "$as_me: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags" >&2;} + fi + + if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags" >&5 +$as_echo "$as_me: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags" >&2;} + fi + + +# Check whether --with-extra-cflags was given. +if test "${with_extra_cflags+set}" = set; then : + withval=$with_extra_cflags; +fi + + + +# Check whether --with-extra-cxxflags was given. +if test "${with_extra_cxxflags+set}" = set; then : + withval=$with_extra_cxxflags; +fi + + + +# Check whether --with-extra-ldflags was given. +if test "${with_extra_ldflags+set}" = set; then : + withval=$with_extra_ldflags; +fi + + + EXTRA_CFLAGS="$with_extra_cflags" + EXTRA_CXXFLAGS="$with_extra_cxxflags" + EXTRA_LDFLAGS="$with_extra_ldflags" + + # Hotspot needs these set in their legacy form + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $EXTRA_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $EXTRA_CXXFLAGS" + LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $EXTRA_LDFLAGS" + + + + + + # The global CFLAGS and LDLAGS variables are used by configure tests and + # should include the extra parameters + CFLAGS="$EXTRA_CFLAGS" + CXXFLAGS="$EXTRA_CXXFLAGS" + LDFLAGS="$EXTRA_LDFLAGS" + CPPFLAGS="" + +# The sysroot cflags are needed for configure to be able to run the compilers + + if test "x$SYSROOT" != "x"; then + if test "x$TOOLCHAIN_TYPE" = xsolstudio; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Solaris Studio does not have a concept of sysroot. Instead we must + # make sure the default include and lib dirs are appended to each + # compile and link command line. + SYSROOT_CFLAGS="-I$SYSROOT/usr/include" + SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ + -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ + -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" + fi + elif test "x$TOOLCHAIN_TYPE" = xgcc; then + SYSROOT_CFLAGS="--sysroot=$SYSROOT" + SYSROOT_LDFLAGS="--sysroot=$SYSROOT" + elif test "x$TOOLCHAIN_TYPE" = xclang; then + SYSROOT_CFLAGS="-isysroot $SYSROOT" + SYSROOT_LDFLAGS="-isysroot $SYSROOT" + fi + # Propagate the sysroot args to hotspot + LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" + LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" + LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" + # The global CFLAGS and LDFLAGS variables need these for configure to function + CFLAGS="$CFLAGS $SYSROOT_CFLAGS" + CPPFLAGS="$CPPFLAGS $SYSROOT_CFLAGS" + CXXFLAGS="$CXXFLAGS $SYSROOT_CFLAGS" + LDFLAGS="$LDFLAGS $SYSROOT_LDFLAGS" + fi + + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # We also need -iframework/System/Library/Frameworks + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -iframework $SYSROOT/System/Library/Frameworks" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -iframework $SYSROOT/System/Library/Frameworks" + # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework + # set this here so it doesn't have to be peppered throughout the forest + SYSROOT_CFLAGS="$SYSROOT_CFLAGS -F $SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" + SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -F $SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks" + fi + + + + + # Then detect the actual binaries needed # FIXME: Is this needed? @@ -40557,12 +40671,16 @@ $as_echo "$as_me: Rewriting BUILD_LD to \"$new_complete\"" >&6;} fi fi + BUILD_SYSROOT_CFLAGS="" + BUILD_SYSROOT_LDFLAGS="" else # If we are not cross compiling, use the normal target compilers for # building the build platform executables. BUILD_CC="$CC" BUILD_CXX="$CXX" BUILD_LD="$LD" + BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" + BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" fi @@ -40570,6 +40688,8 @@ $as_echo "$as_me: Rewriting BUILD_LD to \"$new_complete\"" >&6;} + + if test "x$TOOLCHAIN_TYPE" = xmicrosoft; then # For hotspot, we need these in Windows mixed path, # so rewrite them all. Need added .exe suffix. @@ -41308,44 +41428,6 @@ $as_echo "$tool_specified" >&6; } COMMON_CCXXFLAGS="$COMMON_CCXXFLAGS -nologo" fi - if test "x$SYSROOT" != "x"; then - if test "x$TOOLCHAIN_TYPE" = xsolstudio; then - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - # Solaris Studio does not have a concept of sysroot. Instead we must - # make sure the default include and lib dirs are appended to each - # compile and link command line. - SYSROOT_CFLAGS="-I$SYSROOT/usr/include" - SYSROOT_LDFLAGS="-L$SYSROOT/usr/lib$OPENJDK_TARGET_CPU_ISADIR \ - -L$SYSROOT/lib$OPENJDK_TARGET_CPU_ISADIR \ - -L$SYSROOT/usr/ccs/lib$OPENJDK_TARGET_CPU_ISADIR" - fi - elif test "x$OPENJDK_TARGET_OS" = xmacosx; then - # Apple only wants -isysroot , but we also need -iframework/System/Library/Frameworks - SYSROOT_CFLAGS="-isysroot \"$SYSROOT\" -iframework\"$SYSROOT/System/Library/Frameworks\"" - SYSROOT_LDFLAGS=$SYSROOT_CFLAGS - elif test "x$TOOLCHAIN_TYPE" = xgcc; then - SYSROOT_CFLAGS="--sysroot=$SYSROOT" - SYSROOT_LDFLAGS="--sysroot=$SYSROOT" - elif test "x$TOOLCHAIN_TYPE" = xclang; then - SYSROOT_CFLAGS="-isysroot \"$SYSROOT\"" - SYSROOT_LDFLAGS="-isysroot \"$SYSROOT\"" - fi - # Propagate the sysroot args to hotspot - LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $SYSROOT_CFLAGS" - LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $SYSROOT_CFLAGS" - LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $SYSROOT_LDFLAGS" - fi - - # These always need to be set, or we can't find the frameworks embedded in JavaVM.framework - # set this here so it doesn't have to be peppered throughout the forest - if test "x$OPENJDK_TARGET_OS" = xmacosx; then - SYSROOT_CFLAGS="$SYSROOT_CFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" - SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS -F\"$SYSROOT/System/Library/Frameworks/JavaVM.framework/Frameworks\"" - fi - - - - # FIXME: Currently we must test this after toolchain but before flags. Fix! @@ -42338,54 +42420,9 @@ $as_echo "$supports" >&6; } CXXFLAGS_JDK="${CXXFLAGS_JDK} -qchars=signed -qfullpath -qsaveopt" fi - if test "x$CFLAGS" != "x${ADDED_CFLAGS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags" >&5 -$as_echo "$as_me: WARNING: Ignoring CFLAGS($CFLAGS) found in environment. Use --with-extra-cflags" >&2;} - fi - - if test "x$CXXFLAGS" != "x${ADDED_CXXFLAGS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags" >&5 -$as_echo "$as_me: WARNING: Ignoring CXXFLAGS($CXXFLAGS) found in environment. Use --with-extra-cxxflags" >&2;} - fi - - if test "x$LDFLAGS" != "x${ADDED_LDFLAGS}"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags" >&5 -$as_echo "$as_me: WARNING: Ignoring LDFLAGS($LDFLAGS) found in environment. Use --with-extra-ldflags" >&2;} - fi - - -# Check whether --with-extra-cflags was given. -if test "${with_extra_cflags+set}" = set; then : - withval=$with_extra_cflags; -fi - - - -# Check whether --with-extra-cxxflags was given. -if test "${with_extra_cxxflags+set}" = set; then : - withval=$with_extra_cxxflags; -fi - - - -# Check whether --with-extra-ldflags was given. -if test "${with_extra_ldflags+set}" = set; then : - withval=$with_extra_ldflags; -fi - - - CFLAGS_JDK="${CFLAGS_JDK} $with_extra_cflags" - CXXFLAGS_JDK="${CXXFLAGS_JDK} $with_extra_cxxflags" - LDFLAGS_JDK="${LDFLAGS_JDK} $with_extra_ldflags" - - # Hotspot needs these set in their legacy form - LEGACY_EXTRA_CFLAGS="$LEGACY_EXTRA_CFLAGS $with_extra_cflags" - LEGACY_EXTRA_CXXFLAGS="$LEGACY_EXTRA_CXXFLAGS $with_extra_cxxflags" - LEGACY_EXTRA_LDFLAGS="$LEGACY_EXTRA_LDFLAGS $with_extra_ldflags" - - - - + CFLAGS_JDK="${CFLAGS_JDK} $EXTRA_CFLAGS" + CXXFLAGS_JDK="${CXXFLAGS_JDK} $EXTRA_CXXFLAGS" + LDFLAGS_JDK="${LDFLAGS_JDK} $EXTRA_LDFLAGS" ############################################################################### # diff --git a/common/autoconf/hotspot-spec.gmk.in b/common/autoconf/hotspot-spec.gmk.in index 2cc8be74416..dbc11ff4e4b 100644 --- a/common/autoconf/hotspot-spec.gmk.in +++ b/common/autoconf/hotspot-spec.gmk.in @@ -48,8 +48,8 @@ ALT_CUPS_HEADERS_PATH:=$(patsubst -I%,%,$(filter -I%,@CUPS_CFLAGS@)) # The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the # compiler that produces code that can be run on the build platform. -HOSTCC:=@FIXPATH@ @BUILD_CC@ -HOSTCXX:=@FIXPATH@ @BUILD_CXX@ +HOSTCC:=@FIXPATH@ @BUILD_CC@ $(BUILD_SYSROOT_CFLAGS) +HOSTCXX:=@FIXPATH@ @BUILD_CXX@ $(BUILD_SYSROOT_CFLAGS) #################################################### # diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in index 12e5be702f8..50fd80438e4 100644 --- a/common/autoconf/spec.gmk.in +++ b/common/autoconf/spec.gmk.in @@ -367,6 +367,8 @@ LDFLAGS_TESTEXE_SUFFIX:=@LDFLAGS_TESTEXE_SUFFIX@ # build platform. BUILD_CC:=@FIXPATH@ @BUILD_CC@ BUILD_LD:=@FIXPATH@ @BUILD_LD@ +BUILD_SYSROOT_CFLAGS:=@BUILD_SYSROOT_CFLAGS@ +BUILD_SYSROOT_LDFLAGS:=@BUILD_SYSROOT_LDFLAGS@ AS:=@FIXPATH@ @AS@ diff --git a/common/autoconf/toolchain.m4 b/common/autoconf/toolchain.m4 index 0b1c8f274a7..b958e6e5b6f 100644 --- a/common/autoconf/toolchain.m4 +++ b/common/autoconf/toolchain.m4 @@ -656,17 +656,23 @@ AC_DEFUN_ONCE([TOOLCHAIN_SETUP_BUILD_COMPILERS], BASIC_FIXUP_EXECUTABLE(BUILD_CXX) BASIC_PATH_PROGS(BUILD_LD, ld) BASIC_FIXUP_EXECUTABLE(BUILD_LD) + BUILD_SYSROOT_CFLAGS="" + BUILD_SYSROOT_LDFLAGS="" else # If we are not cross compiling, use the normal target compilers for # building the build platform executables. BUILD_CC="$CC" BUILD_CXX="$CXX" BUILD_LD="$LD" + BUILD_SYSROOT_CFLAGS="$SYSROOT_CFLAGS" + BUILD_SYSROOT_LDFLAGS="$SYSROOT_LDFLAGS" fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CXX) AC_SUBST(BUILD_LD) + AC_SUBST(BUILD_SYSROOT_CFLAGS) + AC_SUBST(BUILD_SYSROOT_LDFLAGS) ]) # Setup legacy variables that are still needed as alternative ways to refer to From c0c00e1422154376e5c09a209e1b3cfc2edbc321 Mon Sep 17 00:00:00 2001 From: Lana Steuck Date: Mon, 5 Oct 2015 20:24:57 -0700 Subject: [PATCH 16/17] Added tag jdk9-b84 for changeset 47d1c2c75fb6 --- .hgtags-top-repo | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags-top-repo b/.hgtags-top-repo index efc628e8d05..d4a55a3daca 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -326,3 +326,4 @@ f7c5ae2933c0b8510a420d1713a955e4ffc7ad0b jdk9-b80 b8afcf91331d78626a583ec1b63164468d6f4181 jdk9-b81 42b56d1f418523ecb61a49d7493302c80c8009cc jdk9-b82 ce5c14d97d95084504c32b9320cb33cce4235588 jdk9-b83 +1c8134475511ffe6726677e1418a89a7a45e92d6 jdk9-b84 From 2da00b4c36a78518a2691143827109c4be1e65ee Mon Sep 17 00:00:00 2001 From: Lana Steuck Date: Mon, 5 Oct 2015 20:24:59 -0700 Subject: [PATCH 17/17] Added tag jdk9-b84 for changeset 43c458023730 --- hotspot/.hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 0b94c19363e..e38f13379a6 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -486,3 +486,4 @@ e9e63d93bbfe2c6c23447e2c1f5cc71c98671cba jdk9-b79 4142c190cd5ca4fb70ec367b4f97ef936272d8ef jdk9-b81 1c453a12be3036d482abef1dd470f8aff536b6b9 jdk9-b82 3ed0df2c553a80e0e26b91a6ce08806ea17a066a jdk9-b83 +184c4328444974edd6b3b490b9d0177ace7e331c jdk9-b84